3

アップデート

残りの質問がありますが、RESTfulな通信をほぼ完了することができました。

1-XMLを接続に割り当てるにはどうすればよいですか(以下のコードは私の状況の例を示しています)?

Webサービスの呼び出し

public Person getByAccount(Account account) {   
    URL url = new URL(uri);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    connection.setRequestProperty("Accept", "application/xml");

    XStream xstream = new XStream();
    String xmlIn = xstream.toXML(account);

    // Put the xmlIn into the connection

    BufferedReader br = new BufferedReader(new InputStreamReader(
        (connection.getInputStream())));

    StringBuilder sb = new StringBuilder();
    String line;
    while((line = br.readLine()) != null)
        sb.append(line);
    String xmlOut = sb.toString();

    connection.disconnect();
    return (Person) xstream.fromXML(xmlOut);
}

2-最後のコード例(Webサービス)を考慮すると、以下のクラスは有効なXML出力になりますか?

RESTfulを使用して送信するクラス

@XmlRootElement(name="people")
public class People {
    @XmlElement(name="person")
    public List<Person> people;

    public People() {
        people.add(new Person(1, "Jan"));
        people.add(new Person(2, "Hans"));
        people.add(new Person(3, "Sjaak"));
    }

    public List<Person> all() {
        return people;
    }

    public Person byName(String name) {
        for(Person person : people)
            if(person.name.equals(name))
                return person;

        return null;
    }

    public void add(Person person) {
        people.add(person);
    }

    public Person update(Person person) {
        for(int i = 0; i < people.size(); i++)
            if(person.id == people.get(i).id) {
                people.set(i, person);
                return person;
            }

        return null;
    }

    public void remove(Person person) {
        people.remove(person);
    }
}

ウェブサービス

@GET
@Path("/byAccount")
@Consumes("application/xml")
@Produces("application/xml")
public Person getByAccount(Account account) {
    // business logic
    return person;
}
4

3 に答える 3

4

これを試して:

conn.setDoOutput(true);
OutputStream output = conn.getOutputStream();
// And write your xml to output stream.

標準でRESTを使用するには、次のリンクを確認してください:http URL: //rest.elkstein.org/2008/02/using-rest-in-java.html

編集

まず、getByAccountリクエストをPOSTリクエストに変更する必要があります。リクエストGETでは本文に情報を渡すことができないため、URLのリクエストパラメータのみが使用されます。ただし、XMLを送信するため、を使用しますPOST

次のバージョンのsendメソッドを試してください。

public Person getByAccount(Account account) {   
    URL url = new URL(uri);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Accept", "application/xml");
    connection.setOutput(true);

    XStream xstream = new XStream();
    xstream.toXML(account, connection.getOutputStream());

    Person person = (Person) xstream.fromXML(connection.getInputStream());   
    connection.disconnect();
    return person;
}
于 2012-06-03T09:46:03.890 に答える
1

最も十分な呼び出しには、 Jersey Client APIもう1つのリンク)を使用できます。

于 2012-06-03T09:48:54.647 に答える
0

Spring3を試すことができますRestTemplate。始めるのは非常に簡単で、非常に強力です。

詳細はこちら: http: //blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/

http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/client/RestTemplate.html

http://www.baeldung.com/2012/04/16/how-to-use-resttemplate-with-basic-authentication-in-spring-3-1/

于 2012-06-03T09:53:19.003 に答える