У меня есть следующий xsd файл:
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" nillable="true" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="item" minOccurs="0" nillable="true" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="note" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element name="item" minOccurs="0" nillable="true" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="description"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
и следующие привязки.xjb
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> <jxb:globalBindings localScoping="toplevel">
<xjc:simple/>
</jxb:globalBindings>
<jxb:bindings schemaLocation="model.xsd">
<jxb:schemaBindings>
<jxb:package name="test"/>
</jxb:schemaBindings>
<jxb:bindings node="/xs:schema/xs:element[@name='shiporder']">
<jxb:class name="Shiporderrrr"/>
</jxb:bindings>
<jxb:bindings node="/xs:schema/xs:element[@name='shiporder']/xs:complexType/xs:sequence/xs:element[@name='item']/xs:complexType/xs:sequence/xs:element[@name='item']">
<jxb:class name="ShiporderItemItem"/>
</jxb:bindings>
<jxb:bindings node="/xs:schema/xs:element[@name='item']">
<jxb:class name="Item"/>
</jxb:bindings>
<jxb:bindings node="/xs:schema/xs:element[@name='item']/xs:complexType/xs:sequence/xs:element[@name='item']">
<jxb:class name="ItemItem"/>
</jxb:bindings>
</jxb:bindings>
У меня также есть следующий xml-файл:
<shiporder>
<item>
<title>string1</title>
<item>
<note>string1</note>
</item>
</item>
</shiporder>
Когда я отменяю использование классов, сгенерированных jaxb:
import test.Shiporderrrr;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.nio.file.Paths;
public class JaxbTest {
public static void main(String[] args) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Shiporderrrr.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Shiporderrrr shiporder = (Shiporderrrr)unmarshaller.unmarshal(Paths.get("src/main/resources/model1.xml").toFile());
System.out.println(shiporder.getItems().get(0).getValue().getTitle());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Я получаю следующее исключение:
java.lang.ClassCastException: test.ShiporderItem $ ShiporderItemItem не может быть приведен к test.ShiporderItem
на JaxbTest.main (JaxbTest.java:16)
Не могли бы вы помочь мне узнать, что я здесь не так делаю?
Я думаю, что все здесь должно работать нормально.
Должен ли я переписать свои привязки другим способом?