2012-10-18 51 views
0

我們正在使用第三方wsdl文件,我們使用axis2生成java文件。現在我們遇到了一個問題,即不同文件中存在重複的元素,但具有相同的名稱空間。是否可以使用Axis2/XmlBeans管理重複的元素名稱

例子:

file1.wsdl => <xsd:element name="MyElementName"> 
file2.wsdl => <xsd:element name="MyElementName"> 

所以,結果是相同的文件從不同的WSDL文件,所以只有最後一個文件生成的實際文件生成後存在產生兩次。

我想知道這是否是正確的,或者它是否是wsdl文件的設計缺陷? 如果不是,我怎樣才能解決這個問題,使用axis2?

編輯

好了,我發現我可以用不同的封裝爲類,所以我現在已經

com.package.MyElementName 
com.package.ext.MyElementName 

但是,它仍然不起作用,因爲軸(或XMLBeans的)給一個標誌我錯了上課。

看看這個例子。我以爲這會工作,但這一翻譯我得到一個ClassCastException

java.lang.ClassCastException:com.package.MyElementName.impl.MyElementNameDocumentImpl不能轉換到com.package.ext.MyElementNameDocument

com.mypackage.ext.MyElementNameDocument doc1 = 
    com.mypackage.ext.MyElementNameDocument.Factory.newInstance(); 
doc1.addNewMyElementName(); 

com.mypackage.ext.MyElementNameDocument doc2 = 
    com.mypackage.ext.MyElementNameDocument.Factory.parse(doc1.toString()); 

編輯 -

好的,我在網上找到了真實的例子,所以我不妨展示真實的例子。

http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/

其中許多人有這兩個

http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/GetServiceProcessingAdvisory.wsdl http://dtd.cobaltgroup.com/STAR/5.2.4/WSDL/Templates/GetStandardCodes.wsdl

由於你可以看到,他們都有元素ProcessMessage。希望這可以澄清一些事情。

</xsd:complexType> 
    <!--Global Elements used by the Bindings--><xsd:element name="ProcessMessage"> 
     <xsd:annotation> 
      <xsd:documentation source="http://www.starstandard.org"> 
       Process Message Input 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="payload" 
type="starws:GetServiceProcessingAdvisoryPayload" minOccurs="0" 
          maxOccurs="1" 
          form="qualified"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 


<!--Global Elements used by the Bindings--><xsd:element name="ProcessMessage"> 
     <xsd:annotation> 
      <xsd:documentation source="http://www.starstandard.org"> 
       Process Message Input 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="payload" type="starws:GetStandardCodesPayload" 
    minOccurs="0" 
          maxOccurs="1" 
          form="qualified"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 

....

祺/約翰

回答

2

至少是非常糟糕的WSDL設計由供應商(特別是對於一個,其中包含在其公司名稱單詞「標準」):全球型/元素定義應進行一次,即放入一個單獨的全局XSD文件(像他們一樣在這裏:

<xsd:include schemaLocation="STARWSDLDataTypes.xsd"/> 

)。

此外,服務名稱空間應該保持服務特定,以便給出服務版本的靈活性。我擔心這個實際的星座(重複的元素聲明在相同的名稱空間+ wsdls中)是一個灰色地帶的話題 - 我沒有在網絡上發現任何明確的聲明,所以你唯一的解決方案可能是針對wsdl-文件完全分開。含義axis2-wise 2個應用程序(每個wsdl 1個),而不是一個共享的應用程序。

+0

非常感謝您的回答。我目前的做法是隔離每個wsdl,但我真的不喜歡它。我正在建立一個客戶端,我不希望每個「wsdl」都是獨立的jvm,它非常適合我們。我可能能夠使用不同的類加載器,但它仍然很糟糕... 無論如何,我會嘗試與一些「標準」人員取得聯繫,並就此向他們提供一些反饋。 – jrask

相關問題