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启动参数:

-Dhttp.proxyHost=localhost  -Dhttp.proxyPort=8888

  或者

-DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888

   或者

        System.setProperty("http.proxyHost", "localhost");
        System.setProperty("http.proxyPort", "8888");
        System.setProperty("https.proxyHost", "localhost");
        System.setProperty("https.proxyPort", "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));
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值