【问题标题】:Complex types in Delphi web serviceDelphi Web 服务中的复杂类型
【发布时间】:2012-10-15 07:20:25
【问题描述】:

如何在 Delphi Web 服务中创建复杂类型,特别是 soapenc:Array,在与使用它的类型定义相同的命名空间中可用。目前,如果我尝试从 Delphi 应用程序生成的 wsdl 在 Java 中创建一个新的 Web 服务,Java 会给出以下错误:

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,我所有的方法和类型都使用命名空间 'targetNamespace="urn:WebserviceIntf"' 但使用 soapenc:Array 的类型定义如下:

<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 中复制我的 Delphi 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)

【问题讨论】:

  • 您使用的是哪个 Java SOAP 库?
  • 我正在使用 JAX - 在 Netbeans 中,使用“来自 WSDL 的新 Web 服务”选项

标签: java web-services delphi soap complextype


【解决方案1】:

抱歉 - 根据您的评论(“在 Netbeans 中,使用“来自 WSDL 的新 Web 服务”),很明显您不想创建 Java Web 服务客户端,而是创建 Web 服务服务器。所以我的回答当然没有帮助。


另请参阅:Delphi SOAP Server - Document/Literal - Possible?

要解决这个问题,一个解决方案是:

  • 使用 C# (WCF) 或 Java (JAX-WS) 实现新的 Web 服务服务器

然后

  • 在现有的 Delphi 应用程序和 Web 服务之间构建一个简单的消息传递层

然而,这两种方式都会使您的新服务与旧的 Delphi 客户端不兼容。

【讨论】:

  • 感谢您的建议,但遗憾的是没有一个可行的选择。我们不想增加额外的复杂性,也不想完全使用 IIS,这就是我们转向 Java 和 Glassfish 的原因。我们还需要保持它完全向后兼容,这样我们就不会破坏任何客户端(其中一些正在使用 Delphi 客户端)
  • @JBehrendt 抱歉 - 根据您的评论(“在 Netbeans 中,使用“来自 WSDL 的新 Web 服务””)很明显,您不想创建 Java Web 服务客户端而是 Web服务服务器。所以我的回答当然没有帮助。
【解决方案2】:

在 maven axistools:1.4 中相同。此异常由旧的 wsdl4j 1.6.1 或等待更新的 netbeans。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多