java调用webservice axis
2010-02-23 11:14
363 查看
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包大家都可以到这个网站上去下载 http://www.findjar.com/index.x 输入你想要得jar包,即可搜索到,下载。
2)编写服务端程序server:eg
3)编写deploy.wsdd文件:eg
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: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (404)/axis/servlet/AxisServlet
faultActor:
faultNode:
faultDetail:
{}:return code: 404
错误,那是因为我还没有配置好web.xml,所以如果出现这个问题,那么我们就需要将官方的web.xml文件拷贝到web-inf下。官方xml内容:
这样我们就可以在浏览器中访问我们发布得服务了,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 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?WSDL 得到这些列表后,接下来便是相当于在本机中进行方法调用,贴上一段代码:
2)
至此,一套完整的流程就结束了。共同学习!
本地服务与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包大家都可以到这个网站上去下载 http://www.findjar.com/index.x 输入你想要得jar包,即可搜索到,下载。
2)编写服务端程序server:eg
package p1; public class Hello { public String SayHello(String name) { return "hello"+name; } }
3)编写deploy.wsdd文件:eg
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/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: {http://xml.apache.org/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 Web Application 2.3//EN" "http://java.sun.com/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; http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft for 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 http://www.webxml.com.cn/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 block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
至此,一套完整的流程就结束了。共同学习!
相关文章推荐
- java调用webservice WSDL形式接口之apache axis方式调用(一)
- axis调用java实现webservice实例
- java 通过Axis调用Webservice
- C# 调用JAVA(使用axis)开发的webservice 提示错误的问题
- Java调用使用SSL/HTTPS协议来传输的axis webservice服务
- JAVA中使用axis调用.net WebService
- java调用webservice用是axis还是xfire的,两种调用方法不同
- Java,AXIS,webService 调用 完整实例 xml 入参出参
- Java利用Axis远程调用WebService接口
- Java_使用axis1.4调用WebService简单示例
- java使用axis调用webservice时出现Connection reset by peer: socket write error的一种解决方法
- java调用webservice WSDL形式接口之apache axis方式调用(一)
- (转)Java通过axis调用WebService
- java调用.NET的webservice实例的二种方法soap方式axis模式
- Java通过axis调用WebService
- Java调用WebService之Axis实现
- java 调用webservice采用axis方式时候无法找到参数注意事项
- java axis调用WebService 服务端,客户端
- java调用webservice WSDL形式接口之apache axis方式调用(一)
- java中使用axis发布和调用webService及dom4j解析xml字符串