Как указать хост и порт при доступе к веб-службе из кода, сгенерированного JAX-WS? - PullRequest
2 голосов
/ 16 марта 2009

У меня есть файл WSDL для веб-службы. Я использую JAX-WS / wsimport для генерации клиентского интерфейса с веб-сервисом. Я не знаю заранее хоста, на котором будет работать веб-сервис, и я почти гарантирую, что он не будет http://localhost:8080. Как указать URL хоста во время выполнения, например, из аргумента командной строки?

Сгенерированный конструктор MyService(URL wsdlLocation, QName serviceName) не похож на то, что я хочу, но, возможно, так оно и есть? Возможно один из вариантов Service.getPort(...)?

Спасибо!

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Если вы посмотрите в сгенерированном источнике близко к сгенерированному конструктору, вы должны быть в состоянии выяснить, что вставить в него из конструктора по умолчанию, должен выглядеть примерно так:

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

Вы сможете найти определение WSDL_LOCATION в статическом поле еще выше в классе.

1 голос
/ 29 января 2014

В вашем сгенерированном коде (например, скажем, «HelloWorldWebServiceImplService») посмотрите на статический блок вверху, который будет иметь ссылку на файл WSDL url или wsdl, который находится в META-INF.

 /*
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;
}
*/

После того, как вы прокомментируете это, вам также нужно закомментировать застройщика по умолчанию, и не нужно говорить, что инициализируйте static WSDL_LOCATION = null; (к нулю) Таким образом, у вас не будет двух конструкторов, как показано ниже.

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

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

Вызов веб-сервиса: Теперь в клиентском вызове, где вы создаете экземпляр этого объекта, передайте URL-адрес веб-сервиса в качестве аргумента, как показано

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

Так что здесь вы можете динамически указывать URL веб-службы.

1 голос
/ 16 марта 2009

Конструктор должен нормально работать в соответствии с вашими потребностями, когда вы создаете MyService, передайте ему URL WSDL, который вы хотите, т.е.

...