1

我在java中使用NetBeans编写了一个简单的web服务,一个函数接受一个字符串数组。然后我用delphi写了一个web服务客户端并调用函数,服务器总是收到一个空数组。

当我使用soapUI 测试web 服务时,它运行正常。

我检查了delphi客户端发送的xml内容并与soapUI进行了比较。这是由delphi客户端发送的:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
    <helloList xmlns="http://hw.xzq.com/">
      <helloList>line 1</helloList>
    </helloList>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这是由 soapUI 发送的:

<soapenv:Envelope
   xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:hw="http://hw.xzq.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <hw:helloList>
         <!--Zero or more repetitions:-->
         <helloList>?</helloList>
      </hw:helloList>
   </soapenv:Body>
</soapenv:Envelope>

我将delphi客户端的xml内容复制到soapUI,服务器现在收到空数组。

我通过更改以下三行来修改 xml 内容:

    <hw:helloList xmlns:hw="http://hw.xzq.com/">
      <helloList>line 1</helloList>
    </hw:helloList>

在此之后,服务器收到了我的字符串数组。

所以,我认为问题是delphi客户端发送没有前缀命名空间的数组内容。但是如何纠正呢?谢谢你的帮助!

顺便说一句,注释 InvRegistry.RegisterInvokeOptions(TypeInfo(HelloWorld), ioDocument); 没有帮助。

4

2 回答 2

0

我可以用 NetBeans 7.2 / JAX-WS 和 Delphi 2009 验证问题:

也许较新的 Delphi 版本可以处理这个问题(Delphi XE3 也许任何人)

我的Java代码:

@WebMethod(operationName = "example")
public void testArray(@WebParam(name = "arr") String[] arr) {

    System.out.println("in web method");

    System.out.println("Array has " + arr.length + " entries");

    for (String s : arr) {
        System.out.println(s);
    }
}

另请参阅:使用 Web 服务的 Delphi 和 Java 集成

于 2012-09-07T12:30:25.813 回答
0

我使用带有 Metro 2.0(.NET 3.5/Metro 1.3 兼容)的 NetBeans 7.2 编写 Web 服务,客户端由安装了 Delphi SOAP Runtime 和 Importer Update (24535) 的 delphi 7 编写。

我认为问题是 delphi 客户端生成的 xml 与 Web 服务不兼容。

我想这可能会有所帮助,但我不知道如何在 java 中做同样的事情。

In the Server, to go to the SOAP web module, select the HTTPSoapPascalInvoker
component, and open up the Options property in the Object Inspector. Make sure
the option "soRootRefNodesToBody" is checked.

另一方面,我想对 Web 服务使用“RFC”类型可能会有所帮助,但 RFC 类型需要 JAXB 并且不支持 java.util.List。

那么,另一种方法可以纠正这个问题吗?

于 2012-09-08T04:43:45.320 回答