JAXB,REST将XML对象发送到远程URL

时间:2014-06-16 18:54:55

标签: java xml web-services rest jaxb

那里似乎有很多版本。这就是我在做的事情。我有一个RESTful Web服务,我正在尝试将Java对象编组到JAXB中并通过网络将其发送到Web服务。这是我的客户端代码

 private static void performPost(JAXBObject obj) {
     String url ="http://www.example.com/test?xml=";


     HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
     urlConnection.setRequestMethod("POST");
     urlConnection.setDoOutput(true);
     urlConnection.setRequestProperty("accept-charset", charset);
     urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
     urlConnection.setRequestProperty("accept", jsonContentType);

     JAXBContext jaxbContext = JAXBContext.newInstance(JAXBObject.class);
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
     jaxbMarshaller.marshal(obj, urlConnection.getOutputStream());  
     int rspCode = urlConnection.getResponseCode();
     ...
 }

网络服务代码是

@POST   
@Produces("application/json")
@Path("test")
public String doIt(@QueryParam("xml") String str) {
    int ret = doSomething(str);
    return new Gson().toJson(ret);
}

程序正在达到doIt,但String str中没有任何内容。 我做错了什么?

1 个答案:

答案 0 :(得分:4)

您问题中的代码是将XML作为消息发送,但是尝试将其作为查询参数接收。如果您要将XML作为消息发送,则str参数不应使用@QueryParam进行注释。查询参数是在?之后出现的URL的一部分? (即http://www.example.com/foo/bar?limit=25limit是查询参数)。您正在尝试捕获不需要注释的XML消息正文。