【问题标题】:how to consume XML in a REST WebService?如何在 REST WebService 中使用 XML?
【发布时间】:2014-03-04 15:41:51
【问题描述】:


我有一个 HTML 表单,它使用 textarea 字段提交 XML:

 <form  action="rest" method="POST">
   <textarea name="xml" rows="10" cols="30" ></textarea>
   <input type="submit" value="Invoke REST">
 </form>

现在我想在 REST Web 服务中使用 XML(我使用的是 Java EE 7 和 WildFly CR1)。 我试过使用:

 @POST
 @Consumes(MediaType.APPLICATION_XML) 
 public Response createItemFromXML(@FormParam("xml") Customer c) {

     ejb.addToList(c);

     return Response.ok("Created customer ").build();

}

这会导致 java.lang.RuntimeException:无法在公共 javax.ws.rs.core.Response 上找到为 javax.ws.rs.FormParam("xml") 采用 String 参数或 valueOf() 或 fromString() 方法的构造函数com.sample.SimpleRESTService.createItemFromXML(com.sample.Customer) for basetype: com.sample.SimpleProperty

我必须使用 Stream 作为表单参数(并手动转换为 XML)还是有更简单的方法?

编辑: 我也尝试过:

  @POST
  @Consumes(MediaType.APPLICATION_XML)
  public Response createPropertyFromXml(  Customer c) {

   ejb.addToList(c);
   return Response.ok("Created customer " + n).build(); 
 } 

但是现在的错误是:javax.ws.rs.NotSupportedException:无法使用内容类型 似乎它不能自动从表单字段转换为 XML.... 谢谢

【问题讨论】:

    标签: xml web-services rest jakarta-ee jboss7.x


    【解决方案1】:

    AFAIK,您应该将c 参数设置为字符串,然后在您的createItemFromXML 方法中解析它,或者您可以删除方法参数上的@FormParam 注释并在您的方法上使用JAXB 注释Customer 班级。在后一种情况下,Wildfly 的底层 JAX-RS 实现会将传入的 XML 请求正文转换为 Customer 的实例。

    【讨论】:

    • 谢谢,我已经编辑了问题,但我仍然无法自动转换传入的 XML
    • 您是否在Customer 类型上添加了JAXB 注释?此外,您可能希望对 JAXB 编组/解组进行单元测试,以确保 XML Customer 即使在 Wildfly 容器之外也能正常工作。
    • 我在类的顶部添加了一个@XMLRootElement。我认为这是编组它的最低要求.....
    • 客户端发送什么内容类型?嗬!如果是表单帖子,则可能是application/x-www-form-urlencoded。在这种情况下,您必须将 XML 客户检索为 @FormParam String。否则,您可以使用 javascript(例如:jQuery)使用 application/json 提交 POST 请求(即使 JSON 文档中的一个元素是 XML)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2013-06-22
    • 1970-01-01
    • 2017-03-13
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多