2012-10-15 60 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。