我正在开发一个轻量级框架,用于编组和解组发送到jaxrs服务和从jaxrs服务接收的数据。我正在使用jaxb marshaller和unmarshaller。
当使用该服务时,我注意到它能够通过将它们包装到带有类名的标签中,然后在末尾包含“s”来编组实体列表。因此<customer>
将被<customers>
包裹。这是特定于实现的东西,还是在jaxrs规范中?
此外,在创建jaxrs服务时,您可以指定它消耗和生成的MediaTypes,如下所示:
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
您还可以指定在返回String,Long等时在服务器上使用的MediaType.TEXT_PLAIN
。
我想执行与服务器端相关的完全相反的操作。这就是服务所支配的解组,并以服务能够解组的方式编组数据。目前我有这段代码:
jaxbContext = JAXBContext.newInstance(<array of classes>);
javax.xml.bind.Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FRAGMENT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
String xml = writer.toString();
Unmarshaller unmarshaller = jaxbContext.
StringReader reader = new StringReader(xml);
JAXBElement<T> jaxbElement = unmarshaller.unmarshal(new StreamSource(reader), clazz);
jaxbElement.getValue();
但是,此代码无法处理TEXT_PLAIN或指定类的列表。