100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java调用webservice axis

java调用webservice axis

时间:2020-09-23 13:14:59

相关推荐

java调用webservice axis

webservice,先让我们来理解一下这个名词。简单点说调用其他网站的资源的一种方法。所以,通俗地说,Web service(Web服务)就是让你的网站可以使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。

本地服务与web服务

本地服务,显然和web服务相对应,完成一项任务,若不需要调用其他网站上得资源,都靠本地资源来完成,我们就把这个称为"本地服务",打个比方,我肚子饿了,我可以自己做饭(本地),也可以打电话订一份快餐(web)来填饱肚子。

为什么要用webservice?

首先本地服务有一定的缺陷:资源不足,Internet最大的优势就是资源共享;成本因素,包括硬件和人员;可移植性不好;

其次,webservice有相当的优势:平台无关,无论什么平台都可以用web服务;与编程语言无关,只要遵守相关协议,就可以使用任何编程语言,向其他网站申请web服务等等之类的优势。

下面我们开始发布一个web服务

发布webservice有两种方式:即时发布和定制发布,定制发布比即时发布稍显复杂,但是也更加灵活,所以我用都是采用定制发布方式。Axis是Apache的一个开源web service引擎。它目前最为成熟的开源web service引擎之一。我们这里介绍利用Axis来发布一个web服务。

1)首先我们要准备以下jar包:axis.jar、commons-logging-1.1.jar、commons-discovery-0.2.jar、jaxrpc.jar、saaj.jar、wsdl4j-1.5.1.jar,activation.jar、mail.jar这些jar包大家都可以到这个网站上去下载 /index.x输入你想要得jar包,即可搜索到,下载。

2)编写服务端程序server:egpackage p1;public class Hello {public String SayHello(String name){return "hello"+name;}}

3)编写deploy.wsdd文件:eg

<deployment xmlns="/axis/wsdd/" xmlns:java="/axis/wsdd/providers/java"><service name="Hello" provider="java:RPC"><parameter name="className" value="p1.Hello"/><parameter name="allowedMethods" value="*"/></service></deployment>

4)发布服务

编辑一个deploy.bat文件(我是放在与web-inf同一目录下):内容如下:

set Axis_Lib=D:/Workspace03/releaseByAxis/WEB-INF/lib

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%

set Axis_Servlet=http://localhost:8080/releaseByAxis/servlet/AxisServlet

%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

这样的话,可能有些人会出现无法找到类之类得异常,原因就是没有在classpath中加载需要得jar包。所以如果出现此错误,需要在上面内容中加上set classPath=……目录.jar

如果出现:

Processing file deploy.wsdd

<Admin>Done processing</Admin>

那么恭喜你,你已经成功发布一个服务了。同时在同级目录下会产生一个server-config.wsdd文件,这里给出了我们发布的service的具体信息。

当然也会出现问题,比如我在测试得时候,在这一步骤就会出现:

Exception: AxisFault

faultCode: {/axis/}HTTP

faultSubcode:

faultString: (404)/axis/servlet/AxisServlet

faultActor:

faultNode:

faultDetail:

{}:return code: 404

错误,那是因为我还没有配置好web.xml,所以如果出现这个问题,那么我们就需要将官方的web.xml文件拷贝到web-inf下。官方xml内容:

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN" "/dtd/web-app_2_3.dtd"><web-app><display-name>Apache-Axis</display-name><listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><display-name>Apache-Axis Servlet</display-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><display-name>Axis Admin Servlet</display-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><display-name>SOAPMonitorService</display-name><servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><!--<servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping>--><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/TR//WD-wsdl12-0303/#ietf-draftfor now we go with the basic 'it's XML' response --><mime-mapping><extension>wsdl</extension><mime-type>text/xml</mime-type></mime-mapping><mime-mapping><extension>xsd</extension><mime-type>text/xml</mime-type></mime-mapping><welcome-file-list id="WelcomeFileList"><welcome-file>index.jsp</welcome-file><welcome-file>index.html</welcome-file><welcome-file>index.jws</welcome-file></welcome-file-list></web-app>

这样我们就可以在浏览器中访问我们发布得服务了,http://localhost:8080/releaseByAxis/servlet/AxisServlet

二、编写客户端,访问web服务

1)在浏览器端访问服务器端的服务,那么可以下载到其webservice,通过axis相关工具,可以自动从wsdl文件中生成webservice客户端代码。

set classpath=……jar

set Axis_Lib=D:/Workspace03/releaseByAxis/WEB-INF/lib

set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%

set Output_Path=D:/Workspace03/releaseByAxis/src

set Package=p1.SayHello

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

执行完该批处理后,即可生成client stub,生成的列表包括Hello.java,HelloService.java,HelloServiceLocator.java,HelloSoapBindingStub.java。

也可以不用下载,直接转换,eg:这是一个天气预报得服务

Java -classpath E:……jar org.apache.axis.wsdl.WSDL2Java /WebServices/WeatherWebService.asmx?WSDL

得到这些列表后,接下来便是相当于在本机中进行方法调用,贴上一段代码:

2)public static void main(String[] args) {HelloService hs=new HelloServiceLocator();try {HelloSoapBindingStub hsbs=(HelloSoapBindingStub)hs.getHello();System.out.println(hsbs.sayHello("xhf"));} catch (ServiceException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

至此,一套完整的流程就结束了。共同学习!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。