2

私は、wsdl ファイルが生成される jax-ws での作業に慣れており、maven プラグインを使用して、この wsdl ファイルとその xsd(s) に基づいてクライアントを生成できます。at では、このクライアントを使用するのは簡単です。また、マーシャリングや http 転送など、バックグラウンドで何が起こっているかを実際に考える必要もありません。

現在、jaxb を使用してオブジェクトを非整列化する jax-rs プロジェクトに取り組んでいます。そこにあるメソッドの 1 つは文字列のリストを返しますが、jaxb は this をマーシャリングする方法を知らないようです。これは、エンティティ (例: 顧客) のリストをマーシャリングする方法を知っているため、ちょっと驚くべきことです。

また、jax-rs サービスのクライアントを独自に作成し、http 応答と jaxb を使用したペイロードのアンマーシャリングの両方を処理しました。jaxb を使用したマーシャリングとアンマーシャリングは、コンテキストに追加されたエンティティのリストを自動的にマーシャリングまたはアンマーシャリングできないため、文字列のリストはさらに少ないため、非常に面倒です。

安らかなWebサービスを使用して、これらすべてを無料で入手するためのきちんとした方法があるかどうか知りたいですか? これは非常に軽量である必要があり、クライアントは簡単に配布できる必要があります。

ありがとう!ルナル

jaxrs と jaxb を使用して機能しないサービス メソッド:

@GET
@Path("/{customerId}")
@Produces(MediaType.APPLICATION_XML)
public List<String> isCustomerLocked(@PathParam("customerId") Long customerId) {


}

テキスト ペイロードのマーシャリング/アンマーシャリングを試行するクライアント コード。表示されていない jaxbcontext に追加されたクラス:

javax.xml.bind.Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(obj, stringwriter)

javax.xml.bind.Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.unmarshal(inputstream)
4

1 に答える 1

5

JAXBを使用してデータをラップします。単純な場合、List<String>これはやり過ぎに見えるかもしれません。ただし、ほとんどの場合、単純なオブジェクトではなく、リソース表現をアン/マーシャルする必要があります。

注意:RESTはRPCではありません!

本当にtomun-/ marshallが必要な場合はList<String>、JAX-RSプロバイダーを作成してください。しかし、私はJAXBを使用したいと思います。

S.java

@XmlRootElement
public class S {

    private String s;

    public S() {
    }

    public S(String s) {
        this.s = s;
    }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}

Ss.java

@XmlRootElement(name="ss-wrapper")
public class Ss {

    private List<S> ss;

    public List<S> getSs() {
        return ss;
    }

    public void setSs(List<S> ss) {
        this.ss = ss;
    }

    public Ss(List<S> ss) {
        this.ss = ss;
    }

    public Ss() {
    }
}

JAX-RSクラス

@Path("/strings")
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getListOfStrings() {
    S s1 = new S("foo");
    S s2 = new S("bar");
    List<S> strings = new ArrayList<S>();
    strings.add(s1);
    strings.add(s2);
    Ss ss = new Ss(strings);
    return Response.ok(ss).build();
}

XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ss-wrapper>
  <ss>
    <s>foo</s>
  </ss>
  <ss>
    <s>bar</s>
  </ss>
</ss-wrapper>
于 2012-10-25T13:10:32.470 に答える