如何在REST WebService中使用XML?

时间:2014-02-07 09:42:32

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


我有一个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):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 .... 感谢

1 个答案:

答案 0 :(得分:0)

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