周末继续学习jersey,测试了几个get和post方式的webservice请求,并模拟客户端测试调用情况。在google中找到了这么一篇相关的文章:
REST: CRUD with JAX-RS (Jersey) 。 结果做到一半出了问题,服务端总是获取不到客户端请求的数据流内容!调试了一个下午未果,却在第二天如梦方醒般的找到了原因。教训1:学习下http协议;教训2:老外的东西不一定是对的。
周末的测试主要还是基于jersey的webservice服务。对get和post两种方式发送请求的几种情况都做了简单的示例(上传文件的情况未测试,待续)。
service端:
客户端可以采用两种方式测试。
1,采用jersey实现的测试api:jersey-twitter-client-1.0-SNAPSHOT-jar-with-dependencies.jar
2,采用apache httpclient 模拟客户端的各种请求。
上面提到的参考e文中是采用的第二种方式。在这里我使用jersey测试api来实现。
过程中遇到的问题就是提交流的时候,错误的参考了e文中 “@Consumes
(
"application/xml"
) ”的请求类型! 结果导致service 端 接受请求的方法参数InputStream 得不到内容。换作@Context HttpServeltRequest request 参数也无济于事。于是在网上搜索,在一个国外论坛中有人提到相似的问题“上传文件得不到流里的内容,但是jetty里可以,tomcat里不可以。?”。好像没有太大参考,但我也试了下,还是失败。。。
今天修改提交类型注解为:@Consumes("application/x-www-form-urlencoded") ,测试通过!终于才恍然大悟:application/xml是客户端接受的内容类型。哎,是应该学习下http协议的相关知识,这样的问题耽误了大半天的时间!
另外,对于jax-ws中几个注解,简单总结下:
QueryParam--url ? 后面表示的参数 . get post 通用.
PathParam---url中的一部分,例如用{}表示的url中的一部分。get post 通用。
FormParam---post提交的form表单参数。 用于 post
( 其他几个param稍后再学习)。