2015-03-13 57 views
0

我試圖使用jaxws-maven-plugin WSDL生成類重命名一個類,但我得到不可編譯的結果。問題是XSD文件,在這裏你可以看到有相同名稱的嵌套的元素之一,這部分:XPath來在瘋狂層次

<xs:complexType name="TrafficCountsReplyData" abstract="true"> 
<xs:sequence> 
    <xs:element name="effectiveTrafficWindow" type="common:DateTimeMinutePeriod" minOccurs="1" maxOccurs="1"/> 
    <xs:element name="flows" minOccurs="0" maxOccurs="1"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="item" type="flow:Flow" minOccurs="0" maxOccurs="100"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="counts" minOccurs="0" maxOccurs="1"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="item" minOccurs="0" maxOccurs="1440"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="key" type="common:DateTimeMinutePeriod" minOccurs="1" 
             maxOccurs="1"/> 
          <xs:element name="value" minOccurs="0" maxOccurs="1"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="item" minOccurs="1" maxOccurs="3"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="key" type="flight:TrafficType" 
                   minOccurs="1" maxOccurs="1"/> 
                <xs:element name="value" type="flow:Counts" minOccurs="1" 
                   maxOccurs="1"/> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:sequence> 
</xs:complexType> 

正如你所看到的,有一個名爲item多個元素。這導致多個內部類在單個類中具有相同的名稱TrafficCountsReplyData

所以我試圖把一個綁定文件重命名其中一個。當我嘗試使用到重命名counts元素外item這樣的:

<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs:element[@name='item']"> 
     <jaxb:class name="Lulz"/> 
    </jaxb:bindings> 

我得到以下錯誤:

[錯誤]的「// XS XPath計算:複雜類型[@名稱=」 TrafficCountsReplyData '] //的xs:元素[@名稱=' 計數 '] //的xs:元素[@名稱=' 項目']」導致太多(2)目標節點

當我創建綁定的xpath表達用於內一個這樣的:

<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']//xs:element[@name='item']//xs:element[@name='value']//xs:element[@name='item']"> 

然後我得到以下錯誤:

java.lang.IllegalArgumentException異常:非法類繼承循環。外部類Lulz可能無法從內部類的子類:Lulz

我無法弄清楚如何使這項工作。遺產從哪裏來?還有一個itemflows元素,但是這不應該的XPath匹配。沒有綁定文件,我可以生成源代碼。我在綁定文件中有正確的模式,因爲我可以例如重命名由父元素生成的類。

回答

0

我發現這裏的解決方案:JAXB Customizations With a Poorly Formed WSDL

我不得不在Xpath的末尾添加/xs:complexType。我想這是因爲類的根實際上是complexType而不是封裝xs:元素。所以它是這樣的:

<jaxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:element[@name='counts']/xs:complexType/xs:sequence/xs:element[@name='item']/xs:complexType"> 
     <jaxb:class name="Lulz"/> 
</jaxb:bindings> 

現在我可以生成類並編譯它們。

1

嗯 我有一個類似的問題,但隨着性能.. 我不ahve完整XSD檢查,但前提是你要到外項目標籤變成別的東西,試試這個:

<?xml version="1.0"?> 
    <jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
     jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
     <jxb:bindings schemaLocation="../yourlocation/yourschema.xsd" version="1.0"> 
      <!-- Customise the package name --> 

      <jxb:schemaBindings> 
       <jxb:package name="whatyouwant.something"/> 
      </jxb:schemaBindings> 

      <!-- rename the value element --> 
      <jxb:bindings node="//xs:complexType[@name='TrafficCountsReplyData']//xs:sequence//xs:element[@name='counts']//xs:complexType//xs:sequence//xs:element[@name='item']"> 
        <jaxb:class name="Lulz"/> 
      </jxb:bindings> 
     </jxb:bindings> 
    </jxb:bindings> 

如果這似乎不工作,如果你可以透露XML我應該能夠幫助你進一步(在假期之前,直到星期一以防萬一),但考慮到你給錯了「路徑」,跳了幾個「子元素「在你的XPath表達式中。 讓我知道。

+0

如果我正確地得到它,你已經添加了未命名的元素到xpath,對嗎?我已經嘗試過,現在就像你所建議的那樣,但問題是一樣的......太多的目標節點。如果我在那裏放置了最內層'item'的完整路徑,我仍然會得到'非法類繼承循環'。我也嘗試過使用單斜槓Xpath併爲所有出現的「item」創建綁定條目,但它也沒有幫助。我不確定我可以透露XSD,但是無論如何,完整的模式大約有3MB大小,而我有其他綁定文件可以解決其他問題... – NeplatnyUdaj 2015-03-13 17:38:16