1
我有一個模型,包含一個具有一個註釋屬性的接口,以及一個不重新註釋該屬性實現的具體實現者。爲什麼這個解組不正確(使用MOXy 2.5.0)?我得到一個正確構造的對象,但物業從未綁定到XML:MOXy/JAXB接口註釋
<!-- XML -->
<InterfaceImpl id="5150" />
/**
* Annotated interface
*/
@XmlRootElement(name="IInterface")
public interface IInterface
{
@XmlAttribute(name="id")
public void setId(int id);
}
/**
* Concrete implementor
*/
@XmlRootElement(name="InterfaceImpl")
public class InterfaceImpl implements IInterface
{
private int m_id = -1;
@Override
public void setId(int id)
{
m_id = id;
}
}
/**
* Unmarshal code
*/
File f = new File("src\\resources\\Interface.xml");
JAXBContext context = JAXBContext.newInstance(MY_PATH);
Unmarshaller u = context.createUnmarshaller();
InterfaceImpl i = (InterfaceImpl)u.unmarshal(f);
如果我改變IInterface到一個抽象類,它工作正常 - 不應該抽象類和接口被處理的同樣的方式?這是預期的行爲,還是已知的問題?
謝謝!
感謝您的答覆,布萊斯 - 你是我想從聽到的傢伙。 :)所以這聽起來像我不應該期望它按照我想要的方式工作,也就是說,沒有辦法在事先不知道具體類型的情況下解組實現註釋接口的類。 –
我不得不說,我仍然不清楚爲什麼一個接口的行爲與抽象類不一樣,我知道它們在語義上與JVM的角度「不同」,但我不明白爲什麼JAXB必須對待他們任何不同。您能否提供一些關於解組算法的深入見解,這可能會強調爲什麼這在技術上不可行? –
@StephenCarlson - 我已經想出了一種方法來支持你的用例。我用一個完整的例子重新回答了我的答案。 –