2012-10-15 77 views
4

如何在Delphi web服務中製作複雜類型,特別是soapenc:Array,可在與使用它的類型定義相同的名稱空間內使用。目前,如果我嘗試創建從Delphi應用程序生成的WSDL Java中的一個新的Web服務,爪哇提供了以下錯誤:Delphi web服務中的複雜類型

Error resolving component 'soapenc:Array'. It was detected that 'soapenc:Array' is in namespace 'http://schemas.xmlsoap.org/soap/encoding/', but components from this namespace are not referenceable from schema document........... 

如果我分析了WSDL,我所有的方法和類型的使用namepsace「的targetNamespace =」金塔:WebserviceIntf「不過在使用SOAPENC類型:數組定義如下:

<xs:complexType name="ArrayOfClientDetailAcc"> 
<xs:complexContent> 
<xs:restriction base="soapenc:Array"> 
<xs:sequence/> 
<xs:attribute xmlns:n1="http://schemas.xmlsoap.org/wsdl/" ref="soapenc:arrayType" n1:arrayType="ns2:TClientDetailAccArray[]"/> 
</xs:restriction> 
</xs:complexContent> 
</xs:complexType> 

如果它無法改變這一點,我將不勝感激,最好的辦法提醒,以重複在Java中我的德爾福web服務而無需改變所有的接口都會中斷連接到它的客戶端。

您的幫助表示感謝!

我使用Axis作爲每個鏈接建議嘗試,但也給出了一個錯誤:

C:\axis>java org.apache.axis.wsdl.WSDL2Java http://mywebservice?wsdl 
- Unable to find required classes (javax.activation.DataHandler and javax.mail.i 
nternet.MimeMultipart). Attachment support is disabled. 
WSDLException (at /definitions/binding/operation[1]/input): faultCode=INVALID_WS 
DL: Element '{http://schemas.xmlsoap.org/wsdl/}input' contained unexpected attri 
butes: 'message': 
     at com.ibm.wsdl.util.xml.DOMUtils.throwWSDLException(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.parseBindingInput(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.parseBindingOperation(Unknown Source) 

     at com.ibm.wsdl.xml.WSDLReaderImpl.parseBinding(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
     at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source) 
     at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav 
a:516) 
     at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.jav 
a:495) 
     at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361) 
     at java.lang.Thread.run(Unknown Source) 
+1

您正在使用哪種SOAP庫的Java庫? – mjn

+0

我正在使用JAX - 在Netbeans中,使用「WSDL的新Web服務」選項 – JBehrendt

回答

0

對不起 - 根據您的評論(「在NetBeans中,使用‘新建Web服務從WSDL’」 )很明顯,您不想創建Java Web服務客戶端,而是創建Web服務服務器。所以我的答案當然沒有幫助。


參見:Delphi SOAP Server - Document/Literal - Possible?

爲了解決這個問題,一個解決辦法是:

  • 實現與C#(WCF)或Java(JAX-WS)一個新的Web服務的服務器

然後

  • 現有的Delphi應用程序和Web服務

這兩種方式卻會令你的新的服務不兼容老德爾福的客戶。

+0

感謝您的建議,但不幸的是沒有任何可行的選項。我們不想添加額外的複雜層,也不想再使用IIS,這就是爲什麼我們要轉向Java和Glassfish。我們還需要保持它完全向後兼容,所以我們不會中斷任何客戶端(其中一些正在使用Delphi客戶端) – JBehrendt

+0

@JBehrendt對不起 - 基於您的評論(「在Netbeans中,使用」WSDL的新Web服務「」 )很明顯,您不想創建Java Web服務客戶端,而是創建Web服務服務器。所以我的答案當然沒有幫助。 – mjn

0

相同在maven axistools:1.4。這個例外是由舊的wsdl4j < = 1.5.3引發的。升級至少1.6.1或等待更新的netbeans。