2015-09-04 10 views
1

Я использую плагин Maven JAXWS и файл bindings.xml для переопределения типа Java для поля класса JAXB, сгенерированного из WSDL, но имеют проблему при генерации Java-классы из нескольких WSDL с плагином JAX-WS Maven.JAXB/Maven JAX-WS: global bindings.xml указывает конкретный WSDL

Моя структура проекта:

- src 
    - jaxws 
    - bindings.xml 
    - main 
    - resources 
     - wsdl 
     - Wsdl1.wsdl 
     - Wsdl1.xsd 
     - Wsdl2.wsdl 
     - Wsdl2.xsd 

Wsdl1.wsdl ссылки Wsdl1.xsd, Wsdl2.wsdl ссылки Wsdl2.xsd, два и XSD WSDL, не имеют ничего общего. WSDL и XSD не могут быть изменены мной.

Я хочу переопределить тип Java определенного поля (departureDate) в определенном типе (Flight) в Wsdl2.xsd.

Мои bindings.xml является

<bindings version="2.0" extensionBindingPrefixes="xjc" 
       xmlns="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <globalBindings> 
     <xjc:javaType name="org.joda.time.LocalDate" xmlType="xs:date" 
         adapter="my.LocalDateAdapter"/> 
     <xjc:javaType name="org.joda.time.DateTime" xmlType="xs:dateTime" 
         adapter="my.DateTimeAdapter"/> 
    </globalBindings> 
    <bindings schemaLocation="../main/resources/wsdl/Wsdl2.xsd" node="/xs:schema"> 
     <bindings node="//xs:complexType[@name='Flight']//xs:element[@name='departureDate']"> 
      <xjc:javaType name="org.joda.time.LocalDateTime" 
          adapter="my.LocalDateTimeAdapter"/> 
     </bindings> 
    </bindings> 
</bindings> 

Моя конфигурация Maven является

<plugin> 
    <groupId>org.jvnet.jax-ws-commons</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>wsimport</goal> 
      </goals> 
      <configuration> 
       <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Когда я построить модуль с этой конфигурацией, JAX-WS обрабатывает WSDL, один за другим, но использует тот же bindings.xml для каждый из них. Таким образом, он не работает во время обработки Wsdl1 из-за ссылки на Wsdl2.xsd в bindings.xml.

[INFO] --- jaxws-maven-plugin:2.2:wsimport (default) @ my-backend --- 
[INFO] Processing: file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl 
[INFO] jaxws:wsimport args: [-keep, -s, D:\dev\Projects\my-api\my-backend\target\generated-sources\wsimport, -encoding, UTF-8, -Xnocompile, -b, D:\dev\Projects\my-api\my-backend\src\jaxws\bindings.xml, file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl] 
parsing WSDL... 

[ERROR] "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl2.xsd" 
is not a part of this compilation. Is this a mistake for "file:/D:/dev/Projects/my-api/my-backend/src/main/resources/wsdl/Wsdl1.wsdl#types?schema1"? 
    line 11 of file:/D:/dev/Projects/my-api/my-backend/src/jaxws/bindings.xml 

Если я выбираю только Wsdl2.wsdl для обработки плагином JAX-WS, то все работает отлично.

<configuration> 
    <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory> 
    <wsdlFiles> 
     <wsdlFile>Wsdl2.wsdl</wsdlFile> 
    </wsdlFiles> 
</configuration> 

Как я могу решить эту проблему?

ответ

2

Создайте одно исполнение wsimport для всех WSDL, кроме Wsdl2.wsdl, и другое исполнение для Wsdl2.wsdl. Таким образом, вы можете иметь разные конфигурации для каждого исполнения и указывать привязки jaxb для каждого по-разному.

+1

Работал отлично, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^