ups和稳压器一起使用TNS和JWS的区别

Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述
Web Service的定义
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。
这里我们从一个程序员的视角来观察web service。在传统的程序编码中,存在这各种的函数方法调用。通常,我们知道一个程序模块M中的方法A,向其发出调用请求,并传入A方法需要的参数P,方法A执行完毕后,返回处理结果R。这种函数或方法调用通常发生在同一台机器上的同一程序语言环境下。现在的我们需要一种能够在不同计算机间的不同语言编写的应用程序系统中,通过网络通讯实现函数和方法调用的能力,而Web
service正是应这种需求而诞生的。
最普遍的一种说法就是,Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDL(Web
Services Description Language)web 服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。
下面,我们先来熟悉一下SOAP协议,看看它是如何描述程序中的函数方法、参数及结果对象的。
SOAP协议简介
什么是SOAP
SOAP 指简单对象访问协议,它是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
o Envelope 元素,标识XML 文档一条 SOAP 消息
o Header 元素,包含头部信息的XML标签
o Body 元素,包含所有的调用和响应的主体信息的标签
o Fault 元素,错误信息标签。
以上的元素都在 SOAP的命名空间http://www.w3.org/2001/12/soap-envelope中声明;
SOAP的语法规则
o SOAP 消息必须用 XML 来编码
o SOAP 消息必须使用 SOAP Envelope 命名空间
o SOAP 消息必须使用 SOAP Encoding 命名空间
o SOAP 消息不能包含 DTD 引用
o SOAP 消息不能包含 XML 处理指令
SOAP 消息的基本结构
SOAP Envelope 元素
Envelope 元素是 SOAP 消息的根元素。它指明 XML 文档是一个SOAP 消息。它的属性 xmlns:soap的值必须是http://www.w3.org/2001/12/soap-envelope。
 encodingStyle 属性,语法:soap:encodingStyle=&URI&
encodingStyle 属性用于定义文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。
SOAP Header 元素
actor 属性,语法soap:actor=&URI&
通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。
mustUnderstand 属性 ,语法soap:mustUnderstand=&0|1&
SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。假如您向 Header 元素的某个子元素添加了 &mustUnderstand=&1&,则要求处理此头部的接收者必须认可此元素。
SOAP Body 元素
必需的 SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。Body元素中既可以包含SOAP定义的命名空间中的元素,如Fault,也可以是用户的应用程序自定义的元素。以下是一个用户定义的请求:
上面的例子请求苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序专用的元素。它们并不是 SOAP 标准的一部分。而对应的 SOAP 响应应该类似这样:
SOAP Fault 元素
Fault 元素表示 SOAP的错误消息。它必须是 Body 元素的子元素,且在一条 SOAP 消息中,Fault 元素只能出现一次。Fault 元素拥有下列子元素:
常用的SOAP Fault Codes
HTTP协议中的SOAP 实例
下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: &http://www.jsoso.net/stock&
SOAP 请求:(注意HTTP的Head属性)
SOAP 响应:(注意HTTP的Head属性)
HTTP协议中的SOAP RPC工作流程
介绍过了SOAP,让我们关注Web Service中另外一个重要的组成WSDL。
WSDL的主要文档元素
WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的应用都可以实现。具体部分,如数据的序列化则归入底部分,因为它包含具体的定义。在上述的文档元素中,&types&、&message&、&portType&属于抽象定义层,&binding&、&service&属于具体定义层。所有的抽象可以是单独存在于别的文件中,也可以从主文档中导入。
WSDL文档的结构实例解析
下面我们将通过一个实际的WSDL文档例子来详细说明各标签的作用及关系。
由于上面的事例XML较长,我们将其逐段分解讲解
WSDL文档的根元素:<definitions>
<definitions>定义了文档中用到的各个xml元素的namespace缩写,也界定了本文档自己的targetNamespace=&http://www.jsoso.com/wstest&,这意味着其它的XML要引用当前XML中的元素时,要声明这个namespace。注意xmlns:tns=&http://www.jsoso.com/wstest&这个声明,它标示了使用tns这个前缀指向自身的命名空间。
WSDL文档数据类型定义元素:&types&
&types&标签定义了当前的WSDL文档用到的数据类型。要说明的是,为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。这些数据类型用来定义web service方法的参数和返回指。对于通用的原生数据类型如:integer , boolean , char , float等,在W3C的标准文档http://www.w3.org/2001/XMLSchema中已经做了定义。这里我们要引入的schema定义schemaLocation=&http://localhost:8080/hello?xsd=1&是我们自定义的Java对象类型。
WSDL文档消息体定义元素:& message &
<message>元素定义了web service函数的参数。<message>元素中的每个<part>子元素都和某个参数相符。输入参数在<message>元素中定义,与输出参数相隔离,输出参数有自己的<message>元素。兼作输入、输出的参数在输入输出的<message>元素中有它们相应的<part>元素。输出<message>元素以&Response&结尾,对Java而言方法得返回值就对应一个输出的<message>。每个<part>元素都有名字和类型属性,就像函数的参数有参数名和参数类型。
在上面的文档中有两个输入参数、两个输出参数和一个错误参数(对应Java中的Exception)。
 输入参数<message>的name属性分别命名为toSayHello,sayHello。
toSayHello对应输入参数userName,参数类型为xsd:string,在Java语言中就是String;
sayHello对应两个输入参数person和arg1,类型为tns:person和xsd:string。这里tns:person类型就是引用了& types &标签中的类型定义。
 输出参数<message>的name属性分别命名为toSayHelloResponse和sayHelloResponse。
这个名称和输入参数的<message>标签name属性对应,在其后面加上Response尾缀。
toSayHelloResponse对应的返回值是returnWord,参数类型为xsd:string;
sayHelloResponse对应的返回值是personList,参数类型为tns:personArray(自定义类型);
 错误参数<message>的name属性为HelloException。
它的&part&子标签element而不是type来定义类型。
以上的message标签的name属性通常使用web service函数方法名作为参照,错误参数标签则使用异常类名为参照。标签中的参数名称,即part子元素的name属性是可自定义的(下一章节详细说明)。message标签的参数类型将引用types标签的定义。
WSDL文档函数体定义元素:& portType &
&portType& 元素是最重要的 WSDL 元素。它可描述一个 web service、可被执行的操作,以及相关的消息。portType的name属性对应Java中的一个服务类的类名。&portType& 元素使用其子元素& operation&描述一个web service的服务方法。
在&operation&元素中,name属性表示服务方法名,parameterOrder属性表示方法的参数顺序,使用空格符分割多个参数,如:“parameterOrder=&person arg1”。&operation&元素的子标签&input&表示输入参数说明,它引用<message>标签中的输入参数。&output&表示输出参数说明,它引用<message>标签中的输出参数。&fault&标签在Java方法中的特别用来表示异常(其它语言有对应的错误处理机制),它引用<message>标签中的错误参数。
WSDL绑定实现定义元素:& binding &
&binding&标签是完整描述协议、序列化和编码的地方,&types&,&message&和&portType&标签处理抽象的数据内容,而&binding&标签是处理数据传输的物理实现。
&binding&标签把前三部分的抽象定义具体化。
首先&binding&标签使用&soap:binding&的transport和style属性定义了Web Service的通讯协议HTTP和SOAP的请求风格RPC。其次&operation&子标签将portType中定义的operation同SOAP的请求绑定,定义了操作名称soapAction,输出输入参数和异常的编码方式及命名空间。
WSDL服务地址绑定元素:& service &
service是一套<port>元素。在一一对应形式下,每个<port>元素都和一个location关联。如果同一个<binding>有多个<port>元素与之关联,可以使用额外的URL地址作为替换。
一个WSDL文档中可以有多个<service>元素,而且多个<service>元素十分有用,其中之一就是可以根据目标URL来组织端口。在一个WSDL文档中,<service>的name属性用来区分不同的service。在同一个service中,不同端口,使用端口的&name&属性区分。
这一章节,我们简单的描述了WSDL对SOAP协议的支持,以及在Web Service中的作用。在接下来的章节中,我们将学习如何使用Java6.0的Annotation标签来定义和生成对应的WSDL。
JavaSE6.0下的Web Service
从JavaSE6.0开始,Java引入了对Web Service的原生支持。我们只需要简单的使用Java的Annotation标签即可将标准的Java方法发布成Web Service。(PS:Java Annotation资料请参考 )
但不是所有的Java类都可以发布成Web Service。Java类若要成为一个实现了Web Service的bean,它需要遵循下边这些原则:
 这个类必须是public类 这些类不能是final的或者abstract 这个类必须有一个公共的默认构造函数 这个类绝对不能有finalize()方法
下面我们将通过一个具体的Java Web Service代码例子,配合上述的WSDL文件,讲述如何编写JavaSE6.0的原生Web Service应用。
完整的Java Web Service类代码
Annotation 1@WebService(name=&Example&, targetNamespace=&http://www.jsoso.com/wstest&, serviceName=&Example&)
@WebService标签主要将类暴露为WebService,其中targetNamespace属性定义了自己的命名空间,serviceName则定义了& definitions &标签和&service&标签的name属性。
Annotation 2:@SOAPBinding(style=SOAPBinding.Style.RPC)
@SOAPBinding标签定义了WSDL文档中SOAP的消息协议,其中style属性对应SOAP的文档类型,可选的有RPC和DOCUMENT
Annotation 3:@WebMethod(operationName=&toSayHello&,action=&sayHello&,exclude=false)
@WebMethod定义Web Service运作的方法,
属性action 对应操作的活动 ,如&soap:operation soapAction=&sayHello& /&
属性operationName匹配的wsdl:operation 的名称,如&operation name=&toSayHello& parameterOrder=&userName&&
属性exclude 用于阻止将某一继承方法公开为web服务,默认为false
Annotation 4:@WebResult(name=&returnWord&)
@ WebResult定义方法返回值得名称,如&part name=&returnWord& type=&xsd:string& /&
Annotation 5:@WebParam(partName=&person&, mode=Mode.IN
@WebParam定义方法的参数名称,如&part name=&person& type=&tns:person& /&,其中mode属性表示参数的流向,可选值有IN / OUT / INOUT
这里要着重说明的是,上述Web Service类的sayHello方法中,带有HelloException这个异常声明,造成该服务类不能直接发布成Web Service。需要使用wsgen工具为其生存异常Bean。关于wsgen工具的使用,请参考wsgen与wsimport命令说明
发布一个的Java Web Service
在完成了上述的Web Service Annotation注释后,我们使用wsgen工具为其进行服务资源文件的构造(这里主要是生成一个名为org.jsoso.jws.server.jaxws.HelloExceptionBean的异常bean类),最后使用以下的类发布Web 服务:
在控制台运行这个类,就可以使用URL :http://localhost:8080/hello?wsdl 浏览到上文所描述的WSDL的全文了。这说明您的第一个Web Service应用发布成功!
构建Web Service客户端
使用JavaSE6.0构建Web Service的客户端是一件相当简单的事。这里我们要使用到JDK中的另一个命令行工具wsimport。在控制台下输入以下命令:
wsimport -d ./bin -s ./src -p org.jsoso.jws.client.ref http://localhost:8080/hello?wsdl
即可在包org.jsoso.jws.client.ref中生成客户端的存根及框架文件。其中我们要使用的类只有两个:服务类Example_Service和本地接口Example。编写如下客户端,即可调用Web Service服务:
届此,本次Web Service的学习暂告一个段落。Java Web Service是一个相当庞大的知识体系,其中涉及的相关技术较多,这里无法一一道来,我们将会在今后的开发和使用中,同大家做进一步深入的探讨和学习。
附录:wsgen与wsimport命令说明
wsgen是在JDK的bin目录下的一个exe文件(Windows版),该命令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件。这里要特别说明的是,通常在Web Service Bean中用到的异常类会另外生成一个描述Bean,如果Web
Service Bean中的方法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。此外,wsgen还能辅助生成WSDL和相关的xsd文件。wsgen从资源文件生成一个完整的操作列表并验证web service是否合法,可以完整发布。
命令参数说明:
 -cp 定义classpath -r 生成 bean的wsdl文件的存放目录 -s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件) -d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
命令范例:wsgen -cp ./bin -r ./wsdl -s ./src -d ./bin -wsdl org.jsoso.jws.server.Example
wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C#编写的web
service,通过wsimport则生成Java的客户端实现。
命令参数说明:
 -d 生成客户端执行类的class文件的存放目录 -s 生成客户端执行类的源文件的存放目录 -p 定义生成类的包名
命令范例:wsimport -d ./bin -s ./src -p org.jsoso.jws.client.ref http://localhost:8080/hello?wsdl
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!您是不是在找:
买家还在看:
当前位置:
¥0 元/平方米
关注行业资讯
JWS600-24 - 稳压电源 24V 27A 全新原装现
detail3e达人选购¥2900.00¥14680.00¥100.00¥18000.00¥46.00
detail3e周边优质供应商北京海淀区广东省深圳市北京宣武区北京宣武区
同参数产品
同参数产品
同参数产品
电源电流:
同参数产品
电源电压:
同参数产品
同参数产品
同参数产品
同参数产品
同参数产品
慧聪网厂家深圳市福田区新晨微电子商行为您提供JWS600-24 - 稳压电源 24V 27A 全新原装现的详细产品价格、产品图片等产品介绍信息,您可以直接联系厂家获取JWS600-24 - 稳压电源 24V 27A 全新原装现的具体资料,联系时请说明是在慧聪网看到的。
detail3e相关商品推荐¥2900.00¥14680.00¥100.00¥18000.00¥46.00¥3200.00¥180.00¥9.50热门商品推荐 ¥2900.00 ¥14680.00 ¥100.00 ¥18000.00 ¥46.00 ¥3200.00 ¥180.00 ¥9.50
detail3e店内热门商品面议面议面议面议
detail3e稳压电源相关资源稳压电源热门产品搜索更多&热门商机最新商机
提示:您在慧聪网上采购商品属于商业贸易行为。以上所展示的信息由卖家自行提供,内容的真实性、准确性和合法性由发布卖家负责,请意识到互联网交易中的风险是客观存在的。推荐使用,保障您的交易安全!
所在地:广东省&&
联系人:亢新晨 & 先生
075 ******
159 ******
请供应商联系我
手机号不能为空
姓名不能为空
请供应商联系我
您对该公司的咨询信息已成功提交请注意接听供应商电话。
detail3e关于稳压电源
detail3e您是不是在找
您采购的产品:
请输入采购产品
您的手机号码:
请输入手机号码
*采购产品:
请输入采购产品
*采购数量/单位:
请输入采购数量
请选择单位
*采购截止日期:
请输入正确的手机号码
请输入验证码
*短信验证码:
<input id="valid_Code1" maxlength="6" placeholder="请输入验证码" name="VALIDCODE" class="codeInput" onkeyup="this.value=this.value.replace(/\D/g,'')" onkeypress="if(event.keyCode
57) event.returnValue =" type="text">
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
发送成功!
慧聪已收到您的需求,我们会尽快通知卖家联系您,同时会派出采购专员1对1为您提供服务,请您耐心等待!
159 ******
联系人:亢新晨&销售部 销售经理
公司名称:深圳市福田区新晨微电子商行
备注:点击关注按钮后才可自动收到卖家电话
请输入正确的手机号码
请输入验证码
*短信验证码:
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
按字母分类 :您是不是在找:
买家还在看:
当前位置:
关注行业资讯
民扬集团批发 TNS 3KVA 稳压器 民扬集团广州总代理
detail3e达人选购¥14680.00¥100.00¥18000.00¥46.00¥180.00
detail3e周边优质供应商上海松江区江苏省无锡市上海虹口区广东省东莞市
同参数产品
同参数产品
加工定制:
同参数产品
同参数产品
输出电流:
同参数产品
输入电压:
同参数产品
输出电压:
同参数产品
输出功率:
同参数产品
频率范围:
同参数产品
工作温度:
同参数产品
产品认证:
同参数产品
慧聪网厂家广州市扬名电气有限公司为您提供民扬集团批发 TNS 3KVA 稳压器 民扬集团广州总代理的详细产品价格、产品图片等产品介绍信息,您可以直接联系厂家获取民扬集团批发 TNS 3KVA 稳压器 民扬集团广州总代理的具体资料,联系时请说明是在慧聪网看到的。
detail3e相关商品推荐¥14680.00¥100.00¥18000.00¥46.00¥180.00¥9.50¥1000.00¥90000.00热门商品推荐 ¥14680.00 ¥100.00 ¥18000.00 ¥46.00 ¥180.00 ¥9.50 ¥1000.00 ¥90000.00
detail3e店内热门商品面议¥1288.00面议面议
detail3e稳压器相关资源稳压器热门产品搜索更多&热门商机最新商机
提示:您在慧聪网上采购商品属于商业贸易行为。以上所展示的信息由卖家自行提供,内容的真实性、准确性和合法性由发布卖家负责,请意识到互联网交易中的风险是客观存在的。推荐使用,保障您的交易安全!
所在地:广东省&&
联系人:陈建峰 & 先生
020 ******
请供应商联系我
手机号不能为空
姓名不能为空
请供应商联系我
您对该公司的咨询信息已成功提交请注意接听供应商电话。
detail3e关于稳压器
detail3e同类其他品牌
detail3e您是不是在找
您采购的产品:
请输入采购产品
您的手机号码:
请输入手机号码
*采购产品:
请输入采购产品
*采购数量/单位:
请输入采购数量
请选择单位
*采购截止日期:
请输入正确的手机号码
请输入验证码
*短信验证码:
<input id="valid_Code1" maxlength="6" placeholder="请输入验证码" name="VALIDCODE" class="codeInput" onkeyup="this.value=this.value.replace(/\D/g,'')" onkeypress="if(event.keyCode
57) event.returnValue =" type="text">
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
发送成功!
慧聪已收到您的需求,我们会尽快通知卖家联系您,同时会派出采购专员1对1为您提供服务,请您耐心等待!
020 ******
联系人:陈建峰&销售部 经理
公司名称:广州市扬名电气有限公司
备注:点击关注按钮后才可自动收到卖家电话
请输入正确的手机号码
请输入验证码
*短信验证码:
免费获取验证码
为了安全,请输入验证码,我们将优先处理您的需求!
请输入验证码
按字母分类 :研究下jdk webService 觉得非常好用,可以像使用本地方法那样去调用
什么原理就不说了,一大堆什么规范的我也说不明白
使用java webService前提条件
1.系统已安装jdk1.6以上
2.系统已配置java环境变量
服务端示例代码:
package com.wei.
import javax.jws.WebM
import javax.jws.WebS
import javax.xml.ws.E
* webService服务端
* @author wangwei
* May 27, 2013
@WebService
public class HelloWorld {
@WebMethod
public String sayHello(String userName){
return "Hello " + userN
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/webservice/hws", new HelloWorld());
在运行服务端前需要先使用jdk/bin中wsgen来生成 服务所需要的依赖类
如果没有生成直接运行可能会出现如下错误:
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.wei.service.jaxws.SayHello is not found. Have you run APT to generate them?
at com.sun.xml.internal.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:256)
at com.sun.xml.internal.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:567)
at com.sun.xml.internal.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:514)
at com.sun.xml.internal.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:341)
at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:227)
at com.sun.xml.internal.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:308)
at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:174)
at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:420)
at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:439)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:208)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:138)
at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:90)
at javax.xml.ws.Endpoint.publish(Endpoint.java:170)
at com.wei.service.HelloWorld.main(HelloWorld.java:22)
wsgen的使用方法:
1.打开命令提示符窗口 转到项目主目录中 如我的项目目录为D:\workspace\javaWebService&
2.输入wsgen -cp ./bin -s ./src -d ./bin -wsdl com.wei.service.HelloWorld
-cp 定义classpath
-s 源码文件存放目录 当前则放到src目录中
-d 编译文件存放目录 当前则放到bin目录中
-wsdl 生成wsdl文件
com.wei.service.HelloWorld 指定服务端程序
3.完成后会在com.wei.service即服务程序目录中新增一个jaxws目录并包含依赖类
4.运行服务端程序 在 IE中输入http://localhost:8080/webservice/hws?wsdl 出现如下个界面即完成服务端部署
生成客户端
在命令提示符窗口执行wsimport -d ./bin -s ./src -p com.wei.client http://localhost:8080/webservice/hws?wsdl
-d 编译文件存放目录 本例为bin目录
-s 源文件存放目录 本例为src目录
-p 定义生成类的包名
命令执行完成后会在com.wei.client包中生成客户端执行类文件
package com.wei.
import com.wei.client.HelloW
import com.wei.client.HelloWorldS
* @author wangwei
* May 28, 2013
public class Test {
public static void main(String[] args) {
HelloWorldService hws = new HelloWorldService();
HelloWorld hw = hws.getHelloWorldPort();
System.out.println(hw.sayHello("wangwei"));
}输出结果:Hello wangwei
这样整个服务的部署和调用就完成了
下面符上一些关于jdk webService的一些说明
JKD6 中定义的Web Service注释
1. @WebService 标注要暴露为WebServices的类或接口,用于申修饰类或接口,包含属性
targetNamespace 定义命名空间,默认为”http://”+”包名倒排”
name Web Service
的名称,默认为类名,例如:
&definitions targetNamespace="http://service.jws.test/"
name="HelloWorldService"&
Web Service 的端口名称
serviceName
Web Service 的服务名称,例如
&service name="HelloWorldService"&
&port name="HelloWorldPort"
binding="tns:HelloWorldPortBinding"&
&/service&
2. @SOAPBinding 定义Web Service 在SOAP中的消息协议,用于申修饰类或接口,包含属性
style 定义消息的编码类型
user 定义消息的格式化类型
3. @WebMethod 定义Web Service运作的方法,包含属性
action 操作的活动
operationName与此方法匹配的 wsdl:operation 的名称
exclude 标注此方法是否被暴露,默认为false
4. @WebResult 定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
name返回值的名称
partName表示此返回值的 wsdl:part 的名称
targetNamespace返回值的 XML 名称空间
header如果为 true,则结果是从消息头而不是消息正文获取的
5. @WebParam 定义方法的参数,参数类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
name参数名称
partName表示此参数的 wsdl:part 的名称
targetNamespace参数的 XML 名称空间
header如果为 true,则结果是从消息头而不是消息正文获取的
mode参数的流向(IN、OUT 或 INOUT 之一)
wsgen与wsimport命令说明
wsgen命令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,在我们的例子中就是test.jws.service.HelloWorld,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件,通常Web Service Bean中用到的异常类会另外生成一个描述Bean。它还能生成WSDL和符合规范的HelloWorld类Web Service。wsgen从资源文件生成一个完整的操作列表并验证是合法的。如果Web
Service Bean中的主法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。
命令参数说明:
-cp 定义classpath
-r 生成 bean的wsdl文件的存放目录
-s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
-d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
wsimport命令的主要功能是根据wsdl文件生成客户端存根及框架,负责与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。
命令参数说明:
-d 生成客户端执行类的class文件的存放目录
-s 生成客户端执行类的源文件的存放目录
-p 定义生成类的包名
三、 附录:WSDL说明
1、WSDL 文档结构
WSDL 文档是利用这些主要的元素来描述某个 web service 的:
&portType&
web service 执行的操作
web service 使用的消息
web service 使用的数据类型
web service 使用的通信协议
一个 WSDL 文档的主要结构是类似这样的:
&definitions&
definition of types........
definition of a message....
&/message&
&portType&
definition of a port.......
&/portType&
definition of a binding....
&/binding&
&/definitions&
WSDL 文档可包含其它的元素,比如 extension 元素,以及一个 service 元素,此元素可把若干个 web services 的定义组合在一个单一的 WSDL 文档中。
&portType& 元素是最重要的 WSDL 元素。
它可描述一个 web service、可被执行的操作,以及相关的消息。
可以把 &portType& 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
&message& 元素定义一个操作的数据元素。
每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
WSDL types
&types& 元素定义 web service 使用的数据类型。
为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。
WSDL Bindings
&binding& 元素为每个端口定义消息格式和协议细节。
这是某个 WSDL 文档的简化的片段:
&message name="getTermRequest"&
&part name="term" type="xs:string"/&
&/message&
&message name="getTermResponse"&
&part name="value" type="xs:string"/&
&/message&
&portType name="glossaryTerms"&
&operation name="getTerm"&
&input message="getTermRequest"/&
&output message="getTermResponse"/&
&/operation&
&/portType&
在这个例子中,&portType& 元素把 "glossaryTerms" 定义为某个端口的名称,把 "getTerm" 定义为某个操作的名称。
操作 "getTerm" 拥有一个名为 "getTermRequest" 的输入消息,以及一个名为 "getTermResponse" 的输出消息。
&message& 元素可定义每个消息的部件,以及相关联的数据类型。
对比传统的编程,glossaryTerms 是一个函数库,而 "getTerm" 是带有输入参数 "getTermRequest" 和返回参数 getTermResponse 的一个函数。
2、WSDL 端口
&portType& 元素是最重要的 WSDL 元素。
它可描述一个 web service、可被执行的操作,以及相关的消息。
端口定义了指向某个 web service 的连接点。可以把它元素比作传统编程语言中的一个函数库(或一个模块、或一个类),而把每个操作比作传统编程语言中的一个函数。
请求-响应是最普通的操作类型,不过 WSDL 定义了四种类型:
此操作可接受消息,但不会返回响应。
Request-response
此操走可接受一个请求并会返回一个响应
Solicit-response
此操作可发送一个请求,并会等待一个响应。
Notification
此造作可发送一条消息,但不会等待响应。
One-Way 操作
一个 one-way 操作的例子:
&message name="newTermValues"&
&part name="term" type="xs:string"/&
&part name="value" type="xs:string"/&
&/message&
&portType name="glossaryTerms"&
&operation name="setTerm"&
&input name="newTerm" message="newT
weiwei5910
浏览: 11957 次
来自: 武汉
噢耶,看到我的博客被引用了
返回的html代码
有乱码现象
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 变压器和稳压器的区别 的文章

 

随机推荐