根据WebService学习笔记系列(二)中的介绍,使用tcpmon可以捕获到我们发出或者接收到的xml内容,接天我们就对这些xml内容做一个简单的分析。还记得在WebService学习笔记系列(四)中我们详细介绍过服务器端程序的编写,本文的服务端程序依然沿用其中的服务端代码,但是系列(四)对于接口上的注解并没有详细的解释,今天先来看看接口上的注解有什么作用。

@WebService
public interface IMyServer { @WebResult(name="addResult")
public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
public int minus(int a,int b);
}

上面这一段代码是我们在服务器端定义的一个接口,实现了这个接口的类就可以被发布,供其他人调用。这个接口中一共有两个方法,一个是add,一个是minus,这两个方法的不同就是add方法上添加了@WebResult(name=”addResult”)注解,add的参数之前添加了@WebParam(name=”a”)注解,而minus上没有添加任何注解,我们来看看添加了注解的方法和没添加注解的方法有什么不同。

public class MyFirstClient {

    public static void main(String[] args) {
IMyServer myServerImpl = new MyServerImplService()
.getMyServerImplPort();
System.out.println(myServerImpl.add(3, 4)+"------");
myServerImpl.minus(7, 1);
}
}

这是一段客户端调用服务端的代码,具体调用方式见这里。客户端分别调用了服务器端两个方法,一个是add方法,另一个是minus方法,我们来看看tcpmon捕获的结果(tcpmon使用方式见这里)。

调用add方法时,发送的xml

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:add xmlns:ns2="http://lenve.server/">
<a>3</a>
<b>4</b>
</ns2:add>
</S:Body>
</S:Envelope>

调用add时,收到的xml:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:addResponse xmlns:ns2="http://lenve.server/">
<addResult>7</addResult>
</ns2:addResponse>
</S:Body>
</S:Envelope>

调用minus是发送的xml:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:minus xmlns:ns2="http://lenve.server/">
<arg0>7</arg0>
<arg1>1</arg1>
</ns2:minus>
</S:Body>
</S:Envelope>

调用minus时收到的xml:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:minusResponse xmlns:ns2="http://lenve.server/">
<return>6</return>
</ns2:minusResponse>
</S:Body>
</S:Envelope>

add和minus方法都需要两个参数,由于我们在服务端的接口中已经指定了add方法的参数名@WebParam(name=”a”),所以调用add方法时,发送的就是<a>3</a><b>4</b>,而调用minus时发送的是<arg0>7</arg0><arg1>1</arg1>,这是因为我们没有指定参数名,所以系统给分配了参数名,一个良好的服务端必须要指定有意义的参数名,这样才方便第三方调用,而对于返回值也是一样,如果指定了返回值名称@WebResult(name="addResult"),系统返回的xml就会使用<addResult>7</addResult>,如果没有指定返回名称,系统就会使用默认的return<return>6</return>。这便是服务端添加注解的作用。命名空间也是可以手动指定的,<ns2:minus xmlns:ns2="http://lenve.server/">,你如果不想使用这个命名空间,可以自己在服务端通过注解手动指定命名空间名称,指定方式:

@WebService(targetNamespace="http://www.lenve.test")
public interface IMyServer { @WebResult(name="addResult")
public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
public int minus(int a,int b);
}

SOAP消息分析的更多相关文章

  1. SOAP消息创建

    看了SOAP消息分析之后,大家对soap消息应该有了一个初步的认识,那么怎样自己编写一个soap消息呢? 先来创建一个简单的soap消息: @Test public void test1(){ try ...

  2. 如何用Apache TCPMon来截获SOAP消息

    在WebService服务器和客户机之间会传递SOAP消息,有时我们需要得到这些消息以便调试,而Apache的TCPMon可以帮助我们做到这一点.  TCPMon的下载地址在http://ws.apa ...

  3. soap消息机制 讲解

    SOAP(Simple Object Access Protocol,简单对象访问协议)作为一种信息交互协议在分布式应用中非常广泛,如WebService.在使用.Net开发WebService时候, ...

  4. Web Service学习之八:Soap消息详解

    一.区别概念 WSDL是网络服务描述语言,是XML文档:它包含一系列描述某个web service的定义或者说是规则.尤其是定义了传输Sope消息的结构 Soap:简单对象访问协议,是交换数据的一种协 ...

  5. SOAP消息的传递

    上一篇说了SOAP消息的创建,那么创建好了的SOAP消息要怎么发送给服务端呢? public class SoapTest { private String wsdlUri = "http: ...

  6. JAX-WS创建和处理SOAP消息

    JAX-WS规范是一组XML web services的JAVA API,在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP,在使用JAX-WS过程中,开发者不需要编写任何生成 ...

  7. 写入soap消息以及与soap消息通信

    1.些了解一下soap消息的结构以及通信方式如下图:

  8. webservice05#soap消息

    1, SOAPMessage结构图 2, SOAP消息的创建 1>前面的一个简单WebService  服务 package com.yangw.soap.service; import jav ...

  9. Web Service进阶(二)如何用Apache TCPMon来截获SOAP消息

    注:以下是关于TCPMon的一些使用常识,如果不需要或是已经熟悉就不用往下看了. 在WebService服务器和客户机之间会传递SOAP消息,有时我们需要得到这些消息以便调试,而Apache的TCPM ...

随机推荐

  1. 设计模式之策略模式Strategy

    /** * 策略设计模式 * 策略模式:定义一系列的算法族,使他们之间可以相互转换,动态的改变其行为. * 问题:设计一个鸭子模拟游戏. * 现在有一群鸭子: * ①这些鸭可以有飞的行为(分为快和慢) ...

  2. 单位有b\B\K\M\G的相互转换

    计算机存储计量单位 1. 计算机最小存储计量单位是:BIT(位) 2. 计算机最基本存储计量单位是:Bytes(字节) 3. Bit和Bytes的关系:8Bit=1Bytes 4. 其他常用单位:1K ...

  3. USB C和USB 3.1傻傻分不清?这篇文章可以帮你

    USB Type-C接口以及USB 3.1标准的到来,理应为消费者提供更多便利.然而就目前来看,似乎这些新标准非但没有为消费者提供了更好的使用体验,反而带来了诸多隐患.Google的工程师Benson ...

  4. 生意经:研究一下国外SAAS的产品线,比如Salesforce、Netsuite和Zendesk等等(Salesforce斥资7.5亿美元收购云计算字处理应用Quip)

    看他们做什么,我就做什么-甚至比他们做的更好. ------------------------------------------------------------ 新浪科技讯 北京时间8月3日下 ...

  5. 队列的实现(JAVA)

    定义    队列(queue)是一种特殊的线性表,它只允许在表的前端进行删除,在表的后端进行插入. 进行插入端的称为队尾,进行删除端的称为队头.队列是先进先出原则的.队列的实现同样可以 使用两种方式来 ...

  6. 【HDOJ】1512 Monkey King

    左偏树+并查集.左偏树就是可合并二叉堆. /* 1512 */ #include <iostream> #include <string> #include <map&g ...

  7. 【HDOJ】3436 Queue-jumpers

    离散化+伸展树. /* 3436 */ #include <iostream> #include <string> #include <map> #include ...

  8. BZOJ_1588_&_Codevs_1296_[HNOI2002]_营业额统计(平衡树/set)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1588 给出每一天的营业值,求出之前的天当中与它相差最小的营业值与它的差的绝对值(第一天的差值为 ...

  9. Android-webView的loadUrl

    1 //打开本包内asset目次下的test.html文件 wView.loadUrl(" file:///android_asset/test.html "); 2 //打开本地 ...

  10. Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/lock

    推荐博客:http://blog.sina.com.cn/s/blog_5c1450a8010188ju.html Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/ ...