【问题标题】:Interoperability of JAX-WS hashmap and .NET dictionaryJAX-WS hashmap 和 .NET 字典的互操作性
【发布时间】:2014-03-28 20:05:31
【问题描述】:

我在 Wildfly 8.0 上创建一个 JAX-WS 网络服务并在 VS2013 C# 项目中使用它,但我不知道如何将 HashMap 映射到 .net 字典。

我的问题是,有没有办法创建一个与 .net 字典兼容的 JAX-WS Web 服务,并通过“添加服务引用”自动转换?

“添加服务参考”高级设置:

测试网络服务:

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class Test
{    
    @WebMethod
    public HashMap<String, Pojo> echoMap(String input)
    {
        return new HashMap<String, Pojo>();
    }
}

生成的 WSDL:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.aiko.com/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="TestService" targetNamespace="http://ws.aiko.com/">
  <wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ws.aiko.com/" targetNamespace="http://ws.aiko.com/" version="1.0">

  <xs:element name="facility" type="tns:pojo"/>

  <xs:complexType name="pojo">
    <xs:sequence>
      <xs:element minOccurs="0" name="Name" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>
  </wsdl:types>
  <wsdl:message name="echoMapResponse">
    <wsdl:part name="return">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="echoMap">
    <wsdl:part name="arg0" type="xsd:string">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="Test">
    <wsdl:operation name="echoMap">
      <wsdl:input message="tns:echoMap" name="echoMap">
    </wsdl:input>
      <wsdl:output message="tns:echoMapResponse" name="echoMapResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="TestServiceSoapBinding" type="tns:Test">
    <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="echoMap">
      <soap12:operation soapAction="" style="rpc"/>
      <wsdl:input name="echoMap">
        <soap12:body namespace="http://ws.aiko.com/" use="literal"/>
      </wsdl:input>
      <wsdl:output name="echoMapResponse">
        <soap12:body namespace="http://ws.aiko.com/" use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="TestService">
    <wsdl:port binding="tns:TestServiceSoapBinding" name="TestPort">
      <soap12:address location="http://localhost:8080/app/Test"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

【问题讨论】:

    标签: java .net web-services soap jax-ws


    【解决方案1】:

    我不认为HashMap 是可互操作的;它也不是 JAXB 已知的 Java xml 类型(将 SOAP XML 转换为 java 实例的框架,这可能是它没有在 WSDL 中描述的原因。

    您可以使用 this post 中的提示提供一个适配器 Java 类,该类告诉 JAXB 运行时如何将您的 HashMap 转换为 xml 结构。

    但是,我怀疑这是否会被 .Net 客户端以 Dictionary 的形式使用。您可以尝试从您的 Java 适配器生成this article 中描述的 xml 结构,希望它会被解释为字典。

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多