Создание клиента Web-сервиса Axis2 – типы без изменения клиента

Возможно ли, чтобы Axis2 и Eclipse создали клиент веб-службы и использовали ли они типы java, которые у вас уже есть в пакетах, вместо создания собственных типов. Разум, конечно, если у меня есть тип A, уже созданный и создающий его собственный тип AI, не может просто назначить переменную типа A переменной типа B.

Wsdl создается из веб-службы, развернутой на сервер приложений. Если это невозможно сгенерировать, можно было бы создать клиент из уже существующих java-файлов.

Если вы действительно хотите повторно использовать существующие classы, вы можете напрямую вызвать API Axis2 без генерации клиента с помощью wsdl2java. Ниже приведен некоторый относительно простой код для вызова веб-службы. Вам просто нужно заполнить конечную точку веб-службы, метод QName, ожидаемый class возврата и аргументы службы. Вы можете повторно использовать существующие classы как возвращаемые значения или аргументы.

Если ваш веб-сервис довольно сложный, вы можете обнаружить, что вам нужно углубиться в API, чтобы этот подход работал.

serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference("http://myservice"); options.setTo(targetEPR); QName methodName = new QName("ns","methodName"); Class[] returnTypes = new Class[] { String.class }; Object[] args = new Object[] { "parameter" }; Object[] response = serviceClient.invokeBlocking(methodName, args, returnTypes); 

Вы создаете клиента веб-службы из wsdl, правильно?

Единственное, что знает инструмент wsdl2java, это информация в wsdl, поэтому он не знает о каких-либо типах, которые вы уже создали.

Если вы можете получить информацию о типе в wsdl, вы можете заставить ее работать, хотя я никогда не пробовал.

Если вам нужен простой способ копирования из типа A в тип B, вы можете попробовать BeanUtils.copyProperties , если только сеттеры и геттеры типа A и типа B совпадают.

почти все проекты java webservices проходят через это. Я не знаю, есть ли в .NET / C # мир более элегантное решение.

Имеет смысл, как сказал Майк, использовать BeanUtils.copyProperties.

BR,
~ A

Если вы используете eclipse как ваш идеал, вам нужно: http://www.eclipse.org/webtools/ . Он делает что-то сверх того, что вы хотите.

Вы можете напрямую использовать class ServiceClient для вызова веб-сервиса, который обеспечивает вызов только с использованием XML и возвращает ответ XML. Для разных методов веб-службы вам необходимо преобразовать XML-ответ в некоторый Java-POJO для его использования. Для вас необходимо выполнить только обработку ответа. что вы можете делать, например, из XML в Map и т. д. …

Таким образом, вам не понадобятся какие-либо другие classы-заглушки для вызова любого веб-сервиса, только для обработки ответа XML. Вы можете преобразовать XML в POJO с помощью Castor или JAXB libs.

Таким образом, вы не должны каждый раз изменять свой клиент для diff. веб-сервисы. Вы можете развиваться подобно тому, как предоставлять обработчик ответа клиенту извне. Так что для каждого другого веб-сервиса у вас будет diff. class обработчика ответов, который представляет собой реализацию вашего интерфейса.

 //common interface for response handlers... //implement this for diff. web service/methods public interface WSRespHandler{ public Object getMeResp(Object respData); } //pass particular handler to client when you call some WS public class WebServiceClient { public Object getResp(WSRespHandler respHandler) { .. return repHandler.getMeResp(xmlData); } } 

Справка:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

Благодарю.

http://www.techlads.com

В случае, если этот пост по-прежнему для кого-то полезен, я прочитал руководство по генерации клиентов axis2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Похоже, что плагин Axis2 Eclipse настроен на вызов генерации кода ADB в интегрированном режиме (см. http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), тем самым создавая внутренние classы в заглушке веб-службы. Я не знаю, возможно ли изменение режима генерации в расширенный режим (создание classов данных из classа stub), но вы можете сделать это с помощью командной строки Wsdl2Java:

  %AXIS2_HOME%\bin\WSDL2Java -uri  -p  -u 

Параметр -u указывает генератору кода ADB создавать classы данных как отдельные classы, а не внутренние classы в заглушке.