5
林」試圖使用擴展‘-Xinject碼’的XJC一些代碼添加到我的生成的類JXB。對於下面的簡單XSD架構...與插入代碼XJC + XSD +使用選項「-Xinject碼-extension」
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MyList" >
<xs:complexType>
<xs:sequence>
<xs:element ref="MyItem" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MyItem">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
..我相關的以下綁定:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
jxb:extensionBindingPrefixes="ci "
jxb:version="2.1"
>
<jxb:bindings schemaLocation="test.xsd">
<jxb:bindings node="/xs:schema/xs:element[@name='MyItem']">
<ci:code>
@Override
public String toString() { return this.getName();}
</ci:code>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
運行XJC輸出如下:
$ xjc -target 2.1 -verbose -Xinject-code -extension -d . -p generated -b test.jxb test.xsd
parsing a schema...
compiling a schema...
[INFO] generating code
unknown location
generated/MyItem.java
generated/MyList.java
generated/ObjectFactory.java
但文件'generated/MyItem.java'不包含新的方法「toString」。我應該如何解決這個問題?什麼是「未知位置」的消息?
注:
$ xjc -version
xjc 2.2.4
編輯:
改變XSD:元素XSD:複雜類型做這項工作:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="MyItemType">
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="MyList" >
<xs:complexType>
<xs:sequence>
<xs:element name="MyItem" type="MyItemType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
和
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:ci="http://jaxb.dev.java.net/plugin/code-injector"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
jxb:extensionBindingPrefixes="ci "
jxb:version="2.1"
>
<jxb:bindings schemaLocation="test.xsd">
<jxb:bindings node="/xs:schema/xs:complexType[@name='MyItemType']">
<ci:code>
@Override
public String toString() { return this.getName();}
</ci:code>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
我現在可以看到「生成/ MyItemType.java」
$ tail generated/MyItemType.java
@Override
public String toString() { return this.getName();}
}
在文件中的代碼,但我怎麼能告訴XJC產生不改變XSD文件中的代碼?
我有完全相同的問題,你的答案是正確的解決方案。謝謝! – jhyot