![](/img/trans.png)
[英]How to use default Jersey JAXB MessageBodyWriter for XML mixed with custom providers?
[英]Jersey JAXB how to implement a MessageBodyWriter for List
我正在嘗試為List實現MessageBodyWriter。 使用此實現,我有一個空指針異常在線; marshaller.marshal(o,entityStream);
@Provider
@Produces(MediaType.APPLICATION_XML)
public class MyListProvider implements MessageBodyWriter<List<Instrument>> {
private String myWrapElemName = "datas";
private Marshaller marshaller;
public InstrumentModelListProvider(){
JAXBContext context;
try {
context = JAXBContext.newInstance(Data.class);
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
//marshaller.setProperty(JMMarshallerImpl.JAXME_XML_DECLARATION, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
} catch (JAXBException e) {
System.err.println("/////////////"+e.getMessage());
//e.printStackTrace();
}
}
@Override
public long getSize(List<Data> as, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType) {
return -1;
}
@Override
public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType) {
return MediaType.APPLICATION_XML_TYPE.equals(mediaType)
&& List.class.isAssignableFrom(type)
&& (((ParameterizedType)genericType).getActualTypeArguments()[0]).equals(Data.class);
}
@Override
public void writeTo(List<Data> list, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException, WebApplicationException {
Charset c = Charset.forName("UTF-8");
String cName = c.name();
entityStream.write(String.format("<?xml version=\"1.0\" encoding=\"%s\" standalone=\"yes\"?>", cName).getBytes(cName));
entityStream.write(String.format("<%s>", myWrapElemName).getBytes(cName));
for (Data o : list){
try {
marshaller.marshal(o, entityStream);
} catch(JAXBException exp) {
exp.printStackTrace();
//System.exit(-1);
}
}
entityStream.write(String.format("</%s>", myWrapElemName).getBytes(cName));
}
}
public void writeTo(List<Data> list, Class<?> type, Type genericType, Annotation[] annotations,
MediaType mediaType, MultivaluedMap<String, Object> httpHeaders,
OutputStream entityStream) throws IOException, WebApplicationException {
Charset c = Charset.forName("UTF-8");
String cName = c.name();
entityStream.write(String.format("<?xml version=\"1.0\" encoding=\"%s\" standalone=\"yes\"?>", cName).getBytes(cName));
entityStream.write(String.format("<%s>", myWrapElemName).getBytes(cName));
InstrumentModelListProvider();
for (Data o : list){
try {
marshaller.marshal(o, entityStream);
} catch(JAXBException exp) {
exp.printStackTrace();
//System.exit(-1);
}
}
entityStream.write(String.format("</%s>", myWrapElemName).getBytes(cName));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.