我已经使用 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(MethodMarshallerUtils.java:1310) 在 org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1310)在 org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalFaultResponse(DocLitBareMethodMarshaller.java:412) 在 org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:529) 在 org .apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:470) 在 org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler。
最令人惊讶的是,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 问题,但它可能是这样,我看不出定义中有明显缺失的东西。
注意:出于保密原因,服务名称和命名空间已更改,因此不要寻找命名空间不匹配的情况:)