java调用webService的各种方法Word下载.docx
- 文档编号:18980609
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:7
- 大小:19.16KB
java调用webService的各种方法Word下载.docx
《java调用webService的各种方法Word下载.docx》由会员分享,可在线阅读,更多相关《java调用webService的各种方法Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
3.使用javaHello.Hello运行,然后将浏览器指向http:
8080/hello?
wsdl就会出现下列显示
4.使用wsimport生成客户端
使用如下:
wsimport-p.-keephttp:
wsdl
这时,会在当前目录中生成如下文件:
5.客户端程序:
1classHelloClient{
2publicstaticvoidmain(Stringargs[]){
3HelloServiceservice=newHelloService();
4HellohelloProxy=service.getHelloPort();
5Stringhello=helloProxy.hello("
你好"
);
6System.out.println(hello);
7}
8}
9
以上方法还稍显繁琐,还有更加简单的方法
二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的
利用xfire开发WebService,可以有三种方法:
1一种是从javabean中生成;
2一种是从wsdl文件中生成;
3还有一种是自己建立webservice
步骤如下:
用myeclipse建立webservice工程,目录结构如下:
首先建立webservice接口,
代码如下:
1packagecom.myeclipse.wsExample;
2//GeneratedbyMyEclipse
3
4publicinterfaceIHelloWorldService{
5
6
publicStringexample(Stringmessage);
7
8}
接着实现这个借口:
1packagecom.myeclipse.wsExample;
4publicclassHelloWorldServiceImplimplementsIHelloWorldService{
publicStringexample(Stringmessage){
returnmessage;
8
}
9
10}
修改service.xml文件,加入以下代码:
1<
service>
2
<
name>
HelloWorldService<
/name>
3
serviceClass>
4
com.myeclipse.wsExample.IHelloWorldService
/serviceClass>
implementationClass>
com.myeclipse.wsExample.HelloWorldServiceImpl
/implementationClass>
style>
wrapped<
/style>
10
use>
literal<
/use>
11
scope>
application<
/scope>
12
/service>
把整个项目部署到tomcat服务器中,打开浏览器,输入http:
8989/HelloWorld/services/HelloWorldService?
wsdl,可以看到如下:
然后再展开HelloWorldService后面的wsdl可以看到:
客户端实现如下:
1packagecom.myeclipse.wsExample.client;
2
3import.MalformedURLException;
4import.URL;
5
6importorg.codehaus.xfire.XFireFactory;
7importorg.codehaus.xfire.client.Client;
8importorg.codehaus.xfire.client.XFireProxyFactory;
9importorg.codehaus.xfire.service.Service;
10importorg.codehaus.xfire.service.binding.ObjectServiceFactory;
11
12importcom.myeclipse.wsExample.IHelloWorldService;
13
14publicclassHelloWorldClient{
15publicstaticvoidmain(String[]args)throwsMalformedURLException,Exception{
16//TODOAuto-generatedmethodstub
17Services=newObjectServiceFactory().create(IHelloWorldService.class);
18XFireProxyFactoryxf=newXFireProxyFactory(XFireFactory.newInstance().getXFire());
19Stringurl="
8989/HelloWorld/services/HelloWorldService"
20
21
try
22
{
23
24
IHelloWorldServicehs=(IHelloWorldService)xf.create(s,url);
25
Stringst=hs.example("
zhangjin"
26
System.out.print(st);
27
28
catch(Exceptione)
29
{
30
e.printStackTrace();
31
32
33
34}
35
这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:
1publicstaticvoidmain(String[]args)throwsMalformedURLException,Exception{
//TODOAuto-generatedmethodstub
Services=newObjectServiceFactory().create(IHelloWorldService.class);
XFireProxyFactoryxf=newXFireProxyFactory(XFireFactory.newInstance().getXFire());
7//远程调用.net开发的webservice
8Clientc=newClient(newURL("
Object[]o=c.invoke("
qqCheckOnline"
newString[]{"
531086641"
"
591284436"
});
11//调用.net本机开发的webservice
12Clientc1=newClient(newURL("
//localhost/zj/Service.asmx?
wsdl"
));
13Object[]o1=c1.invoke("
HelloWorld"
newString[]{});
14
15}
三、使用axis1.4调用webservice方法
前提条件:
下载axis1.4包和tomcat服务器
,并将axis文件夹复制到tomcat服务器的webapp文件夹中
这里我就说一下最简单的方法:
首先建立一个任意的java类(例如:
HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http:
8989/axis/HelloWorld.jws?
wsdl,就会得到一个wsdl文件,其客户端调用方法如下:
1importjavax.xml.rpc.Service;
2importjavax.xml.rpc.ServiceException;
3importjavax.xml.rpc.ServiceFactory;
4
5import.MalformedURLException;
6import.URL;
7importjava.rmi.RemoteException;
8
9importjavax.xml.namespace.QName;
10
11publicclassTestHelloWorld{
12
publicstaticvoidmain(String[]args)throwsMalformedURLException,ServiceException,RemoteException{
15
16
17
StringwsdlUrl="
18
StringnameSpaceUri="
8989/axis/HelloWorld.jws"
19
StringserviceName="
HelloWorldService"
20
StringportName="
ServiceFactoryserviceFactory=ServiceFactory.newInstance();
ServiceafService=serviceFactory.createService(newURL(wsdlUrl),newQName(nameSpaceUri,serviceName));
HelloWorldInterfaceproxy=(HelloWorldInterface)afService.getPort(newQName(nameSpaceUri,portName),HelloWorldInterface.class);
System.out.println("
returnvalueis"
+proxy.getName("
john"
));
28
29}
30四、使用axis2开发webservice(这里首先感谢李宁老师)
使用axis2需要先下载
axis2-1.4.1-bin.zip
axis2-1.4.1-war.zip
//ws.apache.org/axis2/
同理,也需要将axis2复制到webapp目录中
在axis2中部署webservice有两种方法,
第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明
下面分别说明使用方法:
1.pojo方式:
在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
其中POJO中所有的public方法将被发布成WebService方法。
先实现一个pojo类:
1publicclassHelloWorld{
publicStringgetName(Stringname)
return"
你好"
+name;
publicintadd(inta,intb)
returna+b;
10}
由于这两个方法都是public类型,所以都会发布成webservice。
编译HelloWorld类后,将HelloWorld.class文件放到%tomcat%\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录),然后打开浏览器进行测试:
输入一下url:
8080/axis2/services/listServices
会列出所有webservice
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
1packageMZ.GetWebService;
2importjavax.xml.namespace.QName;
4importorg.apache.axis2.AxisFault;
5importorg.apache.axis2.addressing.EndpointReference;
6importorg.apache.axis2.client.Options;
7importorg.apache.axis2.rpc.client.RPCServiceClient;
9
10publicclassGetWSByAxis2{
privatestaticStringEndPointUrl;
privatestaticStringQUrl="
//ws.apache.org/axis2"
13
privateQNameopAddEntry;
publicStringWSUrl;
publicRPCServiceClientsetOption()throwsAxisFault
RPCServiceClientserviceClient=newRPCServiceClient();
Optionsoptions=serviceClient.getOptions();
EndpointReferencetargetEPR=newEndpointReference(WSUrl);
options.setTo(targetEPR);
returnserviceClient;
publicQNamegetQname(StringOption){
returnnewQName(QUrl,Option);
28//返回String
publicStringgetStr(StringOption)throwsAxisFault
RPCServiceClientserviceClient=this.setOption();
33
opAddEntry=this.getQname(Option);
34
Stringstr=(String)serviceClient.invokeBlocking(opAddEntry,
36
newObject[]{},newClass[]{String.class})[0];
37
returnstr;
38
39//返回一维String数组
40
publicString[]getArray(StringOption)throwsAxisFault
41
42
43
44
45
46
String[]strArray=(String[])serviceClient.invokeBlocking(opAddEntry,
47
newObject[]{},newClass[]{String[].class})[0];
48
returnstrArray;
49
50
//从WebService中返回一个对象的实例
51
publicObjectgetObject(StringOption,Objecto)throwsAxisFault
52
{
53
54
QNameqname=this.getQname(Option);
55
Objectobject=serviceClient.invokeBlocking(qname,newObject[]{},newClass[]{o.getClass()})[0];
56
returnobject;
57
58
59/////////////////////////////////////////
读者可以自己封装数据类型,如int,byte,float等数据类型
60}
61客户端调用方法:
MZ.GetWebService.GetWSByAxis2ws=newMZ.GetWebService.GetWSByAxis2();
ws.WSUrl="
8989/axis2/services/HelloWorld"
HelloWorldhello=(HelloWorld)ws.getObject("
getName"
HelloWorld.class);
System.out.println(hello.getName("
2.使用service.xml发布webservice,这种方式和直接放在pojo目录中的POJO类不同。
要想将MyService类发布成WebService,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:
servicename="
>
description>
HelloWorldwebservice
/description>
parametername="
ServiceClass"
service.HelloWorld
/parameter>
messageReceivers>
messageReceivermep="
//www.w3.org/2004/08/wsdl/in-out"
class="
org.apache.axis2.rpc.receivers.RPCMessageReceiver"
/>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 调用 webService 各种 方法