2011-03-01 21 views
29

我有兩個使用JAXB處理的模式。對第一個模式進行預處理,並使用情節文件使用此信息(以下爲http://www.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21)。 第二個模式導入第一個,並再次使用jaxb進行處理。這一切都按預期工作。具有元素引用的JAXB多個模式

但是現在我在第一個模式中有一個元素,它在第二個使用引用中使用。

架構一個:

<schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:test="http://www.example.org/Test/" 
targetNamespace="http://www.example.org/Test/"> 
<element name="type" type="test:MyType"></element> 

架構B:

<schema elementFormDefault="qualified" 
xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:second="http://www.example.org/Second/" 
xmlns:test="http://www.example.org/Test/" 
targetNamespace="http://www.example.org/Second/"> 

<import namespace="http://www.example.org/Test/" /> 

<complexType name="SomeType"> 
    <sequence> 
     <element ref="test:type" minOccurs="1" maxOccurs="unbounded" /> 
    </sequence> 
</complexType> 

處理期間,沒有什麼是錯誤的,但是對於兩種模式所產生的代碼提供相同的方法:

public JAXBElement<EventType> createType(TypeType value) 

在運行時,這將導致以下錯誤:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 
    IllegalAnnotationExceptions 
The element name {http://www.example.org/Type/}type has more than one mapping. 

如何防止JAXB從創建重複createType方法?

在此先感謝!

更新:我在JAXB郵件列表上提出了同樣的問題,在該列表中我還發布了一個工作示例。線程和示例可以在以下位置找到:http://java.net/projects/jaxb/lists/users/archive/2011-03/message/18

在此列表中,我已經提出了一種解決方法,現在可以按照我喜歡的方式使用模式。但我仍然認爲JAXB不應該創建額外的「創建」方法,因爲它應該已經在情節文件中。

+1

什麼你對xjc的看法是什麼? – justkt 2011-03-01 14:03:43

+0

對於第二個模式,我使用來自ant的XJC,並且情節文件位於作爲參數提供的jar文件中。此外還有一個目錄能夠映射到第一個模式。這似乎工作,如果我不使用與情節文件的jar,第二個模式用於生成所有類型。而在我的例子中,只有createType(TypeType ..)方法是重複的。 – Alexander 2011-03-01 14:29:26

+1

請提供完整的模式。什麼定義是「測試:MyType」? – 2011-03-04 06:45:42

回答

1

我已經在我的日子裏寫過幾個模式定義。您正在第二個模式聲明中聲明您的第一個xsd,然後導入它。

根據MSDN,當您導入XSD時,您不會將其包含在架構聲明中。 這是它在你的模式聲明中的位置。

的xmlns:測試= 「http://www.example.org/Test/」

刪除這一點,只是做進口...(<xs:import namespace="http://www.example.com/IPO" />

見:http://msdn.microsoft.com/en-us/library/ms256480.aspx

+0

我在Linux/Java-land上試過了,並且xmllint命令行實用程序和JAXB xjc編譯器Ant任務或多或少抱怨同樣的消息。導入和前綴聲明似乎都是必需的。 MSDN的行爲有點不同,這有點令人毛骨悚然。 – 2013-05-30 11:22:09

相關問題