【发布时间】:2011-09-14 12:18:20
【问题描述】:
我正在尝试为 web 服务实现一个简单的客户端,我面临的 web 服务的唯一问题是,它有一个通用端点:http://myserver3333.com:8080/ws/services 并且您查找部署的 web 服务的方式是通过 SOAP 标头。
因此,例如,如果您尝试通过 SOAP UI 访问服务,
- 我指定的端点是:
http://myserver3333.com:8080/ws/services - 在 SOAP 标头中,我指定了以下内容:
服务名称 = MyAwesomeService
操作名称 = makeMeMoreAwesome
那么,我怎样才能使用 apache cxf 客户端做同样的事情呢?
我当前的代码:
URL wsdlLocation = new URL("http://myserver3333.com:8080/ws/service");
MyAwesomeService service = new MyAwesomeService(wsdlLocation);
MyAwesomeServicePort port = service.getMyAwesomeServiceSOAPPort();
List<Header> headers = new ArrayList<Header>();
Header operationNameHeader = new Header(new QName("OPERATION-NAME"), "makeMeMoreAwesome",
new JAXBDataBinding(String.class));
Header serviceNameHeader = new Header(new QName("SERVICE-NAME"), "MyAwesomeService",
new JAXBDataBinding(String.class));
headers.add(operationNameHeader);
headers.add(serviceNameHeader);
BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getRequestContext().put(Header.HEADER_LIST, headers);
MakeMeMoreAwesomeRequest request = new MakeMeMoreAwesomeRequest();
MakeMeMoreAwesomeResponse response = port.makeMeMoreAwesome(request);
System.out.println(response.getAck());
但是当我运行它时,我得到了这个错误:
Exception in thread "main" com.sun.xml.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException.
java.io.IOException: Server returned HTTP response code: 500 for URL: http://myserver3333.com:8080/ws/services
java.io.IOException: Server returned HTTP response code: 500 for URL: http://myserver3333.com:8080/ws/services?wsdl
这是正确的,因为那个位置没有WSDL,它需要跟随soap头来获取服务。
更新:
在@Daniel Kulp 的两点之后,我在这里:
- 我添加了一个新行:
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://myserver3333.com:8080/ws/services");
现在我得到了这个错误:
org.apache.cxf.binding.soap.SoapFault: "http://www.myserver.com/ws/services", the namespace on the "errorMessage" element, is not a valid SOAP version.
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.readVersion(ReadHeadersInterceptor.java:115)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:141)
at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:60)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:771)
我的假设是,这个错误和this 一样。但我没有使用 ?wsdl。那么,有什么建议吗?
【问题讨论】:
标签: java web-services soap cxf