JAX-WS Загрузка WSDL из банки - PullRequest
       111

JAX-WS Загрузка WSDL из банки

44 голосов
/ 19 апреля 2009

Я пишу толстый клиент, который использует службу SOAP для некоторых функций (сообщения об ошибках и т. Д.)

У меня JAX-WS работает нормально, но по умолчанию (по крайней мере, в NetBeans) он получает WSDL с удаленного сервера каждый раз, когда служба инициализируется. Я ожидаю, что это поможет обеспечить некоторую поддержку версий и т. Д., Но это не то, что я хочу.

Я добавил аргумент wsdllocation в wsimport для указания сгенерированных классов на локальный ресурс. Следующий фрагмент представляет собой загрузку URL-адреса для ресурса WSDL из ApplicationService.java.

baseUrl = net.example.ApplicationService.class.getResource(".");
url = new URL(baseUrl, "service.wsdl");

Я почти уверен, что не должно возникать проблем с указанием ресурса, хранящегося в jar-пакете в пакете net / example / resources, и сам jar создается, как и ожидалось Однако служба не будет загружаться ... в частности, я получаю исключение NullPointerException при вызове ApplicationService.getPort ();

Возможно ли это? или просто погоня за диким гусем?

Ответы [ 13 ]

0 голосов
/ 29 ноября 2018

Не нужно ничего усложнять, просто используйте jar classloader

ClassLoader cl = SomeServiceImplService.class.getClassLoader();
SERVICE_WSDL_LOCATION = cl.getResource("META-INF/wsdls/service.wsdl");

Попробуй!

0 голосов
/ 24 августа 2015

Хотя вы можете заставить его работать с некоторыми манипуляциями, я бы порекомендовал , а не сделать это и сохранить его так, как вы сейчас.

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

При развертывании в WebSphere вы можете изменить конечные точки на другие конечные точки из пользовательского интерфейса развертывания. На других серверах приложений вам может понадобиться найти XML-код привязки конкретного поставщика, чтобы сделать это.

Это происходит только при инициализации, поэтому влияние на ваше приложение в целом должно быть незначительным.

0 голосов
/ 23 мая 2014

Моим решением было модифицировать сгенерированный Сервис. Вы должны изменить wsdlLocation в аннотации заголовка, и экземплярный блок выглядит следующим образом:

    static {
    URL url = null;
    url = com.ups.wsdl.xoltws.ship.v1.ShipService.class.getResource("Ship.wsdl");
    SHIPSERVICE_WSDL_LOCATION = url;
    }

Я помещаю файл wsdl в каталог bin рядом с классом ShipService

...