WsExplorer和Tcp/Ip Monitor工具本身就存在于eclipse和MyEclipse中 

使用工具的原因: 

1、  使用工具可以更好的了解WebService请求的过程 

2、  使用工具WsExplore可以获取SOAP数据发送和接收的格式 

3、  使用工具Tcp/Ip Monitor可以监控拦截器请求头和响应头的具体数据 

什么是SOAP? 

SOAP是一种基于XML编码规范的文本协议,简单的说SOAP就是在HTTP的基础上传输XML数据,以实现远程调用【无论你的服务端是什么语言书写的,只要接收SOAP协议的XML数据,并返回SOAP协议的XML数据,就可以被任何语言调用】 

使用WsExplorer实例:验证qq是否在线 

采用qqOnlineWebServiceSoap中的qqCheckOnLine验证时,返回的是 

qqCheckOnlineResponse  

    qqCheckOnlineResult (string):   N  

 

 

 

点击source可以看到详细信息,信息如下: 

1:这是发出的消息格式: 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://WebXml.com.cn/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

- <soapenv:Body> 

- <q0:qqCheckOnline> 

  <q0:qqCode>870931520</q0:qqCode>  

  </q0:qqCheckOnline> 

  </soapenv:Body> 

  </soapenv:Envelope> 

2:以下是接收到的XML格式 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

- <soap:Body> 

- <qqCheckOnlineResponse xmlns="http://WebXml.com.cn/"> 

  <qqCheckOnlineResult>N</qqCheckOnlineResult>  

  </qqCheckOnlineResponse> 

  </soap:Body> 

  </soap:Envelope> 

 

采用qqOnlineWebServiceHttpGet或qqOnlineWebServiceHttpPost中的qqCheckOnline验证时,返回的都是 

<?xml version="1.0" encoding="utf-8"?> 

<string xmlns="http://WebXml.com.cn/">N</string

 

使用Tcp/Ip Monitor 

TCP/IP Monitor不仅可以看到SOAP数据,还可以获取HTTP请求和接收的头信息。 

1、位置:此工具位于:window>show view>other>MyEclipse Common(常用工具)>TCP/IP Monitor 

2、此工具,相当于一个代理商,启动后它将监听本地的某个端口,然后再将请求转发给指定的目标IP和端口。 

获取到数据后,再将数据原封不动的返回给客户。在客户看来,永远首先访问的都应该是这个代理,否则我们将看不到数据传输的过程。 

4、  配置选项: 

在打开的TCP/IP Monitor界面上:view Menu(右上方向下的小箭头)>Properties>Add(右侧添加) 

设置成以下属性: 

第一步: 

1)local monitoring port(监听本地的端口号):9876,随意设置一个4位的端口号,一会将通过http://127.0.0.1:9876的形式访问 

2)host name(要监听的服务器,如www.2cto.com):127.0.0.1
–因为本机发布了一个WebService所以监听本机IP.也可以是任意的主机。 

3)Port(要监听的目标服务器的端口):6666  - 因为我们发布的WebService为http://127.0.0.1:6666/helloworld所以,6666是需要监听的端口号。 

      4)Type(监听的类型): 

-- TCP/IP : 将使用原始地址继续访问下一个请求,如用户输入:http://127.0.0.1:9876/helloworld?wsdl此时将返回wsdl服务访问地址同前。 

-- HTTP :将使用目标地址继续访问下一个请求。如用户输入: http://127.0.0.1:9876/helloworld?wsdl在请求方法时将使用http://127.0.0.1:6666/helloworld来访问sayHi方法。此种方式将不再会被代理。因为已经不是正在监听的端口号了。 

   在监听类型处,我选择了TCP/IP,然后通过在地址栏输入:http://127.0.0.1:9876/helloworld?wsdl,在返回的wsdl文件中查看:<soap:address
location=“http:……”/>处地址的变化情况。 

time out:设置访问不成功的连接时间,保持为0,即不设置。 

在设置好后,点OK按扭,然后再点右方的Start按扭,监听便已经启动。 

    第二步: 

      在MyEclipse的WebService上配置WSDL URL为:http://127.0.0.1:9876/helloworld?wsdl,注意使用的是MyEclipse
TCP/IP Monitor的端口。而不是直接去访问我们发布的http://127.0.0.1:6666/helloworld?wsdl 

 

如何修改wsdl文件的内容? 

使用WebService的注解。 

1、  @WebService-定义服务 

2、  @WebMethod-定义方法 

3、  @WebResult-定义返回值 

4、@WebParam-定义参数 

注意:对于注解,不同的版本支持程度不相同: 

1、1.5不支持. 

2、1.6.0_20前版本必须使用完整注解. 

3、1.6.0_21以后可以只使用@WebService对类进行注解. 

注释的作用: 

通过WebService的注解,可以更加形像的描述Web服务。从而生成WSDL文档。 

当修改了WebService注解之后,同时会影响客户端生成的代码。 

调用的方法名和参数名也发生了变化。 

 

示例: 

@WebService(name="myName",//对应portType name="myName" 

portName="myPort",  //对应服务中的port name="myPort" 

serviceName="myService",//对应service name="myService" 

targetNamespace="http://leaf.com/mynamespace")//可以随意书写类似于java中的package 

public class HelloWorld{ 

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

@WebMethod(action="myAction",//定义一个soapAction="myAction"用于找到这个方法以执行 

   operationName="myOperationName")//定义可以调用的方法,会生成相应类的具体方法,operation name=".." 

public @WebResult(name="mySayHelloResult")String//定义返回值的名称 

sayHello(){ 

return "HelloWorld"; 



@WebMethod(action="mySayHiAction",operationName="mySayHiOperationName") 

public @WebResult(name="mySayHiResult")String sayHi(@WebParam(name="myParaName", 

//将参数放到头信息中,用于保护参数,默认在body中 

                                                      header=true, 

  mode=Mode.IN) 

String name){ 

String str = "你好:"+name+",当前时间是:"+sdf.format(new Date()); 

return str; 



public static void main(String[] args) { 

Endpoint.publish("http://127.0.0.1:6666/helloworld",new HelloWorld()); 





3:将上面的程序对外发布以后,我们通过MyEclipse的WebService Explorer来访问 

你会发现和以前不一样的提示信息,但其实,仍然还是调用的那同一个方法。 

4:再次使用wsimport –s . http://127.0.0.1:6666/helloworld?wsdl生成java代码然后调用 

以下是调用代码(可以用面目全非来形容,但完成的还是同样的工作。) 

package com.leaf.mynamespace; 

public class Main { 

public static void main(String[] args) { 

//通过分析wsdl可知从myService中调用getMyPort返回myName 

MyName myName = new MyService().getMyPort(); 

//通过myName的mySayHiOperationName来调用sayHi方法 

String str = myName.mySayHiOperationName("王健"); 

System.err.println(str); 



}

WebService详解(二)的更多相关文章

  1. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  2. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  3. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  4. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  5. logback -- 配置详解 -- 二 -- <appender>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  6. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  7. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  8. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  9. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  10. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

随机推荐

  1. Python安装与使用的常见问题

    1. Python安装问题 到Python官网下载Python最新版本 Windows x86-64 executable installer (64为操作系统选择这个) Windows x86 ex ...

  2. java中static特殊性和final(static成员直接被访问,this不能用在static方法中,static不可访问非static)

    java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,不依赖类特定的实例,被类的所有实例共享. 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中 ...

  3. tolua++没法用

    tolua++没法用(金庆的专栏)觉得从C++头文件生成lua绑定代码的方法比较简单,想试试tolua++.从Github获取toluapp:https://github.com/LuaDist/to ...

  4. Kafka系列之-Kafka入门

    接下来的这些博客,主要内容来自<Learning Apache Kafka Second Edition>这本书,书不厚,200多页.接下来摘录出本书中的重要知识点,偶尔参考一些网络资料, ...

  5. Android必知必会-Android Studio下配置和使用Lambda

    移动端如果访问不佳,请访问–>Github版 背景 和朋友讨论 JAVA8 的新特性,聊到Lambda,正好在掘金上看到一篇相关的文章,结合资料,作一个总结,特别是记录下实际使用中遇到的问题. ...

  6. 通过grub-install命令把grub安装到u盘

    通过grub-install命令把grub安装到u盘 ①准备一个u盘,容量不限,能有1MB都足够了. ②把u盘格式化(我把u盘格式化成FAT.fat32格式了,最后证明也是成功的).③开启linux系 ...

  7. T-SQL动态查询(4)——动态SQL

    接上文:T-SQL动态查询(3)--静态SQL 前言: 前面说了很多关于动态查询的内容,本文将介绍使用动态SQL解决动态查询的一些方法. 为什么使用动态SQL: 在很多项目中,动态SQL被广泛使用甚至 ...

  8. sql server中高并发情况下 同时执行select和update语句死锁问题 (二)

    SQL Server死锁使我们经常遇到的问题,数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁.希望对您学习SQL Server死锁方面能有所帮助. 死锁对于DBA或是数据 ...

  9. iOS日历中给一个事件添加多个提醒

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS自带的日历应用中,我们最多只能给一个事件设置2个提醒,但 ...

  10. ActiveMQ安装配置及实例

    本文可作为吴水成老师,dubbo课程第21节的学习笔记. ActiveMQ的介绍及功能 参考百度 ActiveMQ的下载 https://activemq.apache.org/activemq-51 ...