2011-12-26 141 views
3

我使用maven-jaxb2-plugin從xsd生成jaxb註釋類。我有很多XSD文件像:從具有類似屬性名稱的XSD生成JAXB類

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="A3"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="loginPartner"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="login"/> 
       <xs:element type="xs:string" name="password"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="A3"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:string" name="errorCode"/> 
     <xs:element type="xs:string" name="errorDescription"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

當我運行Maven插件它給了我一個錯誤:

[ERROR] Error while parsing schema(s).Location [ file:schema1.xsd{10,16}]. org.xml.sax.SAXParseException: 'A3' is already defined

有什麼辦法解決這一問題? 其實我有很多XSD表示向/從服務器發送請求/響應消息。我想簡化創建,驗證,解析消息。也許有另一種解決方案嗎?

+0

你能從你的'pom.xml'發表您的插件配置?我現在無法找到(達到)'maven-jaxb2-plugin'的文檔,並且我不明白所有選項。如果可行,可以嘗試爲模式添加一個'targetNamespace =「http://任何」'「屬性來區分具有相同名稱的類型。可以將每個模式文件編譯到不同的Java包中。這也可以。爲此,您可能必須爲該插件指定multipe [executions](http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Using_the_executions_Tag)。 – 2011-12-29 08:29:14

回答

4

我有類似的問題;我有兩個獨立的獨立WSDL(每個都有幾個模式定義),我通過JAXB(通過maven-jaxb2-plugin)運行以生成映射類。

我的WSDL共享導致XJC窒息的重複架構定義。

因爲它們都是獨立的,所以我能夠通過運行maven-jaxb2插件的兩個單獨執行來生成JAXB映射 - 每個WSDL(這裏覆蓋 - How can I tell jaxb/Maven to generate multiple schema packages?)。

1

在同一名稱空間內不能有衝突的元素定義。這與在Java中給定包中不允許具有相同名稱的多個類相同。你最好的選擇是用不同的名字或不同的命名空間來定義它們。

0

可以重命名第二或第一A3的XSD在你的JAXB綁定文件

<jaxb:bindings schemaLocation="filePath.xsd" node="/xs:schema"> 
     <jaxb:bindings node="//xs:element[@name='A3']"> 
      <jaxb:Property name="SecondA3"/> 
     </jaxb:bindings> 
</jaxb:bindings> 
相關問題