2016-12-06 2 views
0

JAXBおよびオブジェクトのリストで作業している問題があります。 JAXBは、クラス構造は、私は次のように私はJavaのビジネス・オブジェクト・モデルを持っているのArrayListArrayListを使用しているときにJAXB XML構造が無効です

を使用する場所で、多くのXML構造をしません春4 で開発されたREST APIからのマーシャル/アンマーシャリングXMLSに使用されます。
クライアント:

@XmlRootElement(name="client") 
public class Client { 
@XmlElement 
public Integer age = Integer.valueOf(0); 

public Client() { 
    super(); 
} 
} 

オファー(ルート要素):

@XmlRootElement 
@XmlSeeAlso(Client.class) 
public class Offer { 
@XmlElement 
public ArrayList<Client> clients = new ArrayList<Client>(); 
public Boolean decission = Boolean.FALSE; 

public Offer() { 
    super(); 
} 
} 

そして、アンマーシャラー:

public static Offern unmarshalXMLOffer(String httpMessage) throws Exception{ 
    logger.debug("unmarshal: receved data to unmarshal: " + httpMessage); 
    JAXBContext jaxbContext = JAXBContext.newInstance(Offer.class, Client.class); 
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    StringReader reader = new StringReader(httpMessage); 
    Offer ca = (Offer)jaxbUnmarshaller.unmarshal(reader); 
    return ca; 
} 

問題:私は送っ

<Offer> 
    <clients> 
    <client> 
     <age>21</age> 
    </client> 
    </clients> 
    <decission>false</decission> 
</Offer> 

私が得た:Offer.Client.age = 0
が、私はこれをアンマーシャラーする送信する場合:

<Offer> 
    <clients> 
     <age>21</age> 
    </clients> 
    <decission>false</decission> 
</Offer> 

I得られた:Offer.Client.age = 21 - 正しい値。

私の最高の知識といくつかのJAXBの経験によると、私はいくつかのことをしました:

  • 私は注釈XMLSeeAlso
  • クライアントリストの

    作られたカスタムラッパークラス

    @XmlRootElement @XmlAccessorTypeを使用しようとしました(XmlAccessType.FIELD) @XmlSeeAlso(Client.class) パブリッククラスClientsXMLWrapper { @XmlElement(name = "clients") p rivate Listクライアント。

    public ClientsXMLWrapper(){ 
    
    } 
    
    public ClientsXMLWrapper(List<Client> clientsList){ 
        clients = clientsList; 
    } 
    
    public List<Client> getClients() { 
        return clients; 
    } 
    public void setClients(List<Client> clients) { 
        this.clients = clients; 
    } 
    

    }

  • 私は異なるJAXBの初期化:

    1. たJAXBContextたJAXBContext = JAXBContext.newInstance(Offer.class、Client.class、ClientsXMLWrapper.class)。 (JAXBContext)。 (JAXBContext)。

これまで何も役に立たなかった。あなたはその問題を解決するのを助けてくれますか? KOch。

答えて

1

試してみてください。

@XmlElementWrapper(name="clients") 
@XmlElement(name="client") 
public ArrayList<Client> clients = new ArrayList<Client>(); 
完璧に動作します
+0

。問題は解決しました。ありがとう – KOch

関連する問題