我正在尝试使用 JBossWS 3.1.2 开发一个 Web 服务,该服务将 HashMap 作为其参数之一。我正在使用这个版本的 JBossWS,因为它是随我正在使用的 JBoss 版本一起分发的。我使用 wsprovide 生成 WSDL,并使用 wsconsume 创建 WS 客户端存根。
我的 WebService 的简化版本是:
@WebService(targetNamespace = "http://localhost/ping", serviceName = "Ping")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class Ping {
@WebMethod
@WebResult(name="result")
public String ping(@WebParam(name="arguments") HashMap arguments) {
return "pong";
}
}
wsprovide 创建的 WSDL 包含:
<types>
<xs:schema targetNamespace='http://localhost/ping' version='1.0' xmlns:tns='http://localhost/ping' xmlns:xs='http://www.w3.org/2001/XMLSchema'>
<xs:complexType name='hashMap'>
<xs:complexContent>
<xs:extension base='tns:abstractMap'>
<xs:sequence/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType abstract='true' name='abstractMap'>
<xs:sequence/>
</xs:complexType>
</xs:schema>
</types>
生成的客户端代码包含一个空抽象类 AbstractMap.java 和一个空类 HashMap。
我希望生成类似于以下内容的 WSDL:
<complexType>
<sequence>
<element name="key" type="anyType" />
<element name="value" type="anyType" />
</sequence>
</complexType>
我还尝试使用自定义类(ParameterMap)包装 HashMap,但只是得到了更多相同的结果。
还有我没有看到的下一步吗?我是否遗漏了什么,或者这是使用 JBossWS 开发 Web 服务的自下而上方法的限制?
答案在另一个帖子里如何将数组作为值传递到 PHP Soapclient 请求中? https://stackoverflow.com/questions/2337901/how-can-i-pass-in-an-array-as-a-value-into-a-php-soapclient-request
我从来没有想过要研究 JAX-WS 解决方案的 PHP 问题......
HashMap 需要包装在另一个名为 HashMapWrapper.java(或其他)的 Java 类中。
public class HashMapWrapper {
public HashMap<String, Object> parameters;
}
需要修改 ping 方法调用以使用包装类而不是 HashMap:
public String ping(@WebParam(name="arguments") HashMapWrapper arguments) {
这会生成适当的 WSDL,进而生成有用的 Java 存根。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)