在从.NET接口生成wsdl时,如何将asp.net / asmx配置为不使用soap编码?简而言之,.NET SOAP Web服务正在生成包含soap编码的wsdl。例如:
<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="StringArray">
<s:complexContent mixed="false">
<s:restriction base="soapenc:Array">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string" />
</s:sequence>
</s:restriction>
</s:complexContent>
</s:complexType>
</s:schema>
由于soapenc:Array位,这无法在CXF中解析wsdl2java,这是一个JAX-WS实现。修复方法是将上面的xml更改为:
<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
<s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<s:complexType name="StringArray">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="String" type="s:string" />
</s:sequence>
</s:complexType>
</s:schema>
答案 0 :(得分:2)
这是一个问题,其中6个为另一个,12/2为另一个问题 - wsdl2java没有像Microsoft的WSDL实现认为的那样正确支持任何复杂类型。
关于这是Java还是MS的错误的讨论有点无意义。
不幸的是,很少有SOAP的实现可以处理除基本类型之外的任何内容,因此虽然Microsoft Web Services看起来非常适合表面上的可互操作性,但它们实际上只能与Microsoft的代理一起使用。
对于您的解决方法,您有几个选择:
坚持原始.Net类型 - 基本上是值类型+字符串。没有数组,列表或任何具有复杂序列化的内容。
编写自己的HttpHandler
以Java可以处理的格式返回Xml - 在处理Flex / ActionScript(具有相同问题)时,我实际上做过类似的事情。
使用不同的格式 - 恕我直言,大部分网络正在从SOAP转向REST风格的服务。
其中(1)是最简单的,也是最笨重的。您最终会遇到像WDSL描述的SOAP方法那样返回字符串的黑客,但该字符串实际上是消费Java可以解析的编码XML。育。
在跨平台工作时,你总能得到这样的有趣东西: - (