公司决定将自己的产品对外提供web service。收集了很长时间资料,查了很多关于web service相关的信息结合我们公司产品的特点,总结出了一些小经验供我日后回忆和正在受axis2折磨中的兄弟们借鉴。下面就开始吧!
1.WS Framework框架的选择
网上有很多资深的评论家早已对这个问题做出了很精辟的总结,我在这说纯属废话。我选择axis2的原因很简单,公司产品是基于古老的JDK1.4开发的。CXF最新版本只支持1.5的JDK,而axis2支持1.4的!我想就这一个原因足以构成选择axis2的结果了吧。
2.构建axis2.war
网上很多文章都是基于tomcat怎么去发布axis2的,但是稍微大一点的系统人家都喜欢买个WebSphere来玩玩。用tomcat感觉想看不起他们一样! 下面介绍一下在WebSphere构建你的axis2.war。
从 http://ws.apache.org/axis2/download/1_0/download.cgi 网站下载AXIS2 1.3。现在的版本是1.4。如果用1.4的话控制台在运行时会有一个JDK版本的错报出来,查了一下网上说是因为runtime的JDK跟Compiler的JDK不匹配。个人觉得这个解释就是扯淡,我不至于粗心到这个地步吧。但是确实是一起服务就报错。姑且相信他的说法,换了个版本还真好了。
注意: 如果你现在用的是WSAD5.1.2,那么我不幸的告诉你我还没有研究出来。在WSAD5.1.2里存在一个包冲突的问题。原因是WSAD5.1.2加载的时候会加载一个javax.xml.namespace.QName这么个类,具体在哪个包里我没找到。然后axis2 1.3也会去加载这个类。但是WSAD5.1.2加载的一个老版本的QName,所以axis2 1.3用不起来就报一个 java.lang.NoSuchMethodError的错。网上有人说把类加载方式改成PARENT_LAST,我试过了不起作用。折腾了好长时间,由于时间是宝贵的我不想浪费到这个恶心的问题上就没去深入研究了。后来我用的是RAD 6,虽然这是个很恶心的IDE但是起码能让我顺利部署axis2。
在RAD6里你自己的工程下新建一个axis2的web项目,把下载下来的压缩文件解开后里面的东西很下面的文档结构导入到workspace里。
|-----WebContent |---------WEB-INF | |-----------conf | | |---------axis2.xml | |-----------lib(all jar) | |-----------modules | | | ---------addressing-1.3.mar | | |--------- ... | |-----------services | | |---------services.list | | |---------version.aar | |-----------web.xml |----------axis2-web
然后将axis2.war模块添加到你的工程里就OK了!
3.开发服务器端web service
跟具需要总结出需要对外提供的service,然后建service。举个小例子
package com.cs.test; public class WSTest{ public String sayHello(String value) { System.out.println("Web Service HelloWorldService: " + value); //具体service的实现类 WSTestImpl wsimpl = new WSTestImpl(); wsimpl.doservice(); return value; } }
4.在工程下面新建一个文件夹META-INF ,并在其中建一个services.xml 内容如下:
<service> <parameter name="ServiceClass" locked="false"> com.cs.test.WSTest </parameter> <operation name="sayHello"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>
5.web service打包
将刚才开发的web service和META-INF中的services.xml选择导出,导出为jar。然后在路径里将文件名改成WSTest.aar
6.发布web service
浏览器里访问http://localhost:9080/axis2/ ,里面的Administration。用户名为admin,密码为axis2。然后upload你的aar文件。正常情况会upload成功,然后返还home后点services会看到你发布的WSTest的web service。
7.集成axis2到你自己的web中。
在你自己的web.xml里加上axis2的servlet和servlet mapping的配置,然后在classpath里加入axis2的所以jar包就OK了!
8.生产客户端程序
引用:StockQuoteService类创建客户端的四种方式: 构建基于AXIOM的客户端;使用Axis2 Databinding Frame work(ADB)生成客户端;使用XMLBeans生成客户端;使用JiBX生成客户端。 ADB:最简单的生成Axis客户端的方法。大部分情况下,这些主要的类都会以内部类的形式创建在stub类中。It is not meant to be a full schema binding application, and has difficulty with structures such as XML Schema element extensions and restrictions。 XMLBeans:与ADB不同,他是一个全功能的schema编译器。他没有ADB的限制。然而,他也比ADB用起来更复杂。他会产成大量的文件,编程模型不如ADB直观。 JiBX:他是一个数据绑定框架。他不仅提供了WSDL-JAVA的转换,而且提供了JAVA-XML的转换。JiBX相当灵活,允许你选择类来代表你的实体,但是这个却不好做,但还句话说,如果这些都能建好,那么使用JiBX就更使用ADB一样容易。 对于简单应用来说ADB已经够用了,如果想用更加强大更加灵活的功能,那么你可能需要使用其他两种方式。
用CMD命令 进入到%AXIS2_HOME%/bin目录下运行:
wsdl2java.bat -uri http://localhost:9080/axis2/services/WSTest?wsdl -o D:\ -p com.cs.test -d abd
将会在 D:\ 中生成一个src\com\cs\test包 ,将其中的两个JAVA (ExceptionException0.java和WSTestStub.java )拷导入到 另一个测试客户端的工程中进行测试.
我们需要建一个测试类来掉我们发布的web service,内容如下:
package com.cs.test; import com.cs.test.SayHelloStub.SayHello; public class Client{ public static void main(java.lang.String args[]){ try{ SayHelloStub stub = new SayHelloStub (http://localhost:9080/MyWeb/services/SayHello); SayHello user = new SayHello(); user.setValue("Terry"); com.cs.test.SayHelloStub.SayHelloResponse res = stub.sayHello(user); System.out.println(res.get_return()); } catch(Exception e){ e.printStackTrace(); System.out.println("\n\n\n"); } } }
上面的操作在正常情况下可以正常运行,遇到特殊问题还要特殊对待。
关于WSAD5.1.2包不兼容的问题已经找到解决方法了,更换WSAD5.1.2自身lib下有一个qname.jar的文件。次qname.jar里只有一个class,javax.xml.namespace.QName。但是版本比较老,里面有好多方法没有。下载个新版本的放在qname.jar里替换原来的就行了!不会影响内置WAS的启动。而且能解决部署问题。
qname.jar的路径为%WSAD_PATH%\WebSphere Studio\Application Developer\v5.1.2\runtimes\base_v51\lib
分享到:
相关推荐
【Apache Axis2与Eclipse开发Web服务总结】 Apache Axis2是一个强大的SOAP引擎,它是Apache Axis的升级版,致力于提供更模块化、灵活且高效的Web服务框架。Axis2的设计旨在更好地支持Web服务标准和协议,例如WS-...
标题中的“axis2和axis2+spring发布服务指南”指的是如何使用Apache Axis2框架结合Spring框架来部署和发布Web服务。Axis2是Apache软件基金会开发的一个用于构建和部署Web服务的开源框架,它基于Java语言并支持SOAP和...
总结来说,这篇文章详细阐述了在MyEclipse环境中使用Axis2和Tomcat搭建Web服务的步骤,适合初学者了解和实践Web服务的部署和开发。整个过程涵盖了从环境配置到服务发布的一系列操作,对于理解Web服务的生命周期管理...
总结来说,这个过程涵盖了开发、配置和部署Web服务的整个流程,包括了从安装必要的工具到编写服务实现,再到发布和验证服务的每一步。通过这样的实践,开发者可以更好地理解和掌握基于axis2的Web服务开发和部署技术...
【标题】"Axis2+EJB整合开发 源代码"涉及的是在Java环境中,使用Axis2框架与Enterprise JavaBeans(EJB)技术进行Web服务整合的实践案例。这个标题暗示了我们将深入理解如何将EJB的功能集成到基于Axis2的Web服务中,...
4. **部署服务**:将Spring配置文件和Axis2服务档案(SAR文件)打包到一个WAR文件中,然后部署到支持Servlet容器(如Tomcat)上。 5. **调用服务**:客户端可以通过标准的SOAP请求来调用服务,或者使用Spring的...
Apache Axis2是用于构建Web服务和SOA(Service-Oriented Architecture)的高性能、灵活的开源框架,而Spring是一个广泛使用的Java应用框架,尤其在企业级应用开发中,它提供了依赖注入、数据访问、事务管理等功能。...
3. **服务部署**:熟悉如何在Spring的ApplicationContext中定义服务类,以及如何将服务部署到Axis2运行时。 4. **会话管理**:理解HTTP会话在Web服务中的挑战,因为Web服务通常是无状态的。学习如何使用Axis2的会话...
通过这个过程,我们学会了如何利用Axis2和MyEclipse开发Web服务,包括服务接口定义、服务实现、部署及测试。这为我们提供了基础的Web服务开发能力,进一步可以扩展到更复杂的业务场景,如安全机制、消息编码、服务...
标题中的"axis2+spring+ibatis"是一个典型的Java企业级应用架构组合,它涉及到三个主要的技术组件:Apache Axis2、Spring框架和iBATIS。接下来,我们将详细探讨这三个技术以及它们在项目集成中的作用。 1. Apache ...
1. **axis2.war**:这是Axis2的Web应用程序档案,包含了运行Axis2服务所需的全部资源,可以直接部署到支持Servlet 2.3或更高版本的Web服务器上。 2. **release-notes.html**:包含了Axis2的发行说明,详细列出了...
同时,提供的文档“axis2+spring发布webservice总结文档.docx”应该包含了详细的总结和实践经验,可以帮助深入理解这一技术栈的应用。 总的来说,使用Axis2和Spring发布Web服务是一种常见的实践,它结合了两者的...
下面我们将逐步讲解如何在Eclipse集成开发环境中,结合Tomcat服务器,使用Axis2来创建并部署Web服务。 1. **下载与解压Axis2**: 首先,你需要从官方网站或者指定链接下载Axis2的发行版,例如axis2-1.1.1.zip,并...
Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结
总结来说,Axis2安装和部署涉及多个步骤,包括环境准备、软件安装、Web服务开发工具的集成、服务的打包和部署以及最后的验证。熟悉这些流程对于开发和维护基于Axis2的Web服务至关重要。通过这个过程,开发者能够快速...