2016-04-27 11 views
0

私はElasticSearchを使用して、オブジェクト、トラック、およびトレースモデルで発生しているイベントに関するいくつかのデータを保存しています。そのために、XSDファイルを使用してモデルクラスを生成するためにJAXBを使用しました。 データを簡単に変換するESにデータを保存することができます。データのデータはXML形式でPOJOに渡され、その後はJSONに渡されます。 私が持っている問題は、データを取り戻すことです。私は、Webサービス上でPOJO(JAXBを使用)とPOJOをXMLに同じロジックJSONを使用しようとしています。そのような:JAXBを使用してJSONをPOJOに変換する

JAXBContext jc = JAXBContext.newInstance(EPCISDocumentType.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller(); 
unmarshaller.setProperty("eclipselink.media-type", "application/json"); 
unmarshaller.setProperty("eclipselink.json.include-root", true); 
String eventJSON = elasticEvent.getSpecific("event", "raw", eventID); 

文字列は、予想されるイベントが付属していますが、私はPOJOに変換しようとすると、オブジェクトは、最も外側のクラス(EPCISDocumentType)とが、0の内容でのみ付属しています。

StreamSource eventStream = new StreamSource(new StringReader(eventJSON)); 
EPCISDocumentType foundEvent = unmarshaller.unmarshal(eventStream,EPCISDocumentType.class).getValue(); 

問題は、これは、 - 私は元帥を行うにはまったく同じライブラリを使用して起こっている理由ですが、私は戻って同じコンテンツにそれを非整列化can't: - 私はそのようにしよう。

答えて

0

マーシャリングとアンマーシャリングの両方にObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)を使用します。それははるかに使いやすいです。 下記参照:

ObjectMapper mapper = new ObjectMapper(); 
//Get the json as String 
String objectAsJsonString= mapper.writeValueAsString(foundEvent); 
//Create the object from the String 
EPCISDocumentType foundEvent = mapper.readValue(objectAsJsonString,EPCISDocumentType.class); 

あなたが/アンマーシャリングマーシャリングするオブジェクトのリストを持っている場合、それはあなたがラッパーにリストを置く場合にのみ機能します。

また、jacksonはjaxbよりも優れています。 これらのテストを確認してください:http://tuhrig.de/jaxb-vs-gson-and-jackson/

関連する問題