1

私は、jaxrs サービスとの間で送受信されるデータをマーシャリングおよびアンマーシャリングするための軽量フレームワークに取り組んでいます。jaxb マーシャラーとアンマーシャラーを使用しています。

このサービスを使用すると、エンティティのリストを、クラス名と最後に「s」を使用してタグにラップすることで、エンティティのリストをマーシャリングできることに気付きました。したがって、 a<customer>は でラップされ<customers>ます。これは実装固有のものですか、それとも jaxrs 仕様ですか?

また、jaxrs サービスを作成するときは、次のように、それが消費および生成する MediaType を指定します。

@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)

MediaType.TEXT_PLAINString、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