1

我正在开发一个轻量级框架,用于编组和解组发送到 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 或指定类的列表。

4

0 回答 0