gpt4 book ai didi

java - 使用 Apache CXF 客户端传递 SOAP header 时出现问题

转载 作者:行者123 更新时间:2023-11-30 11:51:29 25 4
gpt4 key购买 nike

我正在尝试为网络服务实现一个简单的客户端,我面临的唯一问题是,它有一个通用端点:http://myserver3333.com:8080/ws/services 并且您查找部署的 Web 服务的方式是通过 SOAP header 。

因此,例如,如果您尝试访问 vis SOAP UI 服务,

  1. 我指定的端点是:http://myserver3333.com:8080/ws/services
  2. 在 SOAP header 中,我指定了以下内容:
    SERVICE-NAME = MyAwesomeService
    OPERATION-NAME = 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 header 才能获得服务。

更新:

在@Daniel Kulp 的两点之后,我在这里:

  1. 我添加了一个新行: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。那么,有什么建议吗?

最佳答案

2 条评论:

1) 您没有选择 CXF。检查类路径以确保存在 CXF 而不是 Sun/Oracle 实现。 com.sun.xml.ws.wsdl.parser.InaccessibleWSDLException 表明您正在选择 Sun 实现。

2) 传递给 MyAwesomeService(wsdlLocation) 的 URL 必须是 WSDL 的 URL,而不是端点本身。

关于java - 使用 Apache CXF 客户端传递 SOAP header 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com