2016-04-21 29 views
1

我正在使用maven-jaxb2-plugin。這裏是我的插件配置獲取錯誤在使用maven-jaxb2-plugin時,只允許一個globalBindings自定義在整個編譯中

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>xjc-serviceoperations</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <generateDirectory>${basedir}/src/main/java/</generateDirectory> 
       <schemaDirectory>src/main/resources/schemas/lmsapi/serviceoperations</schemaDirectory> 
       <removeOldOutput>false</removeOldOutput> 
      </configuration> 
     </execution> 
     <execution> 
      <id>xjc-types</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <generateDirectory>${basedir}/src/main/java</generateDirectory> 
       <schemaDirectory>src/main/resources/schemas/lmsapi/types</schemaDirectory> 
       <bindingDirectory>src/main/resources/schemas</bindingDirectory> 
       <bindingIncludes> 
        <include>schema-binding.xjb</include> 
       </bindingIncludes> 
       <removeOldOutput>false</removeOldOutput> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

這裏是我的架構,binding.xml文件

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:annox="http://annox.dev.java.net" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb 
        http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
    version="2.1"> 

    <jaxb:globalBindings> 
     <jaxb:javaType name="java.time.LocalDateTime" xmlType="xsd:dateTime" 
      parseMethod="com.softech.ls360.lms.api.proxy.xsd.binder.XSDateTimeCustomBinder.parseDateTime" 
      printMethod="com.softech.ls360.lms.api.proxy.xsd.binder.XSDateTimeCustomBinder.printDateTime" /> 

    <jaxb:javaType name="java.time.LocalDate" xmlType="xsd:date" 
      parseMethod="com.softech.ls360.lms.api.proxy.xsd.binder.XSDateCustomBinder.parseDateTime" 
      printMethod="com.softech.ls360.lms.api.proxy.xsd.binder.XSDateCustomBinder.printDateTime" /> 

     <xjc:serializable uid="1" /> 
    </jaxb:globalBindings> 

</jaxb:bindings> 

我有一個xsd Enrollments.xsd。我有日期類型。我希望任何具有日期或日期時間類型的xsd都轉換爲Localdate或Localdatetime而不是XMLGregorianCalendar。這裏是片段

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 

    <xsd:include schemaLocation="Learner.xsd"/> 
    ... 
    <xsd:complexType name="LearnerEnrollCourses"> 
     <xsd:sequence> 
      <xsd:element name="CourseId" type="xsd:string" minOccurs="1" maxOccurs="unbounded" nillable="false" /> 
     </xsd:sequence> 
     <xsd:attribute name="enrollmentStartDate" type="xsd:date" use="required" /> 
     <xsd:attribute name="enrollmentEndDate" type="xsd:date" use="required" /> 
    </xsd:complexType> 
    ... 
</xsd:schema> 

現在,當我右擊POM。選擇Run As -> Maven generate-sources然後我得到以下錯誤

[INFO] Sources are not up-to-date, XJC will be executed. 
[ERROR] Error while parsing schema(s).Location [ file:/D:/Basit/eclipse-jee-mars-2/workspace/360Training/Java%208/LS360ProxyAPI/LmsApiProxy/src/main/resources/schemas/schema-binding.xjb{12,26}]. 
com.sun.istack.SAXParseException2; systemId: file:/D:/Basit/eclipse-jee-mars-2/workspace/360Training/Java%208/LS360ProxyAPI/LmsApiProxy/src/main/resources/schemas/schema-binding.xjb; lineNumber: 12; columnNumber: 26; only one globalBindings customization is allowed in a whole compilation 
at com.sun.tools.xjc.ErrorReceiver.error(ErrorReceiver.java:86) 
at com.sun.tools.xjc.reader.xmlschema.ErrorReporter.error(ErrorReporter.java:84) 
.... 
[ERROR] Error while parsing schema(s).Location [ file:/D:/Basit/eclipse-jee-mars-2/workspace/360Training/Java%208/LS360ProxyAPI/LmsApiProxy/src/main/resources/schemas/schema-binding.xjb{12,26}]. 
com.sun.istack.SAXParseException2; systemId: file:/D:/Basit/eclipse-jee-mars-2/workspace/360Training/Java%208/LS360ProxyAPI/LmsApiProxy/src/main/resources/schemas/schema-binding.xjb; lineNumber: 12; columnNumber: 26; (related to above) but one is already given at this location 

雖然類正在生成。但是type仍然是XMLGregorianCalendar。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "LearnerEnrollCourses", propOrder = { 
    "courseId" 
}) 
public class LearnerEnrollCourses { 

    @XmlElement(name = "CourseId", required = true) 
    protected List<String> courseId; 

    @XmlAttribute(name = "enrollmentStartDate", required = true) 
    @XmlSchemaType(name = "date") 
    protected XMLGregorianCalendar enrollmentStartDate; 

    @XmlAttribute(name = "enrollmentEndDate", required = true) 
    @XmlSchemaType(name = "date") 
    protected XMLGregorianCalendar enrollmentEndDate; 

我在做什麼錯在配置和我怎麼能解決呢?

感謝

---------------------編輯------------------ -----

這個插件配置正在工作。

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>xjc-serviceoperations</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <generateDirectory>${basedir}/src/main/java/</generateDirectory> 
       <schemaIncludes> 
        <schemaInclude>schemas/lmsapi/serviceoperations/*.xsd</schemaInclude> 
       </schemaIncludes> 
       <bindingIncludes> 
        <bindingInclude>schemas/schema-binding.xjb</bindingInclude> 
       </bindingIncludes> 
       <verbose>true</verbose> 
       <extension>true</extension> 
       <removeOldOutput>false</removeOldOutput> 
      </configuration> 
     </execution> 
     <execution> 
      <id>xjc-types</id> 
      <phase>generate-resources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <configuration> 
       <generateDirectory>${basedir}/src/main/java</generateDirectory> 
       <schemaDirectory>schemas/lmsapi/types</schemaDirectory> 
       <schemaIncludes> 
        <schemaInclude>**/*.xsd</schemaInclude> 
       </schemaIncludes> 
       <schemaExcludes> 
        <schemaExclude>Enrollment.xsd</schemaExclude> 
       </schemaExcludes> 
       <removeOldOutput>false</removeOldOutput> 
       <verbose>true</verbose> 
       <extension>true</extension> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

這裏是我的架構,binding.xjb

<jaxb:globalBindings> 

    <jaxb:javaType name="java.time.LocalDateTime" xmlType="xsd:dateTime" 
      parseMethod="com.softech.ls360.lms.api.proxy.schema.binder.XSDateTimeCustomBinder.parseDateTime" 
      printMethod="com.softech.ls360.lms.api.proxy.schema.binder.XSDateTimeCustomBinder.printDateTime" /> 

    <jaxb:javaType name="java.time.LocalDate" xmlType="xsd:date" 
      parseMethod="com.softech.ls360.lms.api.proxy.schema.binder.XSDateCustomBinder.parseDateTime" 
      printMethod="com.softech.ls360.lms.api.proxy.schema.binder.XSDateCustomBinder.printDateTime" /> 

    <!-- Force all classes implements Serializable --> 
    <xjc:serializable uid="1" /> 

</jaxb:globalBindings> 


<jaxb:bindings schemaLocation="lmsapi/types/Enrollment.xsd" node="/xsd:schema" > 
    <jaxb:schemaBindings > 
     <jaxb:package name="com.softech.vu360.lms.webservice.message.lmsapi.types.enrollment" /> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 

這是我從serviceoperations和類型目錄中的文件之一

EnrollmentServiceOperations.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://enrollment.serviceoperations.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns="http://enrollment.serviceoperations.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns:enrolmnt="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns:tr="http://transactionresult.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 

    <xsd:import namespace="http://transactionresult.types.lmsapi.message.webservice.lms.vu360.softech.com" schemaLocation="../types/TransactionResultType.xsd"/> 
    <xsd:import namespace="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" schemaLocation="../types/Enrollment.xsd"/> 

    <xsd:element name="LearnerCoursesEnrollRequest"> 
     <xsd:complexType> 
      .... 
     </xsd:complexType> 
    </xsd:element> 
    .... 
</xsd:schema> 

CustomerServiceOperations.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://customer.serviceoperations.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns="http://customer.serviceoperations.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns:cust="http://customer.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns:tr="http://transactionresult.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 

    <xsd:import namespace="http://transactionresult.types.lmsapi.message.webservice.lms.vu360.softech.com" schemaLocation="../types/TransactionResultType.xsd"/> 
    <xsd:import namespace="http://customer.types.lmsapi.message.webservice.lms.vu360.softech.com" schemaLocation="../types/Customer.xsd"/> 

    <xsd:element name="AddCustomerRequest"> 
     <xsd:complexType> 
      ... 
     </xsd:complexType> 
    </xsd:element> 
    ... 
</xsd:schema> 

類型/ Enrollment.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns="http://enrollment.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 

    <xsd:include schemaLocation="Learner.xsd"/> 

    <xsd:complexType name="LearnerCourses"> 
     .... 
    </xsd:complexType> 
    .... 
</xsd:schema> 

類型/ Customer.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://customer.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns="http://customer.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    xmlns:addr="http://address.types.lmsapi.message.webservice.lms.vu360.softech.com" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 

    <xsd:import namespace="http://address.types.lmsapi.message.webservice.lms.vu360.softech.com" schemaLocation="Address.xsd"/> 

    <xsd:complexType name="Customers"> 
     <xsd:sequence> 
      .... 
     </xsd:sequence> 
    </xsd:complexType> 
    ... 
</xsd:schema> 

現在我運行Run As -> Maven generate-sources。它將在src/main/java/com/..../serviceoperation/customer/AddCustomerRequest.java中生成服務操作源,並在src/main/java/com/.../types/customer/Customers.java中鍵入源。類似於其他xsds。爲什麼我不應該使用<generateDirectory>${basedir}/src/main/java/</generateDirectory>。這就是我要的。我認爲這個插件是從每個xsd中的目標名稱空間製作包。我對嗎 ?

如果我在配置這個插件時做錯了,請告訴我,以便我可以更正它。就像你說的不要在src/main/java中生成一樣。

我希望我的所有xsds在服務操作文件夾(src/main/resources/schemas/lmsapi/serviceoperation/*.xsd)應生成src/main/java/com/..../serviceoperation/customer/*.java,src/main/java/com/..../serviceoperation/enrollment/*.java文件夾和其他人相同。

(src/main/resources/schemas/lmsapi/types/*.xsd)中的所有xsds應產生src/main/java/com/..../types/customer/*.java,src/main/java/com/..../types/enrollment/*.java文件夾和其他人相同。

而且我的綁定文件也適用於所有xsds (src/main/resources/schemas/schema-binding.xjb)伺服操作和類型文件夾中的所有xsds。

有沒有更好的方法來配置這個插件,然後請告訴我,所以我可以糾正它在我身邊。我猜你是這個插件的作者。

感謝&問候

巴西特馬哈茂德·艾哈邁德·

+0

請發表'mvn clean install -X'日誌。你也應該*不*產生到'src/main/java'和[使用單獨的目標目錄進行單獨執行](https://github.com/highsource/maven-jaxb2-plugin/wiki/Use-Separate-Target-目錄換獨立-處決)。 – lexicore

+0

請檢查我的編輯。謝謝 – Basit

+0

仍然沒有看到'mvn clean install -X'日誌。至於生成'src/main/java'中的代碼,當然你可以做任何你想做的事情,但Maven約定是生成的代碼進入'target/generated-source/'。 – lexicore

回答

0

也有類似的問題,並通過改變java version from 1.8 -> 1.7解決它。

或者刪除xjc:serializable uid="1"也可以。

2

目前對這一問題的狀態,以備用人的無奈和搜索......

這個問題隨機出現並且由JAXB實現中的錯誤引起的。該問題據報道爲https://java.net/jira/browse/JAXB-687,但現在它已關閉,即使它不是固定的(請參閱2016年9月16日發佈的不理想用戶的評論)。

相關問題