SOAP消息分析

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

根据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);
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

上面这一段代码是我们在服务器端定义的一个接口,实现了这个接口的类就可以被发布,供其他人调用。这个接口中一共有两个方法,一个是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); }
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这是一段客户端调用服务端的代码,具体调用方式见这里。客户端分别调用了服务器端两个方法,一个是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>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

调用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>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

调用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>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

调用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>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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);
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/45640897

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。