我有一個從MOXy版本的XJC生成的JAXB模型。 xjc:superclass
標記用於綁定的文件中,因此所有對象都擴展了一個公共類。在EclipseLink中擴展ObjectFactory MOXy
package my.package
//Base.java
@XmlTransient
public class Base {
//...
}
//MyTag.java (generated from XJC)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {/*...*/})
@XmlRootElement(name = "myTag")
public class MyTag extends Base {
//...
}
模型和模式都可以更改,但我可以更改基類。
我需要擴展MyTag以及模型中的其他類,所以我可以從Base類自定義它的方法行爲。所以我擴展了MyTag和需要自定義行爲的其他域類以及ObjectFactory。這些類存在於獨立的Java包中。
package my.extended.package
//MyTagExtended.java
public class MyTagExtended extends MyTag {
//...
}
//CustomObjectFactory.java
public class CustomObjectFactory extends ObjectFactory {
//...
@Override
public MyTagExtended createMyTag() {
return new MyTagExtended();
}
//...
}
施藥代碼:
package application
//Application.java
System.setProperty("org.eclipse.persistence.moxy.annotation.xml-value-extension", "true");
JAXBContext jc = (JAXBContext) JAXBContext.newInstance(XPSObjectFactory.class);
JAXBUnmarshaller u = jc.createUnmarshaller();
return u.unmarshal(xmlFile);
我遇到的問題是莫西似乎隨機決定是否調用CustomObjectFactory的或的ObjectFactory的方法。
在CustomObjectFactory類中,如果我只有一個重寫的方法,則始終調用該方法。然而,當我放入更多的時候,MOXy似乎隨機決定是否調用ObjectFactory的方法或CustomObjectFactory。
當我使用與JDK提供的Oracle JAXB實現相同類型的設置時,它工作正常。 CustomObjectFactory的方法總是被調用。
是否需要設置配置?我如何配置MOXy來始終使用我的CustomObjectFactory的方法?
編輯: 爲了澄清,這裏是我是如何做到與Oracle的JAXB實現相同的情況下工作:
JAXBContext jc = JAXBContext.newInstance("my.package");
Unmarshaller u = jc.createUnmarshaller();
u.setProperty("com.sun.xml.internal.bind.ObjectFactory", new CustomObjectFactory());
我試圖設置在莫西解組的ObjectFactory的屬性,但它引發了異常。