[英]Only SOAP12 is configured, but got error “Incoming SOAP message protocol is version 1.1”
我已经使用JAX-WS在WebSphere(7)中配置了WebService。 在上周,所有内容都经过了测试,但是今天,在清理和刷新之后,我得到了一个错误:
由以下原因引起:javax.xml.ws.soap.SOAPFaultException:传入的SOAP消息协议为1.1版,但是为SOAP 1.2配置了端点。 不支持。 在org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(Method)36(org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1310)在org.apache.axis2.jaxws.client.proxy.JAXWSProxyProxy.getFaultResponse(JAX529)上的org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalFaultResponse(DocLitBareMethodMarshaller.java:412)处org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:377)上的.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.java:470 .jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:185)
最令人惊讶的是,从未在此配置SOAP 1.1。 从一开始,仅使用SOAP 1.2。 这是我的WSDL的摘要:
<wsdl:definitions name="ucmdbservice"
targetNamespace="http://service.my/v3"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:tns="http://service.my/v3"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:binding name="binding_soap12_v3" type="tns:v3">
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="getResult">
<soap12:operation
soapAction="http://service.my/v3/getResult" />
<wsdl:input>
<soap12:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="service_v3">
<wsdl:port name="port_soap12_v3" binding="tns:binding_soap12_v3">
<soap12:address location="http://host.my/v3"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
这是Servlet类的标题注释:
@javax.jws.WebService(wsdlLocation = "wsdl/myservice_v3.wsdl",
endpointInterface = "my.service.V3",
targetNamespace = "http://service.my/v3",
serviceName = "myservice_v3",
portName = "port_soap12_v3")
@javax.xml.ws.BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
以及从同一WSDL生成的客户端注释:
@WebServiceClient(name = "myservice_v3",
targetNamespace = "http://service.my/v3",
wsdlLocation = "../../wsdl/myservice_v3.wsdl")
一切都已经工作了。 它已经在IBM RAD 8.0中进行了测试,因此我假设是一些RAD问题,而不是WebSphere问题或JAX-WS问题,但是可能是这样,我没有看到明显的定义缺失。
注意:由于机密性,服务名称和名称空间已更改,因此请不要查找名称空间不匹配的问题:)
这是客户端的问题,尤其是JAX-WS生成的客户端存根构造函数。
我已经通过调用3参数构造函数解决了这个问题:
MyServiceV3 service = new MyServiceV3(
MyService.class.getResource("/wsdl/myservice_v3.wsdl",
new QName("http://service.my/v3"), "myservice_v3");
而不是无参数的构造函数,该构造函数基于该阶段生成的代码的输出:
baseUrl = MyServiceV3 .class.getResource(".");
url = new URL(baseUrl, "../../wsdl/myservice_v3.wsdl");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.