Настройте URL-адрес веб-службы для клиента из файла свойств с Netbeans 7 и Axis2 - PullRequest
4 голосов
/ 07 марта 2012

Я новичок в разработке веб-сервисов. Я использую Netbeans 7.0 с плагином Axis2 и Tomcat 7.

Я создал один проект для компонентов сервера, где я определяю веб-методы, а затем создал другой проект для компонентов клиента. Клиент был создан в Netbeans, выбрав New -> Webservice Client.

Когда вы выбираете New -> Webservice Client в Netbeans, он запрашивает у вас URL WSDL. Поэтому, конечно, я дал ему URL WSDL из моей локальной установки Tomcat. Но как быть, когда я распространю это как реальное приложение? Пользователи не собираются указывать своим клиентам на http://localhost:8080/axis2/services/?wsdl. Я имею в виду, что при запуске клиента из IDE все работает нормально, но когда я распространяю это (это приложение для управления трудовыми отношениями, к которому вы обращаетесь вход / выход на одном или нескольких клиентах, а временные карты записываются в центральную БД), каждый клиент должен иметь возможность указывать URL-адрес веб-службы любого производственного сервера, к которому он должен подключиться.

Я бы хотел сохранить URL-адрес веб-службы в файле свойств, но на самом деле не знаю, что все делать программно на клиенте, чтобы выполнить вызов URL-адреса, загруженного из файла свойств.

В папке dist моего клиента, если я открою JAR, созданный netbeans с помощью WinZip, я увижу имя файла jax-ws-catalog.xml с URL-адресом в нем (который указывает на localhost). Я предполагаю, что это откуда URL, который используется во время выполнения.

Так, как правильно это сделать? Я искал вокруг, но то, что я нашел при поиске в Google, обычно показывает, что вызовы веб-сервисов совершаются совершенно иначе, чем автоматически сгенерированный код, который собирает Netbeans, и я хотел бы получить некоторую информацию о том, как Netbeans создает клиент веб-службы, поэтому я не заканчиваю вносить изменения, просто перезаписывая их в IDE.

Спасибо! Извините за длинное объяснение.

-Джит

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

Я на самом деле понял это по-другому, и это, вероятно, отчасти специфично для того, как Netbeans делает вещи. Ответ, предоставленный Shott85, также хорош, но я думаю, что он более специфичен для автоматического генерирования кода Netbeans.

Итак, у меня есть проект, в котором находятся все веб-методы с именем SimplyLaborServer, и проект, в котором есть клиент веб-службы с именем SimplyLaborClient.

В Netbeans в рамках проекта SimplyLaborClient в узле «Сгенерированные источники (jax-ws)» у них есть файл SimplyLaborServer.java, который имеет класс, расширяющий Service. У него есть частный URL, который жестко запрограммирован для URL моего локального сервера следующим образом ...

url = new URL("http://localhost:8080/axis2/services/SimplyLaborServer?wsdl");

И в конструкторе по умолчанию он использует этот URL. Но он также предоставляет конструктор следующим образом, где я могу указать URL ...

public SimplyLaborServer(URL wsdlLocation) {
    super(wsdlLocation, SIMPLYLABORSERVER_QNAME);
}

Поэтому, когда у меня есть автоматически сгенерированный метод, который выглядит так в моем клиенте ...

private static String testConnection() {
    simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer();
    simplylaborclient.SimplyLaborServerPortType port = service.getSimplyLaborServerHttpSoap12Endpoint();
    return port.testConnection();
}

Я могу просто загрузить объект Properties с URL-адресом конечной точки и изменить одну строку на что-то вроде ниже, где props - это объект Properties, для которого endpointUrl определен с правильным URL-адресом.

simplylaborclient.SimplyLaborServer service = new simplylaborclient.SimplyLaborServer(new URL(props.getProperty("endpointUrl")));

Меня беспокоит только то, что эти методы генерируются автоматически при перетаскивании их из узла «Ссылки на веб-службы». Я не хочу, чтобы они были перезаписаны, если я внесу дополнительные изменения на стороне сервера.

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

Спасибо

2 голосов
/ 07 марта 2012

На этот вопрос уже отвечали ранее: Как изменить конечную точку URL веб-сервиса?

NetBeans использует простой JAX-WS для генерации клиентского кода, поэтому приведенный выше ответ должен работать для вас. Вам просто нужно добавить код, чтобы получить URL-адрес конечной точки из файла свойств.

1 голос
/ 12 ноября 2013

Вы используете локальный (http://localhost:8080/axis2/services) WSDL для простого создания необходимых классов веб-службы.

После завершения ваших разработок вы можете разместить приложение веб-службы в любом месте сети или в локальной сети..

После завершения разработки веб-сервиса вы можете развернуть его локально и использовать сервис для создания клиентских классов.При создании клиента вам просто нужно создать объект URL-адреса и передать URL-адрес веб-службы (размещенный), как показано ниже.

PropertyResourceBundle resoureceBundle = (PropertyResourceBundle) PropertyResourceBundle.getBundle(‘Property file name and path’);
URL serviceURL = resoureceBundle. getString("Hosted_URL_Name");
ServiceClass service = new ServiceClass(serviceURL);
ServicePort servicePort = new ServicePort(service);
servicePort.getItems();

Среда IDE Netbeans создаст много классов при автоматическом создании клиента веб-службы.

В приведенном выше примере кода ServiceClass - это основной класс веб-службы, который изначально создается с использованием локального URL-адреса.Имя и параметры конструктора будут различаться в зависимости от вашей веб-службы, но вы должны передать URL-адрес веб-службы (вновь размещенный URL) в виде строки.

Затем с помощью класса обслуживания вы можете создать объект порта и получить доступ ко всем доступным веб-методам, которые вам нужны.

...