使用Axis1.4开发WebService服务端与客户端

honeylocu

贡献于2012-09-27

字数:7434 关键词: WEB服务/RPC/SOA

使用Axis1.4开发Web Service服务端与客户端 一、开发环境 Eclipse Java EE IDE for Web Developers Weblogic 8.1 JDK 1.4 Axis 1.4 二、Axis简介 axis全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎(例如Tomcat)的服务器。 下载1.4 Final 链接地址: http://ws.apache.org/axis/ 三、Java开发Webservice 示例 Axis支持三种WebService 的部署和开发,分别为: 1、Dynamic Invocation Interface(DII)方式 2、Dynamic Proxy方式 3、Stubs方式 Stubs方式是最通用的做法,又因其灵活的特点,建议使用这种方式。 下面是详细的开发步骤: 1) 创建web工程 1、Eclipse创建web project,取名为axistest; 2、将下载下来的axis其axis-1_4\lib目录下的jar拷贝到ib目录下,将这些jar引入到axistest classpath 下, 2) 编写Server 程序 1、新建class,包取名:server类名:HelloServer,声明sayHello方法,具体代码如下: Java代码 package Server; /** * 服务端 * @author xulei * */ public class HelloServer { public String sayHello(String name) { System.out.println("----------调用sayHello()----------"); return "Hello, " + name; } } 2、配置web.xml web.xml文件很容易配置,拷贝axis包里面的WebService示例的web.xml配置到我们的工程中的web.xml中就可以了,配置如下: index.jsp org.apache.axis.transport.http.AxisHTTPSessionListener AxisServlet Apache-Axis Servlet org.apache.axis.transport.http.AxisServlet AdminServlet Axis Admin Servlet org.apache.axis.transport.http.AdminServlet 100 SOAPMonitorService SOAPMonitorService org.apache.axis.monitor.SOAPMonitorService SOAPMonitorPort 5001 100 AxisServlet /servlet/AxisServlet AxisServlet *.jws AxisServlet /services/* SOAPMonitorService /SOAPMonitor AdminServlet /servlet/AdminServlet 5 wsdl text/xml xsd text/xml 3) 部署 web project 利用Eclipse部署工具将我们的项目部署到weblogic8下 4) 创建 deploy.wsdd文件 这个文件可以在任意目录下创建,但是为了维护方便 ,我将它创建在axistest项目Src:目录下: 示例代码: 5) 生成 server-config.wsdd 文件 server-config.wsdd 文件是WebService的核心配置文件。Web服务能否发布,很大程度上取决于次文件的配置。 这里需要写个批处理脚本deploy.bat: set Axis_Lib=E:\DBIC\sourcecode\axistest\axistest\WEB-INF\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Axis_Servlet=http://localhost:7001/axistest/servlet/AxisServlet %Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd pause; 接下来,在执行deploy.bat前,请确保Weblogic8服务已运行,否则在Dos命令窗口中看到错误; 运行成功后,已经在Tomcat\webapps\axistest\WEB-INF目录下生成了server-config.wsdd文件. (Activation.jar 和 mail.jar这两个包虽然没有加入到CLASSPATH中,但是不影响开发。) 好了, webservice 发布成功了,重启Weblogic8,来测试一下,看是否发布成功,在IE上输入: http://localhost:7001/axistest/services/helloserver?wsdl 看到如图结果表明发布成功: 6) 生成客户端Client wsdl文件 在IE上输入: http://localhost:7001 /axistest/services/helloserver?wsdl ,点击文件 → 另存为到axistest 项目Src目录下, 7) 使用Wsdl2Java工具生成客户端 为了方便,写个批处理脚本 WSDL2Java.bat set Axis_Lib=E:\DBIC\sourcecode\axistest\axistest\WEB-INF\lib set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% set Output_Path=E:\DBIC\sourcecode\axistest\src set Package=Client %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% helloserver.wsdl pause; 解释下此命令: %Output_Path%是客户端文件输出路径,%Package%是包名 这时可以看到 axistest工程下已经生成了客户端程序,如图: 8) 客户端测试代码 Java代码 package Test; import java.net.URL; import Client.HelloServer; import Client.HelloServerService; import Client.HelloServerServiceLocator; /** * 测试服务端 * @author xulei * */ public class TestHello { /** * @param args */ public static void main(String[] args) { HelloServerService service = null; HelloServer helloServer = null; try { System.out.println("connect......"); String StrPortAddress = "http://localhost:7001/axistest/services/helloserver"; URL portAddress = new URL(StrPortAddress); // 得到客户端服务 service = new HelloServerServiceLocator(); // 得到客户端stub helloServer = service.gethelloserver(portAddress); // 测试服务方法 String resultStr = helloServer.sayHello("iteye"); System.out.println(resultStr); } catch (Exception e) { e.printStackTrace(); } } public void test() { HelloServerService service = null; HelloServer helloServer = null; try { System.out.println("connect......"); String StrPortAddress="http://localhost:7001/axistest/services/helloserver"; URL portAddress = new URL(StrPortAddress); // 得到客户端服务 service = new HelloServerServiceLocator(); // 得到客户端stub helloServer = service.gethelloserver(portAddress); // 测试服务方法 String resultStr = helloServer.sayHello("iteye"); System.out.println(resultStr); } catch (Exception e) { e.printStackTrace(); } } } 9) 解决axis与weblogic8冲突问题 问题原因: WebLogic 8.1 ships with webservices.jar that conflicts with Axis' saaj.jar and prevents Axis 1.2 from working right out of the box. This conflict exists because WebLogic uses an older definition of javax.xml.soap.* package from Java Web Services Developer Pack Version 1.0, whereas Axis uses a newer revision from J2EE 1.4. 解决方法: However, there are two alternative configuration changes that enable Axis based web services to run on Weblogic 8.1. In a webapp containing Axis, set element in WEB-INF/weblogic.xml to true. An example of weblogic.xml is shown below: true If set to true, the element will force WebLogic's classloader to load classes located in the WEB-INF directory of a web application in preference to application or system classes. This is a recommended approach since it only impacts a single web module. In a script used to start WebLogic server, modify CLASSPATH property by placing Axis's saaj.jar library in front of WebLogic's webservices.jar. 来自Axis官方网站 解决方法参考 http://www.blogjava.net/soddabao/archive/2006/11/24/83134.html 实际方法,在WEB-INF目录下增加weblogic.xml来解决优先加载axis下的saaj.jar 具体内容如下: true 四、开发成果 源码结构: 源代码包

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
6 人已下载

下载文档

相关文档