Как изменить конечную точку URL-адреса webservice?
Я создал клиента веб-сервиса, используя утилиты JBoss (совместимость с JAX-WS)
используя клиент веб-службы Eclipse из wsdl '.
Итак, единственное, что я предоставил, - это URL-адрес WSDL веб-сервиса.
Теперь поставщик веб-службы сообщает мне изменить "URL-адрес доступа к конечным точкам клиента" веб-службы.
Что это такое и как его изменить?
Ответы
Ответ 1
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]));
...
Ответ 2
Чтобы добавить некоторые пояснения, когда вы создаете свой сервис, класс сервиса использует стандартное wsdlLocation, которое было вставлено в него, когда класс был построен из wsdl. Поэтому, если у вас есть класс обслуживания с именем SomeService, и вы создаете экземпляр, подобный следующему:
SomeService someService = new SomeService();
Если вы заглянете внутрь SomeService, вы увидите, что конструктор выглядит следующим образом:
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
Итак, если вы хотите, чтобы он указывал на другой URL, вы просто используете конструктор, который принимает аргумент URL (есть также 6 конструкторов для установки qname и функций). Например, если вы настроили локальный монитор TCP/IP, который прослушивает порт 9999, и вы хотите перенаправить на этот URL-адрес:
URL newWsdlLocation = new URL("http://theServerName:9999/somePath");
SomeService someService = new SomeService(newWsdlLocation);
и это вызовет этот конструктор внутри службы:
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
Ответ 3
Я не пошел бы так далеко, как @Femi, чтобы изменить существующее свойство адреса. Вы можете легко добавлять новые сервисы в раздел определений.
<wsdl:service name="serviceMethodName_2">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://new_end_point_adress"/>
</wsdl:port>
</wsdl:service>
Это не требует перекомпиляции WSDL для Java, и создание обновлений не сложнее, чем если бы вы использовали опцию BindingProvider (которая, кстати, у меня не работала).
Ответ 4
Чтобы изменить свойство конечного адреса, отредактируйте файл 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>