webservice soap脱离客户端代码单独http调试
2015-05-13 11:06
239 查看
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
或者
或者
此时,java进程中所有的http请求都会以fiddle作为代理,然后才进行下一步的请求,所以自然可以被fiddle拦截到了。
接下来,我们用java的cxf client进行webservice的调用,会在fiddle中看到请求已经被拦截。
记录下对应的url以及body体,接下来就可以直接用工具进行对应的http请求了。
除了用http请求工具直接请求之外,还可以结合之前的压力测试的代码,进行对应的接口的压力测试,而不需要依赖于cxf的序列化和反序列化。
分享下采用httpclient如何直接发送webservice请求:
目前需要对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)); } }
相关文章推荐
- WebService 服务端客户端 实例 HTTPRIO (一) SOAP WSDL
- 随便聊聊 SOA & SOAP & WebService 的一些东西,以及客户端开发的代码逻辑解析
- 随便聊聊 SOA & SOAP & WebService 的一些东西,以及客户端开发的代码逻辑解析
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- 随便聊聊 SOA & SOAP & WebService 的一些东西,以及客户端开发的代码逻辑解析
- Delphi 客户端调用Webservice 的TClientdataset 报出“http://www.borland.com/namespaces/Types-IAppServerSOAP”
- Webservice的wsdl文件解析与Soap消息的发送、接收(不生成java客户端代码)
- jdk6 webservice根据客户端代码编写和调试服务器端代码心得
- WebService 服务端客户端 实例 HTTPRIO (一) SOAP WSDL
- HttpURLConnection 直接发送soap消息调用webservice
- 采用spring,maven,xfire/cxf 实现SOAP的WebService,并用C#作为客户端调用
- WEB_网络_webservice-http-soap的异同_待
- java下http下载文件客户端 和上传文件客户端代码
- WebService发布与调用问题:expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://schemas.xmlsoap.org/wsdl/}def
- JAVA调用.NET的webservice异常服务器未能识别 HTTP头SOAPAction 的值
- 用MyEclipse自带工具生成WebService客户端代码
- webService验证客户端(HTTP Basic认证)
- 用WSAD工具生成WebService客户端代码
- TCP/IP、HTTP、WEBSERVICE、SOAP、ICE都使用后才有感慨
- 使用eclipse自带插件生产WebService客户端代码