-
В pom.xml добавляем apache cxf в качестве зависимости:
<properties> <endorsed .dir="">${project.build.directory}/endorsed</endorsed> <project .build.sourceencoding="">UTF-8</project> <cxf .version="">3.0.1</cxf> </properties> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency> </dependencies>
-
Далее необходимо добавить в pom.xml cxf-codegen-plugin:
<plugins> <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>${basedir}/src/main/java</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>Ссылка на wsdl</wsdl> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin> </plugins>
- Если хотим чтобы даты преобразовывались не в XMLGregorianCalendar, а во что-то более привычное (например: JodaTime), необходимо настроить связывание. Добавляем следующие строки в элемент wsdlOption в pom.xml:
... <wsdlOptions> <wsdlOption> <wsdl>Ссылка на wsdl</wsdl> <bindingFiles> <bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile> </bindingFiles> </wsdlOption> </wsdlOptions> ...
В папке ресурсов создаем файл bindings.xml со следующим содержимым: <xs:schema elementFormDefault="qualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" targetNamespace="calendar-schemalet"> <xs:annotation> <xs:appinfo> <jaxb:globalBindings> <jaxb:javaType name="org.joda.time.DateTime" xmlType="xs:dateTime" parseMethod="DateTimeAdapter.unmarshal" printMethod="DateTimeAdapter.marshal" /> </jaxb:globalBindings> </xs:appinfo> </xs:annotation> </xs:schema>
- В аттрибутах parseMethod и printMethod указываеются методы которые будут преобразовывать дату в строку и обратно. Такой класс может выглядеть примерно так:
public class DateTimeAdapter { public static DateTime unmarshal(String v){ return new DateTime(v); } public static String marshal(DateTime v){ return v.toString(); } }
- Не забываем подключить JodaTime в качестве зависимости:
... <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version> <type>jar</type> </dependency> ...
- Вызываем цели maven clean install и смотрим как CXF plugin генерирует код клиента.
- После того как все необходимые классы были сгенерированы создаем сам клиент:
//Создаем сервис Service service = new Service(); //Получаем порт Port port = service.getPort(); //Создаем интерцептор для логирования исходящих сообщений LoggingOutInterceptor loi = new LoggingOutInterceptor();
LoggingInInterceptor lii = new LoggingInInterceptor(); //Регистрируем интерцепторы ClientProxy.getClient(port).getEndpoint().getInInterceptors().add(lii); ClientProxy.getClient(port).getEndpoint().getOutInterceptors().add(loi); ClientProxy.getClient(port).getEndpoint().getOutFaultInterceptors().add(loi); //TODO: создание исходящего сообщения и вызов метода сервиса через объект port.//Создаем интерцептор для логирования входящих сообщений
Поиск по этому блогу
вторник, 29 июля 2014 г.
Генерация клиента web-сервиса с использованием maven и Apache CXF
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий