
- 类 型
- 应用程序
- 平 台
- 独立平台
- 作 用
- 交换数据或集成
- 中文名
- Web Service
- 外文名
- Web Service
-
Webservice
2019-08-30 11:28:43webservice有三部分:webservice的介绍、webservice的客户端的实现方式、webservice服务端的实现方式; webservice介绍: webservice是两个系统之间的调用, 实现两个系统间数据交互,如:支付宝调用各个银行的接口...webservice有三部分:webservice的介绍、webservice的客户端的实现方式、webservice服务端的实现方式;
webservice介绍:
webservice是两个系统之间的调用, 实现两个系统间数据交互,如:支付宝调用各个银行的接口实现支付功能;我们再网站下订单时调用库存与支付系统,完成库存数据减少,同时完成订单记录与支付webservice的调用是可以跨语言的,如:c# 、C、java 、php按照一定的约定格式进行解析;
webservice的网站可以在webxml.com.cn可以查看下一些免费service服务
Socket实现服务调用:
socket是可以实现服务之间的调用,socket的服务调用使用的是TCP/IP协议,传递的是流,服务端与客户端之间可以自定义传输规范,适用于并发高,大数据量的传输;socket服务调用与webservice的比较:
传输协议:socket是使用的是TCP/IP协议,而webservice使用的是http协议,TCP/IP协议是在传输层,http协议是在网络层;传递对象:socket是传输的是流,而不接受面向对象,而webservice对传输队形进行序列化以流的形式进行传输;
webservice使用的是soap协议进行传输(soap=http+xml),不需要专门对数据流进行处理,处理场景适用: socket适用于高并发,大数据量的传输,但是传输客户端与服务端之间的协议形式需要自己定义;传输数据、格式及解析及发送数据需要程序员自己去定义,接收数据解析数据需要一一对应;socket的灵活性比较大
webservice遵循soap协议,soap=http+xml 更加适用于边界外系统之间的调用,一般传输量比较小,已经被纳入W3C的管理,更规范;
webservice是不需要专门针对传输流进行处理的,只要定义好输入就可以;jaxws可以通过面向对象开发webservice;
webservice客户端的实现方式:
通过wximport生成代码–wximport生成代码是原始的wsdl的方式实现webservice的调用;
通过客户端编程方式–客户端编程方式引用httpClient客户端,自己构建发送参数,发送格式,发送数据;
通过ajax调用方式----构建soap规范的xml发送数据,调用服务返回结果;
通过 URL Connection 方式调用 —jdk的原生调用webservice服务端的发布方式:
https://wenku.baidu.com/view/48f0bebb804d2b160a4ec0b9.html参考文档:
cxf方式,目前比较流行的方式:
xfire方式发布;
axis2发布
axis1发布 -
webservice
2018-12-27 04:13:48webservice三要素: 1.SOAP:webservice的核心传输协议。 其实本质就是基于HTTP协议, 传输一个xml格式的文档。(SOAP = HTTP + xml) 2.WSDL:是指webservice的描述语言,是用xml文档进行对接口服务进行描述的。( 就...webservice三要素:
1.SOAP:webservice的核心传输协议。 其实本质就是基于HTTP协议, 传输一个xml格式的文档。(SOAP = HTTP + xml)
2.WSDL:是指webservice的描述语言,是用xml文档进行对接口服务进行描述的。( 就相当于一个 web服务的说明书)
3.UDDI : 将所有的web服务统一的管理,方便其他人的使用和查阅。(可以简单的理解成 是一个服务的目录)
webservice客户端的调用:
1.获取服务调用地址
2.查看服务的WSDL
3.调用服务时根据WSDL生成客户端调用代码:
wsimport -d . -s . -p 包名 wsdl
-d:生成.class文件(默认)
. :生成在当前目录
-s:生成 .class文件源代码
.: 生成在当前目录
-p:指定 .class源代码存放包 后面紧跟包名
wsdl:服务wsdl使用说明书地址使用CXF框架发布webservice(SOAP):
1.引入jar包(cxf和spring)
cxf-rt-frontend-jaxws
cxf-rt-transports-http
cxf-core
2.编写webservice接口类,加入@WebService注解
3.编写webservice服务实现类,加入@WebService注解
4.发布服务 通过配置spring.xml发布webservice服务
spring-cxf.xml
web.xml
5.客户端调用使用CXF框架发布webservice(rest):
重点是理解restful风格
1.引入cxf核心jar包
jax-ws
jax-rs
2.编写webservice接口类,加入@WebService注解
3.编写webservice服务实现类,加入@WebService注解
@GET //用在方法上表示只能以get方式访问
@Path("/querywether/{aa}")
4.配置spring.xml
5.配置web.xml -
WebService
2019-06-05 23:17:37WebService (重点) WebService是一种跨编程语言和跨操作系统平台的远程调用技术。 服务端程序采用java编写,客户端程序则可以采用其他编程语言编写。跨操作系统平台则是指服务端程序和客户端程序可以在不同的...WebService
(重点)
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。服务端程序采用java编写,客户端程序则可以采用其他编程语言编写。跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
所谓远程调用,就是一台计算机a上 的一个程序可以调用到另外一台计算机b上的一个对象的方法。
譬如,银联提供给商场的pos刷卡系统,商场的POS机转账调用的转账方法的代码其实是跑在银 行服务器上。再比如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。
从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过 Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。
从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何 你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。
WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台 必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述 Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远 程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。
WebService平台技术(重点)
XML+XSD,SOAP和WSDL构成WebService的三大技术。
1、XML+XSD
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的 返回结果是什么)。XML主要的优点在于它既是平台无关的,又是厂商无关 的。
XML解决了数据表示的问题,但它没有定义一套标准的数据类型。XML Schema(XSD)定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
WebService平台就 是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。
2、SOAP
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明 HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
SOAP协议 = HTTP协议 + XML数据格式
打个比 喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
3、WSDL
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方 法可以调用。
所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
WebService开发
WebService开发可以分为服务器端开发和客户端开发两个方面。
1、服务端开发
把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。(借助一些WebService框架可以很轻松地把自己的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf 等,java ee服务器通常也支持发布WebService服务,例如JBoss。)2、客户端开发
调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。(使用厂 商的WSDL2Java之类的工具生成静态调用的代理类代码;使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用 SUN公司最新标准的jax-ws开发包。当然SUN已被ORACLE收购)。3、WebService 的工作调用原理
对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,我调用 这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap 数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来 soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成 soap格式的数据,通过http响应消息回给客户端。适用场合
1、跨防火墙通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服 务器。在这种情况下,使用DCOM就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一个用户手中。传统的做法是,选择用浏览器作为客户 端,写下一大堆ASP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。如果中间层组件换成WebService的话, 就可以从用户界面直接调用中间层组件。从大多数人的经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用WebService这种结构,可以节 省花在用户界面编程上20%的开发时间。2、应用程序集成
企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常 需要从运行在IBM主机上的程序中获取数据;或者把数据发送到主机或UNIX应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集 成起来。通过WebService,可以很容易的集成不同结构的应用程序。3、B2B集成
用WebService集成应用程序,可以使公司内部的商务处理更加自动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B集成。WebService是B2B集成成功的关键。通过WebService,公司可以把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子发票系统“暴露”出来,客户就可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购发票。当然,这并不是一个 新的概念,EDI(电子文档交换)早就是这样了。但是,WebService的实现要比EDI简单得多,而且WebService运行在Internet 上,在世界任何地方都可轻易实现,其运行成本就相对较低。不过,WebService并不像EDI那样,是文档交换或B2B集成的完整解决方案。 WebService只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。用WebService来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为WebService,就可以让任何指定 的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在B2B集成上的时间和成本,让许多原本无法承受 EDI的中小企业也能实现B2B集成。
4、软件和数据重用
软件重用是一个很大的主题,重用的形式很多,重用的程度有大有小。最基本的形式是源代码模块或者类一级的重用,一种形式是二进制形式的组件重用。采用 WebService应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用,达到业务级重用。不适用场合
1、单机应用程序
目前,企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程序通信。在这种情况下,最好就不要用WebService,只要用本地的 API就可以了。COM非常适合于在这种情况下工作,因为它既小又快。运行在同一台服务器上的服务器软件也是这样。最好直接用COM或其它本地的API来 进行应用程序间的调用。当然WebService也能用在这些场合,但那样不仅消耗太大,而且不会带来任何好处。2、局域网的同构应用程序
在许多应用中,所有的程序都是用VB或VC开发的,都在Windows平台下使用COM,都运行在同一个局域网上。例如,有两个服务器应用程序需要相互通 信,或者有一个Win32或WinForm的客户程序要连接局域网上另一个服务器的程序。在这些程序里,使用DCOM会比SOAP/HTTP有效得多。与 此相类似,如果一个.NET程序要连接到局域网上的另一个.NET程序,应该使用.NETremoting。有趣的是,在.NETremoting 中,也可以指定使用SOAP/HTTP来进行WebService调用。不过最好还是直接通过TCP进行RPC调用,那样会有效得多。https://www.cnblogs.com/xdp-gacl/p/4048937.html
https://cherryqq.iteye.com/blog/2431535
https://blog.csdn.net/tianzongnihao/article/details/79540840
https://baike.baidu.com/item/Web Service/1215039?fr=aladdin
https://www.cnblogs.com/phoebes/p/8029464.html -
-
WebService入门详解
2016-05-13 13:41:141.什么是webservice先来考虑一个问题,如果我们要在自己的程序里面展示天气预报,那怎么弄?正确的做法是我们发送一个请求到一个系统,他会给我们返回来天气情况。这个就是一个webservice。天气预报系统就相当于...1、什么是webservice
先来考虑一个问题,如果我们要在自己的程序里面展示天气预报,那怎么弄?正确的做法是我们发送一个请求到一个系统,他会给我们返回来天气情况。这个就是一个webservice。天气预报系统就相当于webservice的服务端,我们的系统就相当于客户端。如http://www.webxml.com.cn这个网站上面就列举了多个webservice服务站点
2、JAVA中如何调用别人发布的webservice
2.1、获取webservice的wsdl文档
2.11、什么是wsdl文档
wsdl跟java一样,也是一种语言,是通过xml的形式说明该webservice如何调用。
2.12、如何获取wsdl文档
通过在webservice的url后面加?wsdl的方式,比如天气预报的的就是http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
2.13、WSDL解析
Wsdl文档从下往上读
Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。(入参和出参的数据类型)
Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构(入参和出参)。
Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对(方法)。
PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持(服务类)。
Binding - 特定服务访问点与具体服务类的绑定(不看内容,看关系)。
Port - 定义为webservice单个服务访问点。
Service- 相关服务访问点的集合。2.2、通过wsdl文档生成客户端调用代码
2.21、使用jdk自带的命令生成
配置java环境变量后在命令窗口中输入wsimport –s . http://xxxx.xx.xx/xxx?wsdl即可生成java代码
注意:-s不能分开,-s后面有个小点,用于指定源代码生成的目录。点即当前目录。如果使用了-s参数则会在目录下生成两份代码,一份为.class代码。一份为.java代码。.class代码,可以经过打包以后使用。.java代码可以直接Copy到我们的项目中运行
注意:可能会报错解析组件 ‘s:schema’ 时出错。在该组件中检测到 's:schem’之类的,如果报错这个请移步:这里2.3、生成代码后如何调用
先把生成的代码复制到项目中,然后通过读wsdl文档来调用,整体的调用代码类似于下面这样
//wsdl文档中service的name SayHelloIntefaceService ss = new SayHelloIntefaceService(); //wsdl文档中portType的name SayHelloInteface shf=ss.getSayHelloIntefacePort(); //wdl文档中complexType的name String str=shf.sayhellow("lisi"); //str即为webservice的服务端返回的信息 System.out.println(str);
3、一个关于WebService的Demo
3.1、服务端
package com.bxoon; import javax.jws.WebMethod; public interface WebServiceI { @WebMethod(exclude=true) String helloWord(String name); @WebMethod(exclude=true) String helloWord2(String name); }
package com.bxoon; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class HelloWebService implements WebServiceI { @Override public String helloWord(String name) { return"Hello: "+name; } @Override public String helloWord2(String name){ return"Hello: "+name; } public static void main(String[] args) { Endpoint.publish("http://127.0.0.1:8080/helloWord",new HelloWebService()); } }
3.2 客户端
服务端启动之后通过访问http://127.0.0.1:8080/helloWord?wsdl来得到一个wsdl文档,类似于如下
然后通过命令wsimport -s . http://127.0.0.1:8080/helloWord?wsdl
来生成具体的代码,生成的代码类似于
我们把对应的java类copy到客户端项目中,得到这样的目录结构
然后我们编写图中的Client类,代码如下package com.bxoon; public class Client { public static void main(String[] args) { HelloWebServiceService service = new HelloWebServiceService(); HelloWebService webService = service.getHelloWebServicePort(); String result = webService.helloWord("11"); System.out.println(result); } }
运行之后输出结果
Hello: 11
到此,一个简单的WebService的helloword程序就完成了,下面对具体的代码进行解释。
用Jdk1.6.0_21以后的版本发布一个WebService服务.与Web服务相关的类,都位于javax.xml.ws.*包中。
主要类有:
a) @WebService - 它是一个注解,用在类上指定将此类发布成一个webservice服务.
b) Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。
static Endpoint.publish(String address, Object implementor) 在给定地址处针对指定的实现者对象创建并发布端点。stop方法用于停止服务。其他注意事项:
- 给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。
- 如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
- 如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。
- 服务类中不能没有方法
- @WebMethod(exclude=true)屏蔽方法
4、其他调用webservice的方式
这里只写了一种最基本的调用webService的方式,实际上调用webService有很多种方式,下面一一介绍。
4.11、 使用ajax调用
var xhr; function invoke(){ if(window.ActiveXObject){ xhr = new ActiveXObject("Microsoft.XMLHTTP"); }else{ xhr = new XMLHttpRequest(); } //指定请求地址 var url = "http://127.0.0.1:7777/hello?wsdl"; //定义请求类型和地址和异步 xhr.open("POST", url, true); //设置Content-Type xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8"); //指定回调方法 xhr.onreadystatechange = back; var textVal = document.getElementById("mytext").value; //组装消息体的数据 var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.hm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +'<soapenv:Body>' +'<q0:sayHello>' +'<arg0>'+textVal+'</arg0>' +'</q0:sayHello>' +'</soapenv:Body>' +'</soapenv:Envelope>'; xhr.send(data); } function back(){ if(xhr.readyState == 4){ if(xhr.status == 200){ var doc = xhr.responseXML; alert(doc); alert(xhr.responseText); var tag = doc.getElementsByTagName("return")[0]; alert(tag) } } }
4.12、通过URLConnection调用
//创建url地址 URL url = new URL("http://192.168.1.104:8080/hello"); //打开连接 URLConnection conn = url.openConnection(); //转换成HttpURL HttpURLConnection httpConn = (HttpURLConnection) conn; //打开输入输出的开关 httpConn.setDoInput(true); httpConn.setDoOutput(true); //设置请求方式 httpConn.setRequestMethod("POST"); //设置请求的头信息 httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8"); //拼接请求消息 String data = "<soapenv:Envelope xmlns:soapenv=" + "\"http://schemas.xmlsoap.org/soap/envelope/\" " + "xmlns:q0=\"http://server.rl.com/\" " + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +"<soapenv:Body>" +"<q0:sayHello>" +"<arg0>renliang</arg0> " +"</q0:sayHello>" +"</soapenv:Body>" +"</soapenv:Envelope>"; //获得输出流 OutputStream out = httpConn.getOutputStream(); //发送数据 out.write(data.getBytes()); //判断请求成功 if(httpConn.getResponseCode() == 200){ //获得输入流 InputStream in = httpConn.getInputStream(); //使用输入流的缓冲区 BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuffer sb = new StringBuffer(); String line = null; //读取输入流 while((line = reader.readLine()) != null){ sb.append(line); } //创建sax的读取器 SAXReader saxReader = new SAXReader(); //创建文档对象 Document doc = saxReader.read(new StringReader(sb.toString())); //获得请求响应return元素 List<Element> eles = doc.selectNodes("//return"); for(Element ele : eles){ System.out.println(ele.getText()); } }
4.13、使用jquery调用cxf
$(function(){ $("#mybutton").click(function(){ var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.web.cxf.rl.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +'<soapenv:Body>' +'<q0:sayHello>' +' <arg0>sss</arg0>' +' </q0:sayHello>' +'</soapenv:Body>' +'</soapenv:Envelope>'; $.ajax({ url:'http://localhost:8080/cxf-web-server/services/hello', type:'post', dataType:'xml', contentType:'text/xml;charset=UTF-8', data:data, success:function(responseText){ alert($(responseText).find('return').text()); }, error:function(){ alert("error"); } }) }) })
5、wsdl文档元素名称修改
有时,自动生成的WSDL文档的名字可能不规范,我们是可以自定义的。在注解@webservice中可以指定一些属性来完成这个功能。
@WebService( portName="myHelloService",修改端口名字 serviceName="HelloServices",修改服务访问点集合名字 name="HelloService",修改服务类的名字 targetNamespace="hello.rl.com" 修改命名空间名字 )
或者使用如下方式
@WebResult(name="sirHello")修改返回值的元素的父标签名字 @WebParam(name="sir")修改传入参数的元素的父标签名字
6、其他发布WebService的方式
其实上面说的使用jdk自带的方式发布WebService只是众多发布WebService的方式中的一种。现阶段发布方式主要有以下5种
- CXF(常用)
- Xfire(比较古老)
- Axis2 (常用)
- Axis1
- HttpClient
jws的发布对java webservice框架产生了巨大的影响,经过大浪淘沙,目前java开发webservice的框架主要包括axis2和cxf。
这篇文章介绍了发布WebService的多种方式以及实现,
下面对cxf和Axis2的使用方式做基本介绍,其他方式请自行寻找资料
6.1 CXF
6.1.1、什么是cxf
CXF全称Apache CXF,是apache基金会的一个为了简化webService开发的框架,可以让WebService的发布和调用更加简单。
Apache CXF = Celtix + Xfire
Apache CXF支持多种协议:
a) SOAP1.1,1,2
b) HTTP
c) CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
d) 并可以与Spring进行快速无缝的整合
e) 灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。6.1.2、cxf目录详解(了解)
bin(目录)
bin 目录中是 CXF 框架中所提供的代码生成、校验、管理控制台工具(可执行命令)docs(目录)
CXF 所有类(class)对应的 API 文档,为开发者使用 CXF 完成应用开发提供应有的帮助。etc(目录)
包含一个基本的 Service 暴露所需要的 web.xml 文件,及其它的配置文件。lib(目录)
lib 目录中包含 CXF 及其运行时所需要的和可选的第三方支持类包(.jar 文件),可以根据不同项目所需的 CXF 特性选择所需要的支持类包。如果不想一一去区分的话,可
以直接在 Web 项目中包含所有的 CXF 及其运行时所需要的第三方支持类包(.jar 文件)即可。
其中 cxf-2.0.2-incubator.jar 是 CXF 框架的二进制包文件,包含了全部的模块(modules),cxf-manifest-incubator.jar 是列表清单文件 manifest jar 。以下的 jar 包是所有 CXF 项目所必需的:
cxf.jar
commons-logging.jar
geronimo-activation.jar (Or the Sun equivalent)
geronimo-annotation.jar (Or the Sun equivalent)
geronimo-javamail.jar (Or the Sun equivalent)
neethi.jar
jaxb-api.jar
jaxb-impl.jar
stax-api.jar
XmlSchema.jar
wstx-asl.jar
xml-resolver.jar对于 Java2WSDL 和 WSDL2Java,除了必需的之外,还需要再增加如下 jar 包:
jaxb-xjc.jar
veliocity.jar
velocity-dep.jar为了支持 JAX-WS ,除了必需的之外,还需要再增加如下 jar 包:
jaxws-api.jar
saaj-api.jar
saaj-impl.jar
asm.jar (可选的,但是可以提升包装类型的性能)为了支持 XML 配置,除了必需的之外,还需要再增加如下 jar 包:aopalliance.jar
spring-beans.jar
spring-context.jar
spring-core.jar
spring.web.jar为了独立的 HTTP 服务支持,除了必需的之外,还需要再增加如下 jar 包:geronimo-servlet.jar
jetty.jar
jetty-sslengine.jar
jetty-util.jar
sl4j.jar & sl4j-jdk14.jar (可选的,但是可以提升日志 logging)为了支持 Aegis ,除了必需的之外,还需要再增加如下 jar 包:
jaxen.jar
jdom.jar
stax-utils.jar为了支持 WS-Security ,除了必需的之外,还需要再增加如下 jar 包:bcprov-jdk14.jar
wss4j.jar
xalan.jar
xmlsec.jar为了支持 HTTP Binding ,除了必需的之外,还需要再增加如下 jar 包:jra.jar
jettison.jar (仅为 JSON 服务所需的)licenses(目录)
列表了引用第三方 jar 包的相关许可协议。modules(目录)
modules 目录中包含了 CXF 框架根据不同特性分开进行编译的二进制包文件。发布基于 CXF 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 lib 目 录中的 cxf-2.0.2-incubator.jar 文件。samples(目录)
samples 目录中包含了所有随 CXF 二进制包发布的示例,包含这些示例的源代码和相关 Web 应用配置文件,可以方便地用 Ant 来编译运行测试这些示例,来了解 CXF 的开发和使用的方法。可以通过 samples 目录和它各个子目录下的 README.txt 的文件来详细了解示例的编译与运行的步骤。
6.1.3、使用cxf发布webservice
6.1.3.1、把cxf目录下lib下面的包全部加入到项目中
6.1.3.2、编写代码
1、创建接口
@WebService @BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) public interface SayHelloInteface { public String sayhellow(String name); }
2、创建实现类
@WebService public class SayHellowIntefaceImpl implements SayHelloInteface { @Override public String sayhellow(String name) { return name+"hello world"; } }
3、使用cxf类发布
public static void main(String[] args) { //运行 JaxWsServerFactoryBean jwsf=new JaxWsServerFactoryBean(); //CXF拦截器 jwsf.getInInterceptors().add(new LoggingInInterceptor()); jwsf.getOutInterceptors().add(new LoggingOutInterceptor()); jwsf.setAddress("http://127.0.0.1:8080/sayHello"); jwsf.setServiceClass(SayHelloInteface.class); jwsf.setServiceBean(new SayHellowIntefaceImpl()); jwsf.create(); }
6.1.4、使用cxf的wsdl2java命令生成客户端代码
wsdl2java –d . http://127.0.0.1:6666/helloworld?wsdl
6.1.5、调用
调用方式不变
SayHelloIntefaceService ss = new SayHelloIntefaceService(); SayHelloInteface shf=ss.getSayHelloIntefacePort(); String str=shf.sayhellow("lisi"); System.out.println(str);
6.2使用Axis2创建WebService服务
http://www.blogjava.net/tianchijiaozi/archive/2013/03/15/396452.html#Post
7、在web项目中发布webservice
上面是介绍了如何通过Main方法启动WebService,但在实际项目中不可能是采用main方法来启动的,那么如何在项目启动的时候启动一个WebService呢?下面介绍
-
创建服务接口在接口上加@webservice
-
创建服务接口的实现类
-
在web.xml中配置CXFServlet
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
-
配置cxf-servlet.xml
<jaxws:server id="bye" address="/bye" serviceClass="com.rl.cxf.web.inter.ByeInter"> <jaxws:serviceBean> <bean class="com.rl.cxf.web.inter.ByeInterImpl"></bean> </jaxws:serviceBean> <jaxws:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean> </jaxws:outInterceptors> <jaxws:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxws:inInterceptors> </jaxws:server>
-
使用wsdl2java生成客户端代码
-
调用webservice
8.WebService的工作原理
再说WebService之前这里先说说RPC,什么是RPC呢?
RPC(Remote Procedure Call),远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。(来自百度百科)
简单来说RPC是java中远程调用的一种技术或者约定,并不是一种具体的解决方案或者框架,而具体的框架有下面这些比较火的(排名不分先后)
- SpringCloud(Spring的,基于Socket的,SOA架构的分布式框架)
- Dubbo(x)(阿里巴巴的,基于Socket的,SOA架构的分布式框架)
- WebService(跨语言的,基于SOAP协议,走xml数据或json数据)
- Hessian(跨语言的,基于Binary-RPC协议,走二进制数据)
- HttpClient(通常用于RESTful风格的调用,跨语言,基于http和json)
- jdk原生(HttpURLConnection)
我们上面用的就是jdk原生的这种。本文也主要对这种方式的工作原理做简单解析,原理大概分为以下几个步骤
- Service端会在程序启动的时候扫描有标注@WebService的类,然后通过反射方法找到这个类的需要发布的方法,然后在用户访问wsdl文档的时候把这些东西组成SOAP协议内容然后返回给用户浏览器,用户就可以得到wsdl文档。同时服务端在启动的时候会启动一个socket用来等待客户端的连接。
- 客户端通过wsdl文档生成了代码然后在程序里面调用,实际上是通过了一个socket发送了一个请求给服务端,请求里面有指明客户端需要调用哪个类的哪个方法,以及请求参数,请求报文类似于
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:getWeather xmlns:ns1="http://fixed.adapter.solar2.erayt.com/"> <arg0>2013-06-22T18:56:43.808+08:00</arg0> </ns1:getWeather> </soap:Body> </soap:Envelope>
Webservice的通讯协议是SOAP。
8.1 SOAP协议
SOAP=http+xml、下面看一个SOAP的报文示例
可以很清楚的看到SOAP就只是把http的报文体换成了XML。- 上诉XML中描述了客户端需要调用哪个类的那个方法,服务端接收到客户端的请求之后,通过对应的信息以及参数反射调用具体的方法,最后把调用结果返回给客户端。
自此,整个WebService的调用执行完毕,客户端成功的通过远程调用的方式执行到了服务端的代码并拿到了返回值,这就是RPC
如果对笔者所述有所不明了,可以看看JAVA高级开发—webservice原理分析视频 -
Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice
2016-07-04 15:19:00浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为: 1.网络上的所有事物... -
WebService客户端几种实现方式
2018-09-09 17:54:111。发布一个webservice服务。 2。jdk原生调用方式和import生成代码 3。cxf两种调用方式。 4。axis和axis2调用方式 5。httpClient调用方式。 httpclient4.5.2 httpmime4.5.2 -
我的第一次WebService接口开发
2019-05-09 16:58:09最近项目上需要对接WebService接口,之前从来没有用过,这次都遇见了。记录下基础的使用和我遇见的问题。 正文 概述 WebService接口百度一搜,各个介绍的都非常详细,由于刚开始没接触,看的也不是很懂。首先记住一... -
Java创建WebService服务及客户端实现
2013-10-14 23:10:06简介 WebService是一种服务的提供方式,通过WebService,不同应用间相互间调用变的很方便,网络上有很多常用的WebService服务,如:...Java的WebService实现,比较流行的有Axis2、Jaxws,... -
Webservice工作原理及实例
2016-04-04 23:12:08Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI... -
WebService实例
2013-10-15 10:11:40WebService实例,包含服务端和客户端,是两个Eclipse Project,可以直接引入,详细操作参照我的博客http://blog.csdn.net/ghsau/article/details/12714965。 -
WebService技术详解 (一)
2017-07-25 18:01:18WebServiceWebService简介Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三... 简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台, -
WebService系列之Idea 创建Webservice server 和 WebService Client
2018-07-08 18:38:36WebService 作为一项流行的通信技术,被大多数应用所采用。本文将从Idea 创建WebService 的Server 和Client 开始介绍,后续将会详细介绍WebService的一系列配置,达到由浅入深的效果。一、创建WebService Server1、... -
WebService接口的生成和调用(WebService接口)
2019-03-01 13:26:23一:WebService的服务端发布 1:发布web程序服务端发布 2:本地发布 二:Webservice客户端调用: 1:本地生成代码,直接调用: 2、利用dos命令生成代码,和第一种基本一致 3:利用apache的AXIS直接调用远程... -
SpringBoot整合WebService服务
2018-11-10 13:17:48其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,把你本地的功能开放出去共别人调用。 为什么使用WebService? 简单解释一下WebService,比如你的项目需要查询... -
一个简单的webService接口发布与实现
2019-01-07 18:44:23webService是什么 1、基于web的服务,服务器整出一些资源让客户端应用访问获取数据。 2、一个跨语言、跨平台的规范。 3、多个跨平台、跨语言应用间通信整合的方案。 什么时候使用webService? 1、同一家公司新旧应用... -
Android调用WebService
2013-06-19 11:19:40最近学习的是在android端如何去调用远程WebService,都说WebService是一种基于SOAP协议的远程调用标准,对于这个协议理解不深,知道webservice可以将不同操作系统平台、不同语言、不同技术整合到一块,android SDK... -
WebServiceStudio.exe测试webservice接口工具
2018-09-25 14:20:17WebServiceStudio.exe测试webservice接口工具 下载链接 https://pan.baidu.com/s/1gf8ajS3 打开工具WebServiceStudio,如下填写地址,点击【Get】按钮 会显示出需要传参的地方,在value中填写xml... -
Web Service进阶(四)WebService注解
2015-04-08 16:08:04@WebService 1、serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。(字符串) 2、endpointInterface: 服务接口全路径, 指定做SEI(Service... -
使用WebServiceStudio测试WebService接口
2017-09-21 12:33:29调用webservice接口 -
WebService上传下载文件
2011-10-27 14:17:46用webservice作为服务器端,以流的方式实现文件的上传和下载,可以自动调用winrar进行压缩和加密,支持多线程和断点续传功能,默认是16K一个包,全部源码,已经在实际项目中应用。客户端有winform和服务两种方式的... -
POSTMAN调用webservice
2019-01-25 17:53:13比如,有一个webservice:http://chi.sha.com/sha/busheng.asmx。 要调用的话,只需要注意两点。 1、postman用post方式,header上要设置:Content-Type:text/xml;charset=utf-8 2、参数 <?xml version="... -
WebService发布与访问并通过Postman测试WebService接口
2018-03-08 11:25:16一、创建webService服务。采用appache提供的cxf开发webService服务,需要引入如下几个包1、创建工程test创建实体类package hu.liu;import lombok.Getter;import lombok.Setter;/** * @author 作者:David * @... -
webservice介绍
2018-07-30 17:33:54webService 什么是webservice? 是一种应用组件 一种开放通用协议 独立并可自我描述 可被其它应用程序使用 xml是webservice的基础 可被uddi来发现 如何工作? http协议加xml跨平台语言 webService平台的... -
Java WebService接口生成和调用 图文详解
2017-04-22 10:48:24webservice简介: Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或... -
webService-Socket和webService的区别
2019-05-06 11:41:14两者区别: Socket 是基于TCP/ip的传输层协议 Webservice是基于http协议传输数据,http是...Webservice 接口支持面向对象,最终webservice将对象进行序列化后通过流传输。 结论: Webservice采用soap协议进行通信,...
-
Solr8.7.0 Java Mysql Centos开发在线答题系统
-
三菱18MACH30G燃气发动机简介.doc
-
visual c++制作 图片跟着鼠标移动,显示鼠标移动轨迹
-
javaweb仓库出入库系统 毕业设计 毕设 源代码 使用教程
-
microsoft date and time picker control 6.0日历控件下载附带使用方法
-
【leetcode】动态规划32、64、91、221
-
手势解锁-canvas-javascript实战
-
一种支持隐私保护的加密方法在云存储中的应用
-
登录及操作数据库
-
转行做IT-第6章 IDEA、方法
-
JVM 判断对象已死,实践验证GC回收
-
30个生涯锦囊,带你跳出迷茫,找到适合你的职业方向
-
java(5)
-
基于51单片机的MLX90614红外测温仪实验指导书(含源代码)
-
FPS UE4 Unity 汇编课程
-
人工智能:深度学习入门到精通实战
-
图像工程的读书笔记 图像成像过程
-
c++string用法总结
-
CVPR2020年论文合集
-
转行做IT-第8章 类与对象、封装、构造方法