我正在开发一个使用XML的jax-rs Web服务。由于业务需求,我需要XML和unmarshalled java对象。因此,我不是将java类型添加为方法参数,而是使用String作为类型并将XML流注入到字符串中。
private static JAXBContext context;
public StudentFacade() throws JAXBException {
if(context == null) {
context = JAXBContext.newInstance(Student.class);
}
}
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Response sendSms(final String xml) throws JAXBException {
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(new ByteArrayInputStream(xml.getBytes()));
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.unmarshal(xsr);
....
}
我的问题是,我应该始终创建一个新的XMLInputFactory和Unmarshaller吗?
如果我将XMLInputFactory和Unmarshaller移动到构造函数并且只像JAXBContext一样初始化它们,则以下代码是否有效
private static Unmarshaller unmarshaller;
private static XMLInputFactory xif;
public StudentFacade() throws JAXBException {
if(unmarshaller == null) {
JAXBContext context = JAXBContext.newInstance(Student.class);
unmarshaller = context.createUnmarshaller();
xif = XMLInputFactory.newFactory();
}
}
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Response sendSms(final String xml) throws JAXBException {
XMLStreamReader xsr = xif.createXMLStreamReader(new ByteArrayInputStream(xml.getBytes()));
unmarshaller.unmarshal(xsr);
....
}