SOAP消息分析

根据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);
}
时间: 2024-11-11 15:55:15

SOAP消息分析的相关文章

java soap api操作和发送soap消息

Java代码   package gov.hn12396.appintegration.mule.client; import gov.hn12396.appintegration.mule.util.EncoderUtil; import java.net.URL; import java.util.Calendar; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPBody; import javax.xml.s

[9] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之SUBACK(消息订阅应答)消息分析

0.前言 在上一节中(MQTT消息格式之SUBSCRIBE(消息订阅)消息分析),客户端发送了订阅的消息,这个时候,服务器端收到订阅主题的MQTT消息之后,肯定需要给一个应答,这个应答信息就是SUBACK(消息订阅应答).消息订阅应答相对来说比较简单. 1.准备步骤 (1) 首先打开WireShark软件,并启动监听 (2) 在Eclipse里面运行下面的代码 [java] view plaincopy import org.eclipse.paho.client.mqttv3.MqttClie

JAX-WS创建和JavaAPI发送和处理SOAP消息实例

JAX-WS规范是一组XML web services的JAVA API,在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP,在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码.JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息. JAX-WS 也提供了一组针对底层消息进行操作的API调用,你可以通过Dispatch 直接使用SOAP消息或XML消息发送请求或者使用Provider处理SOAP或XML消息.通过web servi

[Python]webservice学习(2) --自己写soap消息请求服务

上文中webservice学习(1) ,使用soaplib建立了一个超简单的webservice服务,也是用suds调用成功了,那如果想使用http包自己组成一个soap消息来调用接口怎么办呢? 这个时候我们就想到使用wsdl这个文件了,我看了些wsdl的文档,也参照这其他人使用java,php等语言实现的soap消息调用的格式来写,但是怎么调试都没成功.. 就是说他总是会返回500或者是405各种错误,就是下面代码中的old_soap_body 变量中的消息格式. #coding: utf-8

SOAP消息头的处理

SOAP消息头的处理 WebService学习总结(四)——调用第三方提供的webService服务

[7] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNACK消息分析

在上节中([6] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之CONNECT消息格式分析)我们分析了CONNECT消息格式,我们知道CONNECT消息是客户端发送出去的,作为对客户端的连接请求,服务器端同样会有一个消息的返回,这个消息就是CONNACK的消息.我们在发出去CONNECT消息后,如果WireShark抓包工具依然开启的话,将会抓到类似于下面的TCP消息,其16进制为:20 02 00 00,那么其代表什么意思呢? 首先我们来看CONNACK的消息格

[8] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之SUBSCRIBE(消息订阅)消息分析

0.前言 我们在上几节的协议分析中,发送连接的请求用的是Eclipse Paho MQTT工具,那么笔者这一次改一下,咱们这次用代码来发送Subscribe的MQTT消息,请注意,下面的代码是基于Eclipse Paho Java API之上的代码,在运行下面的代码前,请先去下载Eclipse Paho Java库,其下载地址为:https://www.eclipse.org/paho/clients/java/. 下面我们正式切入正题. 1.准备步骤 (1) 首先打开WireShark软件,并

JMS消息服务器——Message消息分析(1)

一.Message结构 Message消息是整个JMS规范最为重要的部分.一个JMS应用程序中的所有数据和事件都是使用消息进行通信的,同时JMS的其余部分也都在为消息传输服务.因此可以说,消息时一个系统的命脉所在. 一个Message对象有3个部分:消息头.消息属性,最后就是消息数据内容,它称为负载或消息体. 二.消息头 每条JMS消息都有一组标准的消息头.每个消息头都由一组取值函数和赋值函数所标识.这些方法名称紧随在术语setJMS**(),getJMS**()方法之后.如下图: JMS消息可

JMS消息服务器——Message消息分析(2)

3 消息类型 JAVA消息服务定义了6种JMS提供者必须支持的Message接口类型.尽管JMS定义了Message接口,但它并未定义它们的实现方式.这就允许提供者以它们自己的方式实现和传送消息,同时为JMS应用程序开发者维护了一个兼容的标准接口.这6个消息接口是Message和它的5个子接口:TextMessage.StreamMessage.MapMessage.ObjectMessage和ByteMessage. 3.1 Message 最简单的消息类型是javax.jms.Message