3

私のアプリケーションでは、HTTP 経由でいくつかの API を使用し、応答を xml として返します。xml から Bean にデータを自動的にバインドしたい。

たとえば、次の xml をバインドします。

<xml>
   <userid>123456</userid>
   <uuid>123456</uuid>
</xml>

この Bean に (おそらく注釈の助けを借りて)

class APIResponce implement Serializable{

private Integer userid;
private Integer uuid;
....
}

これを行う最も簡単な方法は何ですか?

4

4 に答える 4

5

JAXB の使用に同意します。JAXB は仕様であるため、複数の実装から選択できます。

JAXBでそれを行う方法は次のとおりです。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class APIResponce {

    private Integer userid; 
    private Integer uuid; 

}

次の Demo クラスで使用する場合:

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(APIResponce.class);

        File xml = new File("input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        APIResponce api = (APIResponce) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(api, System.out);
    }
}

次の XML が生成されます。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
    <userid>123456</userid>
    <uuid>123456</uuid>
</xml>
于 2010-09-16T19:19:42.920 に答える
4

JAXBを試す-http ://jaxb.java.net/

その紹介記事http://www.javaworld.com/javaworld/jw-06-2006/jw-0626-jaxb.html

于 2010-09-16T18:32:19.897 に答える
1

これまで、私はXMLBeansを使用して XML を Java 型にバインドしていました。使い方はとても簡単です。scomp最初に、コマンド (または maven プラグインなど) を使用して xml スキーマを Java 型にコンパイルし、コードでその型を使用する必要があります。

動作中のコードの例がここにあります。

于 2010-09-16T20:15:19.053 に答える
1

Castor と JAXB の代替として、Apache には XML からオブジェクトへのバインディングを行うためのプロジェクトもあります。

Betwixt: http://commons.apache.org/betwixt/

于 2010-09-16T18:50:50.680 に答える