如果wsdl中不存在端点,则处理故障字符串消息

时间:2014-08-21 14:38:20

标签: apache cxf

尝试从SOAPUI调用服务时,我收到以下异常 因为消息部分元素不会在wsdl中退出。 但我希望在CXF Web服务中以正确的方式处理并发送正确的错误字符串而不是下面的消息:“错误的请求”

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <Action xmlns="http://www.w3.org/2005/08/addressing"/>
      <MessageID xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:109a84f4-373d-4406-9087-82bd58bea394</MessageID>
      <To xmlns="http://www.w3.org/2005/08/addressing">http://www.w3.org/2005/08/addressing/anonymous</To>
      <RelatesTo xmlns="http://www.w3.org/2005/08/addressing">uuid:3dcf9e26-20fc-4c93-bc01-8ca9ab1ae2eb</RelatesTo>
   </soap:Header>
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Message part Reservation was not recognized.  (Does it exist in service WSDL?)</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

有没有人知道我能以正确方式处理的cxf?

1 个答案:

答案 0 :(得分:0)

您可以通过从客户端应用程序中使用Web服务来解决此问题。你需要使用WS的所有地方都应该将BindingProvider放到端口上。这个例子是一种方法:

...
import javax.xml.ws.BindingProvider;

public class WSClient {

        public String getUserName(int userCode) {

            WebServiceAuth ss = new WebServiceAuth();
            IWebServiceAuth port = ss.getPort(IWebServiceAuth.class);

            BindingProvider bindingProvider = (BindingProvider) port;
            bindingProvider
                    .getRequestContext()
                    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                            "http://localhost:8081/WebServiceAuth/WSAuth");

            return port.getUserName(userCode);
        }
}

在这种情况下,您需要将服务的地址放入BindingProvider。