我有兩個使用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不應該創建額外的「創建」方法,因爲它應該已經在情節文件中。
什麼你對xjc的看法是什麼? – justkt 2011-03-01 14:03:43
對於第二個模式,我使用來自ant的XJC,並且情節文件位於作爲參數提供的jar文件中。此外還有一個目錄能夠映射到第一個模式。這似乎工作,如果我不使用與情節文件的jar,第二個模式用於生成所有類型。而在我的例子中,只有createType(TypeType ..)方法是重複的。 – Alexander 2011-03-01 14:29:26
請提供完整的模式。什麼定義是「測試:MyType」? – 2011-03-04 06:45:42