我正在尝试为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));
}
}
答案 0 :(得分:2)
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));
}