【问题标题】:How to have a HashMap as @WebParam with JBossWS 3.1.2如何使用 JBossWS 3.1.2 将 HashMap 作为 @WebParam
【发布时间】:2011-06-06 23:12:45
【问题描述】:

我正在尝试使用 JBossWS 3.1.2 开发一个以 HashMap 作为其参数之一的 Web 服务。我正在使用这个版本的 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 服务的自下而上方法的限制?

【问题讨论】:

    标签: java jboss jax-ws jbossws


    【解决方案1】:

    答案在另一个帖子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 存根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2017-01-16
      • 2011-02-16
      相关资源
      最近更新 更多