2011-04-25 3 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(); 
    } 
} 

응답 클래스 :이 코드의 조각

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

은 "com.example.entities"는 ObjectFactory를 클래스 또는 JAXB를 포함해야합니다. 색인. 일부 pojo 초기화를 결정하기 위해 ObjectFactory 클래스를 사용하고 싶지만,이 클래스는 사용되지 않습니다. Response 클래스는 항상 class.newInstance()에 의해 직접 인스턴스화됩니다. 문제가 있습니까?

답변

10

당신은 개체가 생성되는 방법을 제어 할 수 @XmlType 주석을 활용할 수 있습니다 :

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

XJC에 의해 생성 된 추가 정보

+1

세상에, 나는 이것을 읽을 때까지 내 공장 방법을 얻는 방법에 대한 단서를 찾기 위해 지난 몇 시간을 보냈다. 고맙습니다! –

1

ObjectFactory를 클래스에 대해 컴파일러는 factoryClass에 유용하지 않습니다. factoryMethod는 정적 인 인수없는 메소드 여야하고 XJC는 인스턴스 메소드를 생성해야하기 때문에 factoryMethod @XmlType 어노테이션을 사용해야한다.