2011-04-25 9 views
9

我正在使用JAXB 2.2.2來解析一個簡單的XML-REST流。這是一段代碼:JAXB-Unmarshalling期間的ObjectFactory角色是什麼?

JAXBContext jc = JAXBContext.newInstance("com.example.entities"); 
Unmarshaller u = jc.createUnmarshaller(); 
r = (Response)u.unmarshal(inputStream); 

ObjectFactory類:

@XmlRegistry 
public class ObjectFactory { 

    public Response createRsp() { 
     return new Response(); 
    } 
} 

Response類:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name="rsp") 
@XmlType 
public class Response { ... } 

的 「com.example.entities」 必須包含ObjectFactory類或JAXB。指數。我想使用ObjectFactory類來決定pojo的初始化,但這些類永遠不會被使用:Response類總是直接由class.newInstance()實例化。 這有什麼不對嗎?

回答

10

您可以利用@XmlType註釋,以控制對象的創建:

@XmlType(factoryClass=ObjectFactory.class, factoryMethod="createRsp") 
public class Response { 
} 

對於由XJC產生的更多信息

+1

我的天啊,我花了最後幾個小時的時間來看看如何讓我的工廠方法工作的線索,直到我讀到這個。謝謝! – 2013-07-14 20:32:47

1

ObjectFactory類編譯器對factoryClass沒有用處和factoryMethod @XmlType註釋,因爲factoryMethod必須是靜態的無參數方法,並且XJC會生成實例方法。