Wie gebe ich Host und Port, wenn eine Web-Service von JAX-WS-generierten Code zugreifen?

StackOverflow https://stackoverflow.com/questions/649019

  •  19-08-2019
  •  | 
  •  

Frage

Ich habe eine WSDL-Datei für einen Web-Service. Ich bin mit JAX-WS / wsimport eine Client-Schnittstelle zum Web-Service zu generieren. Ich weiß nicht, vor der Zeit der Host, der die Web-Service auf ausgeführt werden soll, und ich kann es fast garantieren, werden nicht http : // localhost: 8080 . Wie ich die Host-URL zur Laufzeit angeben, zum Beispiel von einer Befehlszeilenargument?

Der erzeugte Konstruktor MyService(URL wsdlLocation, QName serviceName) scheint nicht wie das, was ich will, aber vielleicht ist es? Vielleicht ist einer der Varianten von Service.getPort(...)?

Danke!

War es hilfreich?

Lösung

Der Konstruktor sollte für Ihre Bedürfnisse gut funktionieren, wenn Sie MyService erstellen, geben sie die URL der WSDL Sie wollen also : // someurl:. someport / service wsdl

Andere Tipps

Wenn Sie einen Blick in die erzeugte Quelle in der Nähe der erzeugten Konstruktor haben, sollten Sie in der Lage sein, herauszufinden, was aus dem Standardkonstruktor in sie zu setzen, sollte wie aussehen:

public OrdersService() {
    super(WSDL_LOCATION, new QName("http://namespace.org/order/v1", "OrdersService"));
}

Sie sollten die def von WSDL_LOCATION in dem statischen Feld weiter oben in der Klasse finden können.

In Ihrem generierten Code (zB: sagen „HelloWorldWebServiceImplService“). Blick in dem statischen Block auf der Oberseite, den Bezug auf die WSDL-URL oder WSDL-Datei, die META-INF ist unter hat

 /*
static {
    URL url = null;
    try {
        url = new URL("http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(HelloWorldWebServiceImplService.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "http://loclahost/HelloWorld/HelloWorldWebServiceImpl?wsdl");
    }
    WSDL_LOCATION = url;
}
*/

Wenn Sie diesen Kommentar Sie auch den Standard construtor und unnötig zu sagen intialize die statischen WSDL_LOCATION = null Kommentar aufnehmen müssen; (Auf null) Sie werden also nicht zwei Konstrukteure haben, wie unten gezeigt.

public final static URL WSDL_LOCATION = null;
public HelloWorldWebServiceImplService(URL wsdlLocation) {
    super(wsdlLocation, SERVICE);
}

public HelloWorldWebServiceImplService(URL wsdlLocation, QName serviceName) {
    super(wsdlLocation, serviceName);
}

Beim Webservice: Jetzt in dem Client-Aufruf, wo Sie dieses Objekt der Webservice URL als Argument übergeben instanziiert wie dargestellt

   //You can read mywebserviceURL from property file as String.
    String mywebserviceURL = "http://myqamachine.com/HelloWorld/HelloWorldWebServiceImpl?wsdl"
    URL WsURL = new URL(mywebserviceURL);
    HelloWorldWebServiceImplService webService = new HelloWorldWebServiceImplService(WsURL);

So, hier können Sie die Webservice-URL dynamisch zeigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top