Problème avec le passage des en-têtes SOAP à l'aide d'Apache CXF client

Je suis en train de mettre en œuvre un simple client pour un service web, le seul problème auquel je suis confronté avec le webservice est, il a un générique de point de terminaison: http://myserver3333.com:8080/ws/services et la façon dont vous la recherche des services web est déployé via l'en-tête SOAP.

Ainsi, par exemple, si vous essayez de frapper le service vis SOAP UI,

  1. le point de terminaison je précise est: http://myserver3333.com:8080/ws/services
  2. Dans les en-têtes SOAP j'spécifiques suivants:

    SERVICE-NAME = MyAwesomeService

    OPÉRATION-NOM = makeMeMoreAwesome

Alors, comment puis-je faire la même chose à l'aide d'apache cxf client?

Mon code actuel:

    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());

Mais lorsque je l'exécute, j'ai cette erreur:

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

Qui est correct, car il n'existe pas de fichier WSDL à cet endroit, il faut suivre l'en-tête soap pour obtenir le service.

Mise à jour:

Après deux points de @Daniel Kulp je suis ici:

  1. J'ai ajouté une nouvelle ligne: bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://myserver3333.com:8080/ws/services");

Et maintenant j'ai cette erreur:

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)

Mon hypothèse est que cette erreur est la même que cette un. Mais je ne suis pas à l'aide ?wsdl. Ainsi, des suggestions?

InformationsquelleAutor zengr | 2011-09-14