我正在开发一个轻量级框架,用于编组和解组发送到 jaxrs 服务和从 jaxrs 服务接收的数据。我正在使用 jaxb 编组器和解组器。
使用该服务时,我注意到它能够通过将实体列表包装到带有类名的标签中,然后在末尾加上“s”来编组实体列表。所以 a<customer>
会被包裹起来<customers>
。这是特定于实现的东西,还是在 jaxrs 规范中?
此外,在创建 jaxrs 服务时,您可以指定它使用和生成的 MediaType,如下所示:
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
您还可以指定MediaType.TEXT_PLAIN
在返回 String、Long 等时在服务器上使用哪个。
我想执行与服务器端发生的完全相反的操作。即解组服务已编组的内容,并以服务能够解组的方式编组数据。目前我有这个代码:
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 或指定类的列表。