2

私は自分のリソースを持っており、それらは POST リクエストを処理するための典型的なオーバーライドされたメソッドです。

public void acceptRepresentation(Representation rep) {

  if (MediaType.APPLICATION_XML.equals(rep.getMediaType())) {
      //Do stuff here
  }
  else {
      //complain!
  }
}

私が知りたいのは、XML のパケットを処理するためのベスト プラクティスです。フォームを使用した例をたくさん見ましたが、Representation オブジェクト自体を操作したり、便利な XML オブジェクトにキャストしたりする方法は確かにあります。

リソース内の着信 XML を解析する方法と解析方法についてのヘルプは大歓迎です。

4

5 に答える 5

3

これは、私が探していた種類の応答です。答えてくれたThierry Boileauに感謝します:

DomRepresentation と SaxRepresentation の 2 種類の「XML 表現」を使用できます。ポストされた表現でそれらの両方をインスタンス化できます。例: DomRepresentation xmlRep = new DomRepresentation(rep);

DomRepresentation を使用すると、Dom ドキュメントにアクセスできます。SaxRepresentation を使用すると、独自の contentHandler で XML ドキュメントを解析できます。ここ 1 とここ 2 の Javadoc を参照してください。

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res ource/DomRepresentation.html

  2. http://www.restlet.o rg/documentation/1.1 /api/org/restlet/res ource/SaxRepresentation.html

于 2009-01-14T15:24:01.967 に答える
1

現在、代替の JAX-RS 実装である RESTeasy を使用してこれを行っています。JAXB バインディング (アノテーション) を使用して XML とモデル POJO をマッピングし、JAXB プロバイダーを JAX-RS に指定して方法を認識します。これについては、RESTEasy を使用した Java EE の RESTful Web サービス (JAX-RS) の記事で説明されており、役立つ場合があります。

更新: Restlet の場合、JAXB 拡張機能が必要になる場合があります。

于 2009-01-13T22:06:42.467 に答える
0

@サイモンE

わかりません: Java のどの REST 実装を使用していますか?

そこで、JAX-RS (Jersey 実装) の使用例を示します。

サーバー部分(いくつかの REST クラスのメソッド):

@POST
@Path("/upload")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public static Response upload(
        @FormParam("name") String name,
        @FormParam("content") String content)
        throws Exception {

    // NOTE: you get your content as String
    // (do something here)

    return Response.ok().build();
}

クライアント部分(一部の JUnit テストの方法):

@Test
public void uploadFile()
        throws Exception {

    String address = "http://0.0.0.0:8000/r/upload";

    WebResource r = Client.create().resource(address);
    Form form = new Form();
    form.add("name", "test");
    form.add("content", "SOME CONTENT GOES HERE");
    String s = r.post(String.class, form);

    System.out.println(s);
}

それでおしまい !!!

インポートに問題がある場合:
サーバーには javax.ws.rs.* と javax.ws.rs.core.*
が必要です クライアントには com.sun.jersey.api.client.* と com.sun.jersey.api.representation が必要です.*

いずれにしても、JAX-RS は次期Java EE 6の一部になるため、代替実装ではなく JAX-RS を使用するようアドバイスします。

于 2009-04-09T17:06:46.663 に答える
0

メソッドを介してrepresentation.getText()、SAX パーサーまたは dom リーダーにフィードできる String を取得できます。

于 2009-01-13T22:05:46.447 に答える
0

これはrestlet 2.0でも同じ手順ですか??

私はrestlet 2.0m6を使用しています。これが私が使用するコードスニペットです-

@役職

公的な代理プロセス(代理エンティティ)

{

試す

{

DomRepresentation dom = 新しい DomRepresentation(エンティティ);

ドキュメント d = dom.getDocument();

.

.

キャッチ(例外e)

{ e.printStackTrace(); }

そして、dom.getDocument() 行で Null Pointer 例外をスローします。これは、実際にデータが到着していないことを意味します。

そして、私のフレックスビットは次のようになります - var service : HTTPService = new HTTPService(); service.method="POST"; service.contentType="アプリケーション/xml" service.url=url; var トークン :AsyncToken = service.send(params);

ここで、params は XML オブジェクトです。

于 2010-01-07T14:19:16.177 に答える