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. 百度地图JS 搜索悬浮窗功能

    这个需求的效果类似下面的截图,主要还是利用百度地图中自定义控件的功能,挺简单的.文档地址在这 http://lbsyun.baidu.com/index.php?title=jspopular 效果图 ...

  2. Jedis分片Sentinel连接池实验

    Jedis分片Sentinel连接池实验 1.起因 众所周知,Redis官方HA工具Sentinel已经问世很久了,但令人费解的是,Jedis官方却迟迟没有更新它的连接池.到目前Maven库中最新的2 ...

  3. TCP发送源码学习(1)--tcp_sendmsg

    一.tcp_sendmsg()函数分析: int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t ...

  4. Android自定义View实战(SlideTab-可滑动的选择器)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52178553 本文出自:[openXu的博客] 目录: 初步分析重写onDraw绘制 重写o ...

  5. Swift运行时简介

    因为Swift的操作在高层并且也得与Objc联合起来干活,用Swift写的程序一般会被Objc和Swift运行时处理.因为Swift的本性--换句话说,它是一门静态语言--Swift运行时在一些关键地 ...

  6. iOS使用自签名证书实现HTTPS请求

    概述 在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求. 默认情况下非HTTPS的网络访问是禁止的并且不能再通过简单粗暴的向 ...

  7. SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟 ...

  8. static,this,private关键字用法

    1:成员变量和局部变量的区别(理解) (1)在类中的位置不同 成员变量:类中方法外 局部变量:方法定义中或者方法声明上 (2)在内存中的位置不同 成员变量:在堆中 局部变量:在栈中 (3)生命周期不同 ...

  9. 阻尼回弹效果的ScrollView嵌套GridView

    以前写过一篇带阻尼回弹效果的ScrollView,但是有些小问题,于是又重新整理了一下,这篇文章一是一个带阻尼的Scrollview,再个就是Scrollview嵌套GridView实现,而GridV ...

  10. Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》

    转载此文章请注明出处:点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...