Если проблема, которую вы видите, связана с тем, что вложенные классы имеют то же имя, что и родительские классы, по предоставленной вами ссылке:
ТогдаВы можете обойти эту проблему, используя внешний файл привязок:
recursive.xml
Файл привязки позволяет переименовывать вложенные классы, чтобы избежать конфликта имен.
<jaxb:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jaxb:bindings schemaLocation="recursive.xsd">
<jaxb:bindings node="/xsd:schema/xsd:element[@name='topic']/xsd:complexType/xsd:sequence/xsd:element[@name='topic']/xsd:complexType">
<jaxb:class name="Topic2"/>
</jaxb:bindings>
<jaxb:bindings node="/xsd:schema/xsd:element[@name='topic']/xsd:complexType/xsd:sequence/xsd:element[@name='topic']/xsd:complexType/xsd:sequence/xsd:element[@name='topic']/xsd:complexType">
<jaxb:class name="Topic3"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
recursive.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="topic">
<xs:complexType>
<xs:sequence>
<xs:element name="topic" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="topic" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="topic" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
вызов XJC
Файл привязки указан в вызове XJC:
xjc -d out -b recursive.xml recursive.xsd
Тема (Генерируемый класс)
package generated;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"topic"
})
@XmlRootElement(name = "topic")
public class Topic {
@XmlElement(required = true)
protected Topic.Topic2 topic;
public Topic.Topic2 getTopic() {
return topic;
}
public void setTopic(Topic.Topic2 value) {
this.topic = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"topic"
})
public static class Topic2 {
@XmlElement(required = true)
protected Topic.Topic2 .Topic3 topic;
public Topic.Topic2 .Topic3 getTopic() {
return topic;
}
public void setTopic(Topic.Topic2 .Topic3 value) {
this.topic = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"topic"
})
public static class Topic3 {
protected List<String> topic;
public List<String> getTopic() {
if (topic == null) {
topic = new ArrayList<String>();
}
return this.topic;
}
}
}
}