2012-09-04 20 views
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文件中的代碼?

回答

2

請嘗試/xs:schema/xs:element[@name='MyItem']/xs:complexType

+0

我有完全相同的問題,你的答案是正確的解決方案。謝謝! – jhyot