2012-02-29 49 views
5

我使用maven jaxb2插件來生成從類中的模式構建的Java類。但是,我不確定如何從綁定文件正確定位到這些模式。如果從jar中提取模式並將它們放入與綁定相同的目錄中,則一切正常。但是,這不是一個實際的長期解決方案。JAXB對JAR中模式的綁定

的pom.xml:

<plugin> 
<groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.1</version> 
    <executions> 
    <execution> 
    <goals> 
     <goal>generate</goal> 
    </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <schemas> 
    <schema> 
     <dependencyResource> 
     <groupId>com.test</groupId> 
     <artifactId>schemas</artifactId> 
     <version>1.10-SNAPSHOT</version> 
     <resource>schemas/schema.xsd</resource> 
     </dependencyResource> 
    </schema> 
    </schemas>    
    <bindingDirectory>bindings</bindingDirectory> 
    <generatePackage>test.package</generatePackage> 
    <bindingIncludes> 
    <include>*.xml</include> 
    </bindingIncludes> 
    <extension>true</extension> 
    </configuration> 
    </plugin> 

bindings.xml:

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb ./bindingschema_2_1.xsd" 
version="2.1"> 

<jxb:bindings schemaLocation="classpath:/schemas/schema.xsd" node="/xs:schema"> 
    <jxb:bindings node="//xs:complexType[@name='AbstractChangeable']"> 
    <jxb:class implClass="com.test.AbstractEntity" /> 
    </jxb:bindings> 
</jxb:bindings> 

回答

5

我想在這裏工作什麼是一樣的東西:

<jaxb:bindings schemaLocation="maven:org.jvnet.jaxb2.maven2:maven-jaxb2-plugin-tests-po!/purchaseorder.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/> 
    </jaxb:schemaBindings>  
</jaxb:bindings> 

但它目前並不。請file an issue,我會盡力修復它。

什麼現在做的工作是基於SCD結合:

<jaxb:bindings scd="x-schema::po" xmlns:po="urn:po"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="org.jvnet.jaxb2.maven2.tests.po"/> 
    </jaxb:schemaBindings>  
</jaxb:bindings> 

所以你實際上並不需要基於一個特定的模式位置進行綁定,可以綁定基於空間URI,這在理論上是更好。

實際上,我有一個SCD綁定並不總是可靠工作的經驗。

UPDATE

在JAXB更多信息SCD用法請參見this link

+0

我真的不知道如何使用這個SCB綁定技術來引用maven提供的依賴jar中的模式,有沒有例子? – user1234057 2012-03-01 23:34:59

+0

我已經發布了上面的例子。你必須指定命名空間前綴('xmlns:po =「urn:po」'),並在scd表達式中使用這個前綴('scd =「x-schema :: po」'意味着「使用目標命名空間來自前綴'po'「)。看到這個鏈接:http://jaxb.java.net/guide/Using_SCD_for_customizations.html – lexicore 2012-03-01 23:39:01

+0

我們並沒有真正理解如何使用該方法引用maven jar,但是我們會等到插件更新。謝謝您的幫助! – user1234057 2012-03-02 14:05:46

6

您需要使用maven-dependency-plugin:unpack,然後指向maven-jaxb2-pluginoutputDirectory。在這種情況下,裝訂文件,你需要這樣說schemaLocation="../target/schemas/schema.xsd"

+1

我已經得到這種類型的解決方案已經提到,但我想知道如何引用一個罐子裏面的模式。 – user1234057 2012-02-29 23:00:52

-2

我知道這是一個古老的問題,但我一直在努力解決同樣的問題。我發現使用內聯綁定可以解決問題。您將不再需要任何綁定文件,並且綁定將根據它轉移到項目。

+0

用代碼示例您的答案會更好。 – gknicker 2015-02-03 16:36:46