«Исключение javax.xml.ws.WebServiceException: неподдерживаемый адрес конечной точки» при попытке вызвать веб-службу с использованием JAX-WS 2.1 - PullRequest
4 голосов
/ 21 декабря 2011

Я пытаюсь вызвать веб-сервис здесь: http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL

Я сгенерировал прокси-классы, используя wsimport с JDK1.6.0_29. Моя командная строка wsimport:

wsimport.exe" -keep -B-XautoNameResolution -d E:\mapov\mapov-dev\shared\hotel_info\ http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc?WSDL

Я использую следующий код для попытки вызова службы:

QName qName = new QName("http://webservices.hotel.de/V2_8", "FreeHotelSearchWebService");
FreeHotelSearchWebService service = new FreeHotelSearchWebService(new URL("http://publicbetawebservices.hotel.de/V2_8/FreeHotelSearchWebService.svc"), qName);
IFreeHotelSearchWebService sws = service.getBasicHttpBindingIFreeHotelSearchWebService();
String version = sws.getWebservicesVersion();
System.out.println("Hotel.info web service version: " + version);

Однако я получаю следующее исключение:

Исключение в потоке "main" javax.xml.ws.WebServiceException: Неподдерживаемый адрес конечной точки: в com.sun.xml.ws.api.pipe.TransportTubeFactory.create (TransportTubeFactory.java:148) в com.sun.xml.ws.transport.DeferredTransportPipe.processRequest (DeferredTransportPipe.java:134) на com.sun.xml.ws.api.pipe.Fiber .__ doRun (Fiber.java:641) на com.sun.xml.ws.api.pipe.Fiber._doRun (Fiber.java:600) в com.sun.xml.ws.api.pipe.Fiber.doRun (Fiber.java:585) в com.sun.xml.ws.api.pipe.Fiber.runSync (Fiber.java:482) в com.sun.xml.ws.client.Stub.process (Stub.java:323) в com.sun.xml.ws.client.sei.SEIStub.doProcess (SEIStub.java:161) в com.sun.xml.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:113) в com.sun.xml.ws.client.sei.SyncMethodHandler.invoke (SyncMethodHandler.java:93) в com.sun.xml.ws.client.sei.SEIStub.invoke (SEIStub.java:144) в $ Proxy42.getWebservicesVersion (неизвестный источник)

В большинстве примеров я видел, что сгенерированный код включает метод getPort (), но он не был сгенерирован для этого класса. Мой код неверен или мне нужно запустить wsimport по-другому? Я также пытался вызвать конструктор FreeHotelWebService без параметров, что приводит к тому же исключению.

1 Ответ

1 голос
/ 20 сентября 2018

Реанимация вопроса без ответа на основе блога Джастина и Tug's :

JAX-WS: Как настроить конечную точку службы во время выполнения?

При развертывании клиента веб-службы вам часто требуется изменить конечную точку службы, которая была установлена ​​во время генерации кода. В этом коротком посте объясняется, как вы можете изменить его во время выполнения в клиентском коде.

У вас есть два подхода для этого:

  • установить конечную точку в порту с помощью BindingProvider;
  • получить URL-адрес конечной точки от самого WSDL во время выполнения;

Используйте Binding Provider для установки URL-адреса конечной точки

Первый подход заключается в изменении значения свойства BindingProvider.ENDPOINT_ADDRESS_PROPERTY для BindingProvider (Port) с использованием следующего кода:

    try { 
        EmployeeServiceService service = new EmployeeServiceService();

        EmployeeService port = service.getEmployeeServicePort();

        BindingProvider bp = (BindingProvider)port;

        bp.getRequestContext().put(
          BindingProvider.ENDPOINT_ADDRESS_PROPERTY,  
 "http://server1.grallandco.com:8282/HumanRessources/EmployeeServiceService");

        Employee emp = port.getEmployee(123);

        System.out.println("Result = "+ emp);
    } catch (Exception ex) {...

Используйте WSDL для получения URL-адреса конечной точки

Другая часть заключается в установке WSDL при создании Службы. Служба будет использовать значение, которое находится в порту WSDL -SOAP Endpoint-. Это просто сделать, используя следующий код:

    try { 
       EmployeeServiceService service =
         new org.demo.service.EmployeeServiceService(
           new URL(       
             "http://server1.grallandco.com:8282/HumanRessources/" + 
             "EmployeeServiceService?wsdl"), 
           new QName(
             "http://service.demo.org/",
             "EmployeeServiceService"));

        EmployeeService port = service.getEmployeeServicePort();

        Employee emp = port.getEmployee(123);

     System.out.println(
       "Result = "+ emp);
    } catch (Exception ex) {

Обратите внимание, что в Glassfish, как и во многих средах веб-служб, WSDL может динамически генерировать URL-адрес конечной точки на основе URL-адреса, используемого для получения WSDL. При таком подходе вы также можете динамически изменять конечную точку Soap (если она совместима с сетевой конфигурацией производственной среды).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...