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. 《An Introduction to Signal Smoothing》译文

    最近在做数据平滑相关的工作,正好读到该篇博客,感觉不错,就翻译了一下.原链接:An Introduction to Signal Smoothing 信号平滑简介 噪声无处不在,不管是在采集手机游戏的 ...

  2. cassandra 概述

    摘要 本篇文章主要是介绍cassandra与其他NoSQL的区别以及自身的特点与应用场景.在关系数据库我们没必要选择数据库,通常需要适配oracle/mysql/sql server/db2 等多种数 ...

  3. FFmpeg的HEVC解码器源代码简单分析:CTU解码(CTU Decode)部分-TU

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  4. Struts 1 之<html>标签库

    <html:html>标签 <html:html>标签用于在网页开头生成HTML的<html>元素,它只有一个用于显示用户语言的lang属性: <html:h ...

  5. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  6. Java中导出到Excel实现_aspose.cells

    参考http://183615215-qq-com.iteye.com/blog/1858208 包下载:http://pan.baidu.com/s/1o6ju0ZK,将lib的jar包导入到工程中 ...

  7. 【java虚拟机系列】从java虚拟机字节码执行引擎的执行过程来彻底理解java的多态性

    我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是 ...

  8. java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定

    一. 计算机的小数计算一定范围内精确,超过范围只能取近似值: 计算机存储的浮点数受存储bit位数影响,只能保证一定范围内精准,超过bit范围的只能取近似值. java中各类型的精度范围参见:http: ...

  9. EBS财务模块表结构

     gl_code_combinations:科目组合 字段名 含义 备注 code_combination_id 主键,科目编码ID,自动编号 segment1 分行代码 setgment2 是受 ...

  10. C++对C的实用性增强

    #include <iostream> using namespace std; //C语言中的变量都必须在作用域开始的位置定义!! //C++中更强调语言的"实用性" ...