2

我有我的资源,它们是处理 POST 请求的典型重写方法。

public void acceptRepresentation(Representation rep) {

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

我想知道的是处理我的 XML 数据包的最佳实践。我看到很多使用 Form 的例子——但肯定有一种方法可以使用 Representation 对象本身或将其转换为一些有用的 XML 对象???

非常感谢您对如何解析资源中的传入 XML 的任何帮助。

4

5 回答 5

3

这更像是我正在寻找的那种回应。感谢Thierry Boileau的回答:

您可以使用两种“XML 表示”:DomRepresentation 和 SaxRepresentation。您可以使用发布的表示来实例化它们。例如:DomRepresentation xmlRep = new DomRepresentation(rep);

DomRepresentation 使您可以访问 Dom 文档。SaxRepresentation 允许您使用自己的 contentHandler 解析 XML 文档。请参阅此处 1 和此处 2 的 javadocs。

  1. http://www.restlet.org/documentation/1.1/api/org/restlet/res​ource/DomRepresentat​ion.html

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

于 2009-01-14T15:24:01.967 回答
1

我们目前使用 RESTeasy 执行此操作,这是一种替代的 JAX-RS 实现。我们使用 JAXB 绑定(注释)在 XML 和我们的模型 POJO 之间进行映射,并为 JAX-RS 指定一个JAXB 提供程序,以便它知道如何操作。这在我们的带有 RESTEasy (JAX-RS) 的 Java EE 中的 RESTful Web 服务一文中进行了描述,这可能会有所帮助。

更新:对于 Restlet,JAXB 扩展可能是您所需要的。

于 2009-01-13T22:06:42.467 回答
0

通过该representation.getText()方法,您可以获得一个可以输入到 SAX 解析器或 dom 读取器的字符串。

于 2009-01-13T22:05:46.447 回答
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 而不是替代实现,因为 JAX-RS 将成为即将到来的Java EE 6的一部分

于 2009-04-09T17:06:46.663 回答
0

即使在restlet 2.0中,这也是相同的程序吗?

我使用restlet 2.0m6,这是我使用的代码片段 -

@邮政

公共代表过程(代表实体)

{

尝试

{

DomRepresentation dom = new DomRepresentation(entity);

文档 d = dom.getDocument();

.

.

} 捕捉(异常 e)

{ e.printStackTrace(); }

它会在 dom.getDocument() 行引发空指针异常。这意味着实际上没有数据到达。

我的弹性位看起来像这样 - var service : HTTPService = new HTTPService(); service.method="POST"; service.contentType="应用程序/xml" service.url=url; var token :AsyncToken = service.send(params);

其中 params 是一个 XML 对象。

于 2010-01-07T14:19:16.177 回答