WebServices中SOAP消息的查看
1. 在学习WebServices时,经常想知道服务端与客户端之间传递的SOAP消息到底是怎样的,慢慢的找到了2种方式来查看SOAP消息。
2. 测试环境:Tomcat、Axis1.4、HelloWorld服务端
3. WebserviceStudio可以很方便的查看一个webservices,然后可以手工传递参数,点击invoke按钮,可以查看请求、响应的SOAP消息。
优点:可以很方便的对webservice做一些简单的测试,并查看SOAP消息的内容。
缺点:手工输入的参数只能是数字或者字符串,不能是复杂的数据类型;因为它只能单独的作为一个工具使用,而不能跟应用程序结合,所以它不能实时监控webservice的每次请求、响应的SOAP消息内容。
4. Axis中可以使用SOAPMonitor来监控webservice每次被请求时的SOAP消息的内容。
(1) Axis在网页中使用Applet形式显示页面的,需要去到axis目录下,编译SOAPMonitorApplet.java文件
javac -classpath %AXIS_HOME%\lib\axis.jar SOAPMonitorApplet.java
将生成的.class文件(7个)放在axis的根目录下。
(2) 将Axis自带的SOAPMonitorService服务发送到Axis中,编写一个部署文件deploy_monitor.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"> <parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/> <parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/> <parameter name="serviceName" value="SOAPMonitorService"/> <parameter name="portName" value="Demo"/> </handler> <service name="SOAPMonitorService" provider="java:RPC"> <parameter name="allowedMethods" value="publishMessage"/> <parameter name="className" value="org.apache.axis.monitor.SOAPMonitorService"/> <parameter name="scope" value="Application"/> </service> </deployment> |
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy_monitor.wsdd –p 8088
(3) 在HelloWorld这个服务的部署描述文件中,添加上面的soapmonitor这个Handler,并重新部署到Axis中
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWorld" provider="java:RPC"> <parameter name="className" value="cn.koma.service.HelloWorld" /> <parameter name="allowedMethods" value="*" /> <parameter name="scope" value="application" /> <requestFlow> <handler type="soapmonitor"/> </requestFlow> <responseFlow> <handler type="soapmonitor"/> </responseFlow> </service> </deployment> |
(4) 在浏览器中打开SOAPMonitor的监控页面
http://localhost:8088/axis/SOAPMonitor
(5) 编写访问WebService的客户端,并执行它。
import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class TestAxis { public static void main(String[] args) { try { // 请求的webservice地址 String endpoint = "http://localhost:8088/axis/services/HelloWorld"; Service service = new Service(); Call call = (Call)service.createCall(); call.setTargetEndpointAddress(endpoint); // 请求的方法名 call.setOperationName(new QName("http://service.koma.cn", "sayHello")); // 传递参数、执行请求操作,并返回结果 String rtnMsg = (String)call.invoke(new Object[]{"test"}); System.out.println(rtnMsg); } catch (Exception e){e.printStackTrace();} } } |
(6) 查看浏览器监控页面中,请求的SOAP消息内容
优点:可以监控每一个请求,程序中可以传递很复杂的参数类型。
缺点:初学者可能会觉得部署有些困难,不过去看看axis的文档或者去网上找一下资料,很快就可以部署成功。
5.