为什么说说webservice呢?
如今soa炒得火热,各大公司招聘都在要求懂soa技术,虽然大的概念是面向架构服务,说白了就是服务整合,把以前的老应用跟新应用通信,实现应用集成。具体实现技术为webservice。
webservice是什么?
webservice 提供的接口传递数据格式借助xml数据包传递的,基于soap对象访问协议,并且请求都遵行http协议,由于每中语言,对xml 数据包都遵行这一规则,这就提供了,不同开发平台下、不同系统的接口调用与访问。
规则与协议:
1.XML:描述数据的标准方法.
3.WSDL:Web服务描述语言.
4.uddi(Universal Description,discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。
2.
使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws目录
3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
这时,会在当前目录中生成如下文件:
5.客户端程序:
以上方法还稍显繁琐,还有更加简单的方法
二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的
利用xfire开发WebService,可以有三种方法:
1一种是从javabean 中生成;
2 一种是从wsdl文件中生成;
3 还有一种是自己建立webservice
步骤如下:
用myeclipse建立webservice工程,目录结构如下:
代码如下:
webservice实现方式(转自:http://blog.163.com/yexuan_1/blog/static/13436609920121833513679/):
一、利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务
1.首先建立一个Web services EndPoint:
3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
这时,会在当前目录中生成如下文件:
5.客户端程序:
1
2
4
5
6
7
8
9
2
4
5
6
7
8
9
以上方法还稍显繁琐,还有更加简单的方法
二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的
利用xfire开发WebService,可以有三种方法:
1一种是从javabean 中生成;
2 一种是从wsdl文件中生成;
3 还有一种是自己建立webservice
步骤如下:
用myeclipse建立webservice工程,目录结构如下:
@H_414_404@
首先建立webservice接口,代码如下:
1
2
接着实现这个借口:
2
1
8
910 修改service.xml 文件,加入以下代码:
客户端实现如下:
8
910 修改service.xml 文件,加入以下代码:
<
service
>
5 6 implementationClass 7
8 9 style wrapped 10 use literal 11 scope application 12
把整个项目部署到tomcat服务器中 ,打开浏览器,输入
http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl
,可以看到如下:
5 6 implementationClass 7
8 9 style wrapped 10 use literal 11 scope application 12
客户端实现如下:
com.myeclipse.wsExample.client;
java.net.MalformedURLException;
java.net.URL;
org.codehaus.xfire.XFireFactory;
org.codehaus.xfire.client.Client;
org.codehaus.xfire.client.XFireProxyFactory;
org.codehaus.xfire.service.Service;
org.codehaus.xfire.service.binding.ObjectServiceFactory;
com.myeclipse.wsExample.IHelloWorldService;
13 14
18
19
20
21try22
23
24
25
27
29
3132333435 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:
java.net.MalformedURLException;
java.net.URL;
org.codehaus.xfire.XFireFactory;
org.codehaus.xfire.client.Client;
org.codehaus.xfire.client.XFireProxyFactory;
org.codehaus.xfire.service.Service;
org.codehaus.xfire.service.binding.ObjectServiceFactory;
com.myeclipse.wsExample.IHelloWorldService;
13 14
18
19
20
21try22
23
24
25
27
29
3132333435 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:
1
//远程调用.net开发的webserviceClient c Client( URL(http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl));
前提条件:下载axis1.4包和tomcat服务器 ,并将axis文件夹复制到tomcat服务器的webapp文件夹中
这里我就说一下最简单的方法:
首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入 http://localhost:8989/axis/HelloWorld.jws?wsdl ,就会得到一个wsdl文件,其客户端调用方法如下:
//远程调用.net开发的webserviceClient c Client( URL(http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl));
前提条件:下载axis1.4包和tomcat服务器 ,并将axis文件夹复制到tomcat服务器的webapp文件夹中
这里我就说一下最简单的方法:
首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入 http://localhost:8989/axis/HelloWorld.jws?wsdl ,就会得到一个wsdl文件,其客户端调用方法如下:
javax.xml.rpc.Service;
javax.xml.rpc.ServiceException;
javax.xml.rpc.ServiceFactory;
java.rmi.remoteexception;
javax.xml.namespace.QName;
30 四、使用axis2开发webservice(这里首先感谢李宁老师)
使用axis2 需要先下载
同理,也需要将axis2复制到webapp目录中
在axis2中部署webservice有两种方法,
第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明
下面分别说明使用方法:
1.pojo方式: 在 Axis2 中不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService 。其中 中所有的 public 方法将被发布成 方法。先实现一个pojo类:
输入一下url:
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/myService?wsdl
除此之外,还有直接可以在其中制定webservice操作方法:可以这样些service.xml文件
operation name messageReceiver operation add messageReceiver
javax.xml.rpc.ServiceException;
javax.xml.rpc.ServiceFactory;
java.rmi.remoteexception;
javax.xml.namespace.QName;
30 四、使用axis2开发webservice(这里首先感谢李宁老师)
使用axis2 需要先下载
axis2-1.4.1-bin.zip
axis2-1.4.1-war.zip
http://ws.apache.org/axis2/同理,也需要将axis2复制到webapp目录中
在axis2中部署webservice有两种方法,
第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明
下面分别说明使用方法:
1.pojo方式: 在 Axis2 中不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService 。其中 中所有的 public 方法将被发布成 方法。先实现一个pojo类:
1
int add( a,0)"> b)
由于这两个方法都是public类型,所以都会发布成webservice。
编译
HelloWorld
类后,将
HelloWorld.class
文件放到%tomcat%
\webapps\axis2\WEB-INF\pojo
目录中(如果没有
pojo
目录,则建立该目录),然后打开浏览器进行测试:int add( a,0)"> b)
输入一下url:
http://localhost:8080/axis2/services/listServices
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
MZ.GetWebService;
org.apache.axis2.AxisFault;
org.apache.axis2.addressing.EndpointReference;
org.apache.axis2.client.Options;
org.apache.axis2.rpc.client.RPCServiceClient;
String QUrlhttp://ws.apache.org/axis2 QName opAddEntry;
String WSUrl;
RPCServiceClient setoption() AxisFault
QName (QUrl,Option);
35
36
37
38
4950从WebService中返回一个对象的实例51 Object getobject(String Option,Object o) 52
53
575859///////////////////////////////////////// 读者可以自己封装数据类型,如int,byte,float等数据类型60
MZ.GetWebService.GetWSByAxis2 ws = new MZ.GetWebService.GetWSByAxis2();
2.使用service.xml发布webservice,
这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在meta-inf目录中,该文件的内容如下:
org.apache.axis2.AxisFault;
org.apache.axis2.addressing.EndpointReference;
org.apache.axis2.client.Options;
org.apache.axis2.rpc.client.RPCServiceClient;
String QUrlhttp://ws.apache.org/axis2 QName opAddEntry;
String WSUrl;
RPCServiceClient setoption() AxisFault
QName (QUrl,Option);
35
36
37
38
4950从WebService中返回一个对象的实例51 Object getobject(String Option,Object o) 52
53
575859///////////////////////////////////////// 读者可以自己封装数据类型,如int,byte,float等数据类型60
MZ.GetWebService.GetWSByAxis2 ws = new MZ.GetWebService.GetWSByAxis2();
service name
HelloWorld
其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/myService?wsdl
除此之外,还有直接可以在其中制定webservice操作方法:可以这样些service.xml文件
operation name messageReceiver operation add messageReceiver
以上纯属个人理解,如有疑义,欢迎大家拍砖啊!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。