私は、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 または指定されたクラスのリストを処理できません。