Какова роль ObjectFactory во время JAXB-Unmarshalling? - PullRequest
9 голосов
/ 25 апреля 2011

Я использую JAXB 2.2.2 для анализа простого потока XML-REST. Это кусок кода:

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.index. Я хотел бы использовать класс ObjectFactory для принятия решения об инициализации pojo, но этот класс никогда не используется: класс Response всегда создается экземпляром class.newInstance () напрямую. Что-то не так в этом?

Ответы [ 2 ]

11 голосов
/ 25 апреля 2011

Вы можете использовать аннотацию @XmlType для управления созданием объектов:

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

Для получения дополнительной информации

1 голос
/ 14 августа 2014

Класс ObjectFactory, сгенерированный компилятором XJC, бесполезен для аннотации factoryClass и factoryMethod @XmlType, поскольку factoryMethod должен быть статическим методом без аргументов, а XJC генерирует методы экземпляра.

...