webservice soap脱离客户端代码单独http调试
? ? webservice soap的实现序列化方式默认也是最通用的是采用xml进行序列化以及http协议进行传输的,也就是文本协议传输调用,这样给了我们脱离客户端代码用工具进行调试或者用HttpClient的代码进行各种测试的方便。 ? ? 目前需要对webservice soap的server端进行压力测试,然而,每次java这边测试的时候都要启动cxf进行对象的序列化和调用,非常损耗客户端机器的性能,不利于对服务端的压力测试,因此我对其传输的body单独提取出来,采用httpclient进行发送请求。 ? ? 此次我们需要借助fiddler这个http调试的神器,关于fiddler的使用,这里就不阐述了,只是对本次使用的过程描述一下。 ? ? 由于java的http调用好像绕过了fiddler的监听,所以要用fiddler进行java 的http请求的拦截,只能够采用代理的方式,在fiddle开启代理服务器模式。然后在java的应用程序中加入以下的jvm启动参数: -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888? ?此时,java进程中所有的http请求都会以fiddle作为代理,然后才进行下一步的请求,所以自然可以被fiddle拦截到了。 ? ?接下来,我们用java的cxf client进行webservice的调用,会在fiddle中看到请求已经被拦截。 ? ? 记录下对应的url以及body体,接下来就可以直接用工具进行对应的http请求了。 ? ? 除了用http请求工具直接请求之外,还可以结合之前的压力测试的代码,进行对应的接口的压力测试,而不需要依赖于cxf的序列化和反序列化。 ? ? 分享下采用httpclient如何直接发送webservice请求: ? ?? import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.io.IOException; /** * Created with IntelliJ IDEA. * User: lsz * Date: 2015/5/13 0013 * Time: 上午 9:47 * request body */ public class HttpRequest { public static String requestBody(String url,String body) throws IOException { HttpClient client = HttpClients.createDefault(); HttpPost post = new HttpPost(url); StringEntity entity = new StringEntity(body); post.setEntity(entity); HttpResponse response = client.execute(post); return EntityUtils.toString(response.getEntity()); } public static void main(String[] args) throws IOException { String url ="http://192.168.5.18:8723/helloService"; String body = "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:getBean xmlns:ns2="http://api.service.youboy.com/"/></soap:Body></soap:Envelope>"; System.out.println(requestBody(url,body)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- [知了堂学习笔记]_记一次BootStrap的使用
- twitter-bootstrap – 如何在Bootstrap中执行数学符号
- Angular controller调用factory
- angularjs – 从本地预加载(JST)模板缓存加载ng-include部分
- 在Vim中使用gg = G可以在修改tabstop时自动标记文档
- bootstrap-multiselect级联显示下拉框
- bash – rsync:–include-from vs. –exclude – 从什么是
- angularjs – 元素在点(215,251)错误时无法点击
- shell判断语法
- twitter-bootstrap – 可以阻止bootstrap模式吗?