我有一個這樣的XML:多態性XSD架構和JAXB類
<todo>
<doLaundry cost="1"/>
<washCar cost="10"/>
<tidyBedroom cost="0" experiencePoints="5000"/>
</todo>
而且XSD架構是:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="todo">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="doLaundry" type="doLaundry" />
<xs:element name="washCar" type="washCar" />
<xs:element name="tidyBedroom" type="tidyBedroom" />
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="doLaundry">
<xs:attribute name="cost" type="xs:int" />
</xs:complexType>
<xs:complexType name="washCar">
<xs:attribute name="cost" type="xs:int" />
</xs:complexType>
<xs:complexType name="tidyBedroom">
<xs:attribute name="cost" type="xs:int" />
<xs:attribute name="experiencePoints" type="xs:int" />
</xs:complexType>
</xs:schema>
當我通過JAXB處理這個模式,我收到了類的方法是這樣的:
public class Todo {
public List<Object> getDoLaundryOrWashCarOrTidyBedroom() {
...
}
}
理想情況下,我想要的是一種方法來定義一個泛型基類型的所有其他X SD類型擴展。從XSD模式生成的Jaxb類應該有一個返回一般任務列表的方法。這將使它很容易添加新任務的待辦事項列表:
public class Todo {
public List<Task> getTasks() {
...
}
}
public abstract class Task {
public int getCost() {
...
}
}
public class TidyBedroom extends Task {
public int getExperiencePoints() {
...
}
}
又該XSD架構的樣子,以產生上述的Java類?
我覺得我沒有讓我的問題明確地足夠清楚。我從一個XSD模式開始,希望通過JAXB生成Java類。我想知道是否有可能以給出所需Java對象模型的方式構建XSD - 而不是相反。 – 2011-02-17 11:16:50
您可以在XML模式中定義類型之間的繼承關係。看看這個帖子的例子:http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-using-xsitype.html – 2011-02-17 11:30:39