2016-04-07 12 views
0

Ich habe einen Web-Service-Client geschrieben mit Apache CXF, der den simple frontend-Stil verwendet. Es kann eine Methode auf einem Remote-Web-Service aufgrund seines Standorts und der vom Dienst implementierten Schnittstelle dynamisch aufrufen.Migrieren eines CXF-Clients, der "einfaches Frontend" verwendet, an JAX-WS

Ich möchte diesen Code zu einer reinen JAX-WS-Implementierung migrieren. Mein Code sollte ungefähr so ​​aussehen:

public static void callWsMethod(Class<?> serviceInterface, String address, String methodName,...) { 
    URL wsdlLocation = new URL(address + "?wsdl"); 
    QName serviceName = new QName(.... , ....); //??? what goes here 
    Service service = Service.create(wsdlLocation, serviceName); 
    Object instance = service.getPort(serviceInterface); 
    ... /*invoke method "methodName" on instance */ 

Ich vermute, dass dies möglich ist, weil die CXF doc oben zitierten sagt:

In einem ‚einfachen‘ Fall sehr nahezu identische Dinge passieren im Simple Front Ende wie in JAX-WS.

Mein erstes Problem ist die QName Konstruktor:

QName(java.lang.String namespaceURI, java.lang.String localPart) 

wie funktioniert CXF das Recht namespaceURI herauszufinden und localPart die ws aufzurufen?

+0

Haben Sie das überprüft? - http://stackoverflow.com/questions/13583918/how-to-access-web-service-using-an-ordinary-java-class – Sampada

Antwort

0

Haben Sie eine WSDL?

namespaceUri = /wsdl:definitions/@targetNamespace 
localPort = /wsdl:definitions/wsdl:service/@name 

Wenn Sie eine WSDL haben. Warum generieren Sie nicht einfach die SEI-Klassen mit wsimport? Sie sehen, dass das erzeugte automatisch den richtigen QName enthält.