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の初期化:
- たJAXBContextたJAXBContext = JAXBContext.newInstance(Offer.class、Client.class、ClientsXMLWrapper.class)。 (JAXBContext)。 (JAXBContext)。
これまで何も役に立たなかった。あなたはその問題を解決するのを助けてくれますか? KOch。
。問題は解決しました。ありがとう – KOch