Как изменить конечную точку url-адреса webservice?


Я создал клиент веб-службы с помощью JBoss utils (совместимый с JAX-WS) использование клиента веб-службы Eclipse из wsdl.

Итак, единственное, что я предоставил, это url-адрес веб-сервиса WSDL.

теперь поставщик веб-службы говорит мне изменить "url доступа к приложению конечной точки клиента" веб-службы.

Что это такое и как его менять?

3 82

3 ответа:

IMO, поставщик говорит вам изменить конечную точку службы (т. е. где добраться до веб-службы), а не конечную точку клиента (я не понимаю, что это может быть). Чтобы изменить конечную точку службы, у вас в основном есть два варианта.

использовать привязку провайдера, чтобы установить конечную точку URL-адреса

первый вариант-изменить BindingProvider.ENDPOINT_ADDRESS_PROPERTY значение свойства BindingProvider (каждый посредник реализует javax.xml.ws.BindingProvider интерфейс):

...
EchoService service = new EchoService();
Echo port = service.getEchoPort();

/* Set NEW Endpoint Location */
String endpointURL = "http://NEW_ENDPOINT_URL";
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);

System.out.println("Server said: " + echo.echo(args[0]));
...

недостаток в том, что это работает только тогда, когда исходный WSDL все еще доступен. Не рекомендуемый.

использующих WSDL, чтобы получить URL-адрес конечной точки

второй вариант-получить URL конечной точки из WSDL.

...
URL newEndpoint = new URL("NEW_ENDPOINT_URL");
QName qname = new QName("http://ws.mycompany.tld","EchoService"); 

EchoService service = new EchoService(newEndpoint, qname);
Echo port = service.getEchoPort();

System.out.println("Server said: " + echo.echo(args[0]));
...

чтобы добавить некоторые пояснения здесь, при создании сервиса класс сервиса использует значение по умолчанию 'wsdlLocation', которое было вставлено в него, когда класс был построен из wsdl. Поэтому, если у вас есть класс обслуживания SomeService, и вы создаете экземпляр следующим образом:

SomeService someService = new SomeService();

если вы посмотрите внутрь SomeService, вы увидите, что конструктор выглядит так:

public SomeService() {
        super(__getWsdlLocation(), SOMESERVICE_QNAME);
}

поэтому, если вы хотите, чтобы он указывал на другой URL, вы просто используете конструктор, который принимает аргумент URL (есть 6 конструкторов для установки qname и функций, а также). Например, если вы настроили локальный монитор TCP / IP, который прослушивает порт 9999, и вы хотите перенаправить на этот URL:

URL newWsdlLocation = "http://theServerName:9999/somePath"
SomeService someService = new SomeService(newWsdlLocation);

и это вызовет этот конструктор внутри службы:

public SomeService(URL wsdlLocation) {
    super(wsdlLocation, SOMESERVICE_QNAME);
}

чтобы изменить свойство end address отредактируйте файл wsdl

<wsdl:definitions.......
  <wsdl:service name="serviceMethodName">
    <wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
      <soap:address location="http://service_end_point_adress"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>