我目前正在使用JAXB生成Java類以便解組XML。現在我想創建一個與第一個非常相似的新模式,並讓生成的類實現相同的接口。生成實現接口的JAXB類
比方說,我有一個定義XML類似代碼的兩條架構文件:
adult.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Age" type="xs:integer" />
<xs:element name="Job" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
kid.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:element name="Person">
<xs:complexType>
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Age" type="xs:integer" />
<xs:element name="School" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
使用JAXB和XJC我」 d喜歡生成兩個類文件:
public class Adult implements Person {
...
public String getName() { ... }
public int getAge() { ... }
public String getJob { ... }
}
public class Kid implements Person {
...
public String getName() { ... }
public int getAge() { ... }
public String getSchool { ... }
}
其中Person接口定義了getName()
和getAge()
方法。
我已經看過一些documentation的映射接口,但這似乎只適用於當您已經有想要映射到DOM的Java類的情況。
此外,我試過使用這external plugin,但它似乎沒有工作。這裏是我的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"
xmlns:ext="http://xml.w-wins.com/xjc-plugins/interfaces"
jxb:extensionBindingPrefixes="xjc">
<jxb:bindings schemaLocation="xsd/adult.xsd" node="xs:schema/xs:complexType[@name='Person']">
<ext:interface>mypackage.Hello</ext:interface>
</jxb:bindings>
</jxb:bindings>
但這提供了以下錯誤:
$ java -cp "lib/activation.jar;lib/InterfacesXJCPlugin.jar;lib/jaxb1-impl.jar;lib/jaxb-api.jar;lib/jaxb-xjc.jar;lib/jsr173_1.0_api.jar" com.sun.tools.xjc.XJCFacade -p mypackage.myxml -extension -Xinterfaces xsd/adult.xsd -b binding.xjb
parsing a schema...
[ERROR] XPath evaluation of "xs:schema/xs:complexType[@name='Person']" results in empty target node
line 8 of file:/C:/dev/jaxb/jaxb-ri/binding.xjb
Failed to parse a schema.
是否有可能生成JAXB類實現接口?
更新
我使用Interface Insertion插件嘗試,但由於某種原因不能得到它的工作。這就是我打電話XJC但它是因爲如果該插件罐子是沒有得到從classpath回升:
$ java -cp "lib/xjc-if-ins.jar;lib/jaxb-xjc.jar" com.sun.tools.xjc.XJCFacade -p mypackage -extension -Xifins myschema.xsd -b binding.xjb
我得到的錯誤:
unrecognized parameter -Xifins
任何想法?
Interface Insertion插件可用於使從XSD元素生成的類實現特定的接口。這裏你想根據模式名稱生成一個類 - 你需要另一個插件來完成。 我已經使用maven成功地完成了界面插入工作。讓我知道你是否需要細節。 接口插入的來源在這裏:https://jaxb2-commons.dev.java.net/interface-insertion/xjc-if-ins-src.jar – rochb 2009-11-13 16:43:45