Создание Java классов на основании wsdl описания soap веб-сервиса с помощью wsimport
Как создать Java классы имея описание wsdl soap веб-сервиса? Использование утилиты wsimport.
Используемые технологии и библиотеки
- JDK 1.8
1. Описание задачи
Создать автоматически Java классы на основании wsdl описания SOAP веб-сервиса с использованием стандартной утилиты wsimport из JDK.
2. Использование wsimport
Допустим у нас имеется SOAP веб-сервис и его wsdl описание. Его можно посмотреть по пути
http://localhost:8080/soap/webserviceSEI?wsdl (см. статью HandlerChain в java SOAP веб-сервисе. Применение цепочки handler’ов).
webserviceSEI?wsdl:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
This XML file does not appear to have any style information associated with it. The document tree is shown below. <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://soap.ws.javastudy.ru/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloSoap" targetNamespace="http://soap.ws.javastudy.ru/"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://soap.ws.javastudy.ru/" elementFormDefault="unqualified" targetNamespace="http://soap.ws.javastudy.ru/" version="1.0"> <xs:element name="getGoods" type="tns:getGoods"/> <xs:element name="getGoodsResponse" type="tns:getGoodsResponse"/> <xs:element name="goods" type="tns:goods"/> <xs:element name="sayHelloTo" type="tns:sayHelloTo"/> <xs:element name="sayHelloToResponse" type="tns:sayHelloToResponse"/> <xs:element name="testService" type="tns:testService"/> <xs:element name="testServiceResponse" type="tns:testServiceResponse"/> <xs:complexType name="testService"> <xs:sequence/> </xs:complexType> <xs:complexType name="testServiceResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="getGoods"> <xs:sequence/> </xs:complexType> <xs:complexType name="getGoodsResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="tns:goods"/> </xs:sequence> </xs:complexType> <xs:complexType name="goods"> <xs:sequence> <xs:element name="id" type="xs:int"/> <xs:element minOccurs="0" name="name" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="sayHelloTo"> <xs:sequence> <xs:element minOccurs="0" name="text" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="sayHelloToResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="testService"> <wsdl:part element="tns:testService" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="getGoods"> <wsdl:part element="tns:getGoods" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="testServiceResponse"> <wsdl:part element="tns:testServiceResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="sayHelloTo"> <wsdl:part element="tns:sayHelloTo" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="getGoodsResponse"> <wsdl:part element="tns:getGoodsResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:message name="sayHelloToResponse"> <wsdl:part element="tns:sayHelloToResponse" name="parameters"></wsdl:part> </wsdl:message> <wsdl:portType name="WebserviceSEI"> <wsdl:operation name="testService"> <wsdl:input message="tns:testService" name="testService"></wsdl:input> <wsdl:output message="tns:testServiceResponse" name="testServiceResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="getGoods"> <wsdl:input message="tns:getGoods" name="getGoods"></wsdl:input> <wsdl:output message="tns:getGoodsResponse" name="getGoodsResponse"></wsdl:output> </wsdl:operation> <wsdl:operation name="sayHelloTo"> <wsdl:input message="tns:sayHelloTo" name="sayHelloTo"></wsdl:input> <wsdl:output message="tns:sayHelloToResponse" name="sayHelloToResponse"></wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="HelloSoapSoapBinding" type="tns:WebserviceSEI"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="testService"> <soap:operation soapAction="" style="document"/> <wsdl:input name="testService"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="testServiceResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getGoods"> <soap:operation soapAction="" style="document"/> <wsdl:input name="getGoods"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="getGoodsResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="sayHelloTo"> <soap:operation soapAction="" style="document"/> <wsdl:input name="sayHelloTo"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="sayHelloToResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="HelloSoap"> <wsdl:port binding="tns:HelloSoapSoapBinding" name="HelloSoapPort"> <soap:address location="http://localhost:8080/soap/webserviceSEI"/> </wsdl:port> </wsdl:service> </wsdl:definitions> |
Мы хотим сгенерировать Java классы согласно этому xml описанию и получить результат:
Для этого можно использовать стандартную утилиту из пакета JDK под названием wsimport.
Для этого необходимо выполнить следующие шаги:
1) В терминале Intellij IDEA (или через консоль, например для Windows с помощью команды cmd) набрать следующую команду
1 |
cd "C:\Program Files\Java\jdk1.8.0_91\bin>" |
Тем самым вы попадете в пакет с JDK (очевидно у вас будет другая версия и другой путь).
2) Далее используем утилиту wsimport следующим образом
1 2 |
wsimport.exe -d "C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java" -keep -verbose http://localho st:8080/soap/webserviceSEI?wsdl |
Где вместо http://localhost:8080/soap/webserviceSEI?wsdl вы указываете путь к описанию вашего веб-сервиса. Путь у вас конечно будет свой. Обратите внимание, что папка где будут создаваться Java классы должна существовать (в нашем случае эта часть …Web Services\WS Client\src\main\java).
*Путь в скриншоте немного отличается, т.к. создавался в другом проекте.
Это всё что нужно для создания классов на основе wsdl файла.
Пример выполнения кода в терминале:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
C:\Program Files\Java\jdk1.8.0_91\bin>wsimport.exe -d "C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java" -keep -verbose http://localho st:8080/soap/webserviceSEI?wsdl parsing WSDL... Generating code... ru\javastudy\ws\soap\GetGoods.java ru\javastudy\ws\soap\GetGoodsResponse.java ru\javastudy\ws\soap\Goods.java ru\javastudy\ws\soap\HelloSoap.java ru\javastudy\ws\soap\ObjectFactory.java ru\javastudy\ws\soap\SayHelloTo.java ru\javastudy\ws\soap\SayHelloToResponse.java ru\javastudy\ws\soap\TestService.java ru\javastudy\ws\soap\TestServiceResponse.java ru\javastudy\ws\soap\WebserviceSEI.java ru\javastudy\ws\soap\package-info.java Compiling code... javac -d C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java -classpath C:\Program Files\Java\jdk1.8.0_91/lib/tools.jar;C:\Program Files\ Java\jdk1.8.0_91/classes -Xbootclasspath/p:C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_91\jre\lib\rt.jar C:\Users\iMacPC\Docu ments\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\GetGoods.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main \java\ru\javastudy\ws\soap\GetGoodsResponse.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\Goods.java C:\U sers\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\HelloSoap.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\W S Client\src\main\java\ru\javastudy\ws\soap\ObjectFactory.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\S ayHelloTo.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\SayHelloToResponse.java C:\Users\iMacPC\Documents \JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\TestService.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\j ava\ru\javastudy\ws\soap\TestServiceResponse.java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\WebserviceSEI. java C:\Users\iMacPC\Documents\JavaStudy.ru\Web Services\WS Client\src\main\java\ru\javastudy\ws\soap\package-info.java C:\Program Files\Java\jdk1.8.0_91\bin> |