Как мне указать хост и порт при доступе к веб-сервису из сгенерированного JAX-WS кода?

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

  •  19-08-2019
  •  | 
  •  

Вопрос

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

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

Спасибо!

Это было полезно?

Решение

Конструктор должен нормально работать для ваших нужд, когда вы создаете MyService, передайте ему URL нужного вам WSDL, т.е. http://someurl:someport/service?wsdl.

Другие советы

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

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

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

В вашем сгенерированном коде (например:скажите "HelloWorldWebServiceImplService" ) посмотрите на статический блок вверху, который будет содержать ссылку на URL-адрес WSDL или файл 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;
}
*/

Как только вы прокомментируете это, вам также нужно закомментировать конструктор по умолчанию и, само собой разумеется, инициализировать статическое значение 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-адрес веб-сервиса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top