日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 读取webservice_java 调用webService的各种方法

發布時間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 读取webservice_java 调用webService的各种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、利用jdk web服務api實現,這里使用基于 SOAP message 的 Web 服務

1.首先建立一個Web services EndPoint:

package?Hello;

import?javax.jws.WebService;

import?javax.jws.WebMethod;

import?javax.xml.ws.Endpoint;

@WebService

public?class?Hello?{

@WebMethod

public?String?hello(String?name)?{

return?"Hello,?"?+?name?+?"\n";

}

public?static?void?main(String[]?args)?{

//?create?and?publish?an?endpoint

Hello?hello?=?new?Hello();

Endpoint?endpoint?=?Endpoint.publish("http://localhost:8080/hello",?hello);

}

}

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.客戶端程序:

1class?HelloClient{

2public?static?void?main(String?args[])?{

3??HelloService?service?=?new?HelloService();

4??Hello?helloProxy?=?service.getHelloPort();

5??String?hello?=?helloProxy.hello("你好");

6??System.out.println(hello);

7??}

8}

9

以上方法還稍顯繁瑣,還有更加簡單的方法

二、使用xfire,我這里使用的是myeclipse集成的xfire進行測試的

利用xfire開發WebService,可以有三種方法:

1一種是從javabean 中生成;

2 一種是從wsdl文件中生成;

3 還有一種是自己建立webservice

步驟如下:

用myeclipse建立webservice工程,目錄結構如下:

首先建立webservice接口,

代碼如下:

1package?com.myeclipse.wsExample;

2//Generated?by?MyEclipse

3

4public?interface?IHelloWorldService?{

5

6????public?String?example(String?message);

7

8}

接著實現這個借口:

1package?com.myeclipse.wsExample;

2//Generated?by?MyEclipse

3

4public?class?HelloWorldServiceImpl?implements?IHelloWorldService?{

5

6????public?String?example(String?message)?{

7????????return?message;

8????}

9

10}

修改service.xml?文件,加入以下代碼:

1

2????????HelloWorldService

3????????

4????????????com.myeclipse.wsExample.IHelloWorldService

5????????

6????????

7????????????com.myeclipse.wsExample.HelloWorldServiceImpl

8????????

9????????

10????????literal

11????????application

12????

把整個項目部署到tomcat服務器中?,打開瀏覽器,輸入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:

然后再展開HelloWorldService后面的wsdl可以看到:

客戶端實現如下:

1package?com.myeclipse.wsExample.client;

2

3import?java.net.MalformedURLException;

4import?java.net.URL;

5

6import?org.codehaus.xfire.XFireFactory;

7import?org.codehaus.xfire.client.Client;

8import?org.codehaus.xfire.client.XFireProxyFactory;

9import?org.codehaus.xfire.service.Service;

10import?org.codehaus.xfire.service.binding.ObjectServiceFactory;

11

12import?com.myeclipse.wsExample.IHelloWorldService;

13

14public?class?HelloWorldClient?{

15public?static?void?main(String[]?args)?throws?MalformedURLException,?Exception?{

16//?TODO?Auto-generated?method?stub

17Service?s=new?ObjectServiceFactory().create(IHelloWorldService.class);

18XFireProxyFactory?xf=new?XFireProxyFactory(XFireFactory.newInstance().getXFire());

19String?url="http://localhost:8989/HelloWorld/services/HelloWorldService";

20

21????????try

22????????{

23

24????????????IHelloWorldService?hs=(IHelloWorldService)?xf.create(s,url);

25????????????String?st=hs.example("zhangjin");

26????????????System.out.print(st);

27????????}

28????????catch(Exception?e)

29????????{

30????????????e.printStackTrace();

31????????}

32????}

33

34}

35

這里再說點題外話,有時候我們知道一個wsdl地址,比如想用java客戶端引用.net?做得webservice,使用myeclipse引用,但是卻出現無法通過驗證的錯誤,這時我們可以直接在類中引用,步驟如下:

1public?static?void?main(String[]?args)?throws?MalformedURLException,?Exception?{

2????????//?TODO?Auto-generated?method?stub

3????????Service?s=new?ObjectServiceFactory().create(IHelloWorldService.class);

4????????XFireProxyFactory?xf=new?XFireProxyFactory(XFireFactory.newInstance().getXFire());

5

6

7//遠程調用.net開發的webservice

8Client?c=new?Client(new?URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));

9????????Object[]?o=c.invoke("qqCheckOnline",?new?String[]{"531086641","591284436"});

10

11//調用.net本機開發的webservice

12Client?c1=new?Client(new?URL("http://localhost/zj/Service.asmx?wsdl"));

13Object[]?o1=c1.invoke("HelloWorld",new?String[]{});

14

15}

三、使用axis1.4調用webservice方法

前提條件:下載axis1.4包和tomcat服務器???,并將axis文件夾復制到tomcat服務器的webapp文件夾中

這里我就說一下最簡單的方法:

首先建立一個任意的java類(例如:HelloWorld.java),復制到axis文件夾下,將其擴展名改為jws,然后重新啟動tomcat,在瀏覽器中輸入http://localhost:8989/axis/HelloWorld.jws?wsdl,就會得到一個wsdl文件,其客戶端調用方法如下:

1import?javax.xml.rpc.Service;

2import?javax.xml.rpc.ServiceException;

3import?javax.xml.rpc.ServiceFactory;

4

5import?java.net.MalformedURLException;

6import?java.net.URL;

7import?java.rmi.RemoteException;

8

9import?javax.xml.namespace.QName;

10

11public?class?TestHelloWorld?{

12

13

14????public?static?void?main(String[]?args)?throws?MalformedURLException,?ServiceException,?RemoteException?{

15????????//?TODO?Auto-generated?method?stub

16

17????????String?wsdlUrl?="http://localhost:8989/axis/HelloWorld.jws?wsdl";

18????????String?nameSpaceUri?="http://localhost:8989/axis/HelloWorld.jws";

19????????String?serviceName?=?"HelloWorldService";

20????????String?portName?=?"HelloWorld";

21

22????????ServiceFactory?serviceFactory?=?ServiceFactory.newInstance();

23????????Service?afService?=serviceFactory.createService(new?URL(wsdlUrl),new?QName(nameSpaceUri,?serviceName));

24????????HelloWorldInterface?proxy?=?(HelloWorldInterface)afService.getPort(new?QName(nameSpaceUri,?portName),HelloWorldInterface.class);

25????????System.out.println("return?value?is?"+proxy.getName("john")?)?;

26

27????}

28

29}

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。其中POJO中所有的public方法將被發布成WebService方法。先實現一個pojo類:

1public?class?HelloWorld{

2????public?String?getName(String?name)

3????{

4????????return?"你好?"?+?name;

5????}

6????public?int?add(int?a,int?b)

7????{

8????????return?a+b;

9????}

10}

11

由于這兩個方法都是public類型,所以都會發布成webservice。編譯HelloWorld類后,將HelloWorld.class文件放到%tomcat%\webapps\axis2\WEB-INF\pojo目錄中(如果沒有pojo目錄,則建立該目錄),然后打開瀏覽器進行測試:

輸入一下url:

會列出所有webservice

這是其中的兩個webservice列表,接著,在客戶端進行測試:

首先可以寫一個封裝類,減少編碼,代碼如下:

1package?MZ.GetWebService;

2import?javax.xml.namespace.QName;

3

4import?org.apache.axis2.AxisFault;

5import?org.apache.axis2.addressing.EndpointReference;

6import?org.apache.axis2.client.Options;

7import?org.apache.axis2.rpc.client.RPCServiceClient;

8

9

10public?class?GetWSByAxis2?{

11??????private?static?String?EndPointUrl;

12??????private?static?String?QUrl="http://ws.apache.org/axis2";

13??????private?QName?opAddEntry;

14??????public?String?WSUrl;

15??????public?RPCServiceClient?setOption()?throws?AxisFault

16??????{

17??????????RPCServiceClient?serviceClient?=?new?RPCServiceClient();

18??????????Options?options?=?serviceClient.getOptions();

19??????????EndpointReference?targetEPR?=?new?EndpointReference(WSUrl);

20??????????options.setTo(targetEPR);

21??????????return?serviceClient;

22??????}

23

24??????public?QName?getQname(String?Option){

25

26??????????return?new?QName?(QUrl,Option);

27??????}

28?//返回String

29??????public?String?getStr(String?Option)?throws?AxisFault

30??????{

31??????????RPCServiceClient?serviceClient?=this.setOption();

32

33??????????opAddEntry?=this.getQname(Option);

34

35?????????String?str?=?(String)?serviceClient.invokeBlocking(opAddEntry,

36??????????????????????????new?Object[]{},?new?Class[]{String.class?})[0];

37?????????return?str;

38?????}

39//?返回一維String數組

40??????public?String[]?getArray(String?Option)?throws?AxisFault

41??????{

42??????????RPCServiceClient?serviceClient?=this.setOption();

43

44??????????opAddEntry?=this.getQname(Option);

45

46?????????String[]?strArray?=?(String[])?serviceClient.invokeBlocking(opAddEntry,

47??????????????????????????new?Object[]{},?new?Class[]{String[].class?})[0];

48?????????return?strArray;

49?????}

50??????//從WebService中返回一個對象的實例

51?????public?Object?getObject(String?Option,Object?o)?throws?AxisFault

52?????{

53????????RPCServiceClient?serviceClient?=this.setOption();

54?????????QName?qname=this.getQname(Option);

55?????????Object?object?=?serviceClient.invokeBlocking(qname,?new?Object[]{},new?Class[]{o.getClass()})[0];

56?????????return?object;

57?????}

58

59/???????讀者可以自己封裝數據類型,如int,byte,float等數據類型

60}

61

客戶端調用方法:

MZ.GetWebService.GetWSByAxis2?ws=new?MZ.GetWebService.GetWSByAxis2();

ws.WSUrl="http://localhost:8989/axis2/services/HelloWorld";

HelloWorld?hello=?(HelloWorld)ws.getObject("getName",?HelloWorld.class);

System.out.println(hello.getName("zhangjin"));

2.使用service.xml發布webservice,這種方式和直接放在pojo目錄中的POJO類不同。要想將MyService類發布成Web Service,需要一個services.xml文件,這個文件需要放在META-INF目錄中,該文件的內容如下:

HelloWorld?webservice

service.HelloWorld

class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"?/>

class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"?/>

其中元素用于發布Web Service,一個元素只能發布一個WebService類,name屬性表示WebService名,如下面的URL可以獲得這個WebService的WSDL內容:

http://localhost:8080/axis2/services/myService?wsdl

除此之外,還有直接可以在其中制定webservice操作方法:可以這樣些service.xml文件

1

2????

3???????HelloWorld?service

4????

5????

6????????service.HelloWorld

7????

8????

9????????

10????

11????

12????????

13????????????class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"?/>

14????

15

16

如果要發布多個webservice,可以在文件兩段加上...發布

總結

以上是生活随笔為你收集整理的java 读取webservice_java 调用webService的各种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。