У меня есть XSD-схема со следующим элементом:
<xs:element name="FooResponse" type="commonTypes:Response" />
Когда я запускаю сборку (которая имеет цель xjc
для преобразования схемы в источники Java), отдельный файл класса FooResponse.java
не создан (возможно, потому что он будет идентичен Response.java
. Теперь я знаю, что могу переписать схему следующим образом:
<xs:element name="FooResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="commonTypes:Request"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
и получить искомый результат. Однакосхема автоматически генерируется из инструмента, и я бы предпочел не трогать ее вручную. Есть ли способ настроить плагин для создания исходного файла в этой ситуации?
Мне нужно получить оба Response.java
и FooResponse.java
созданы, поскольку существуют другие типы, не связанные с FooResponse
, которые должны наследоваться от него.
Я попытался создать файл привязки XJB, например:
<jaxb:bindings version="2.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="my_schema.xsd" node="/xs:schema/xs:element[@name='FooResponse']">
<jaxb:class name="FooResponse"/>
</jaxb:bindings>
</jaxb:bindings>
Thisработает так, что я получаю Response.java
и FooResponse.java
, но содержимое FooResponse
не совсем то, что я хотел бы:
public class FooResponse
extends JAXBElement<Response>
{
protected final static QName NAME = new QName("initech.com/c/m", "FooResponse");
public FooResponse(Response value) {
super(NAME, ((Class) Response.class), null, value);
}
public FooResponse() {
super(NAME, ((Class) Response.class), null, null);
}
}
Это было бы именно то, что я хочу, если бы я получил егорасширять Response
напрямую, не оборачивая его в JAXBElement
.