2017-04-06 3 views
0

オクラホマ - これは完全に簡単なはずですが、何らかの理由で - 私はそれを動作させることができません! ( - 本当に私は生、未フォーマット文字列としてそれを得る私はreadabiltyのためにそれをフォーマットしました)生のXML文字列をJavaオブジェクトのリストに変換しますか?

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class PlainOldJavaObject implements Serializable { 

    private long uuid; 
    private String name; 

    public PlainOldJavaObject() { 
    } 

    public long getUuid() { 
     return this.uuid; 
    } 

    public void setUuid(long uuid) { 
     this.uuid = uuid; 
    } 

    public String getNamen() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    /* Omitted HashCode & Equals for brevity. */ 
} 

そして、私は、XML次ていると言うことができます::

は、私は、次のPOJOを持って言うことができます

<PlainOldJavaObjects> 
    <PlainOldJavaObject> 
     <uuid>8119</uuid> 
     <name>Jimmy</name> 
    </PlainOldJavaObject> 
    <PlainOldJavaObject> 
     <uuid>2372</uuid> 
     <name>Johns</name> 
    </PlainOldJavaObject> 
</PlainOldJavaObjects> 

私はその地獄でどのようにXMLをListインスタンスに変えますか?

私はXStreamのを使用してみました - 次のように:

XStream xStream = new XStream(); 
List<PlainOldJavaObject> endResultHopefully = (List<PlainOldJavaObject>) xStream.fromXML(result); 

しかし、一見、私の端末に次の印刷されないものをすべて...私はここで間違って

PlainOldJavaObjects : PlainOldJavaObjects 

一体何をやっていますか?

注:これをグーグルFROM BECAUSE JAXBのタグを追加 - 私はこれが存在していることを見て、私はそれは私が欲しいものであるかもしれない引き受ける - しかし、私はわからない、多分そのコミュニティの誰かOVERも私のためにいくつかのガイダンスがあるかもしれません?

+0

使用JAXB。これがそうです。 – Rob

+0

jaxbをリストに使用する例は、リストが内部にあるラッパークラスを記述することなく見つけることができません。これは私がこのプロジェクトに変革をもたらすことができるものではありません。 – MickeyThreeSheds

+1

jaxbモデルは、各要素(実際に複合型)をJavaクラスにマップするため、 "PlainOldJavaObjects"要素にクラスが必要なのはこのためです。私の意見では、jaxbを使用する最良の方法は、XSDをXSDから外してコンパイル時にすべてのポーズを生成することです(すべての必要な注釈を使用して)。これは、保守するコードが大幅に少なく、コードパターンは使い慣れています。もしあなたがXMLを使っているなら、Jaxbは間違いなく道のりです。その "力"をどうやって納得させるかは分かりません。幸いです。 – Rob

答えて

0

XStreamを使用して、@ XStreamImplicitを使用してPlainOldJavaObjectのリストを含むPlainOldJavaObjectsクラスでクラスをラップします。 例を示します。まず、結果をテストするためにPlainOldJavaObject

@XStreamAlias("PlainOldJavaObjects") 
public class PlainOldJavaObjects 
{ 

    @XStreamImplicit 
    private List<PlainOldJavaObject> pojoList = new 
ArrayList<PlainOldJavaObject>(); 

    public void addPojo(final PlainOldJavaObject pojo) 
    { 
     pojoList.add(pojo); 
    } 

    public List<PlainOldJavaObject> getList() 
    { 
     return pojoList; 
    } 
} 

クラスのリストに@XStreamImplicitを追加するには、PlainOldJavaObjectクラスに

@XStreamAlias("PlainOldJavaObject") 
public class PlainOldJavaObject implements Serializable 
{ 

    private long uuid; 
    private String name; 


    public PlainOldJavaObject() 
    { 
    } 


    public long getUuid() 
    { 
     return this.uuid; 
    } 

    public void setUuid(long uuid) 
    { 
     this.uuid = uuid; 
    } 

    public String getNamen() 
    { 
     return this.name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 
} 

を注釈を追加します。最初に結果のxmlを文字列に書き出します。次に、Stringを使用して必要なリストを作成します。 XMLから

public class TestXML 
{ 

    @Test 
    public void testXML() 
    { 
     PlainOldJavaObjects pojos = new PlainOldJavaObjects(); 

     PlainOldJavaObject pojo = new PlainOldJavaObject(); 

     pojo.setName("Jimmy"); 
     pojo.setUuid(8119); 

     pojos.addPojo(pojo); 

     PlainOldJavaObject pojo2 = new PlainOldJavaObject(); 
     pojo2.setName("Johns"); 
     pojo2.setUuid(2372); 

     pojos.addPojo(pojo2); 

     XStream xstream = new XStream(); 
     xstream.processAnnotations(PlainOldJavaObjects.class); 
     xstream.processAnnotations(PlainOldJavaObject.class); 

     String xml = xstream.toXML(pojos); 
     System.out.println(xml); 

     PlainOldJavaObjects pojos2 = (PlainOldJavaObjects) 
xstream.fromXML(xml); 

     // list with two PlainOldJavaObject 
     assertEquals(2, pojos2.getList().size()); 
    } 
} 

出力:

<PlainOldJavaObjects> 
    <PlainOldJavaObject> 
    <uuid>8119</uuid> 
    <name>Jimmy</name> 
    </PlainOldJavaObject> 
    <PlainOldJavaObject> 
    <uuid>2372</uuid> 
    <name>Johns</name> 
    </PlainOldJavaObject> 
</PlainOldJavaObjects> 
関連する問題