- 浏览: 157345 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
lgh1992314:
1.7public <T> List<T&g ...
Commons DbUtils 源码阅读四 -
lgh1992314:
it was too slow to call the met ...
Commons DbUtils 源码阅读四 -
lgh1992314:
toBeanList的存在位置有点变态
Commons DbUtils 源码阅读二 -
lgh1992314:
toBeanList的存在位置有点变态
Commons DbUtils 源码阅读二 -
hwwjason:
<target name="jar" ...
Apache Ant 实例介绍
在Apache Axis了解一文中,已经对Apache Axis建立了一个大概认识,在这一博文里呢,通过常用的三种方式来创建一些Axis支持的Web服务,分别为:Dynamic Invocation Interface(DII)、Dynamic Proxy以及Stubs。
DII和Dynamic Proxy这两种方式呢,一般来说,企业级的应用不是很多了,所以,主要介绍一下Stub方式:
Stubs :这个方法在企业级的应用就太广了,当然了FedEx和UPS的Axis方式,就是使用的这种,现在来介绍一个具体的例子,这里传入的参数就为一个bean实例,这其中也解决了一直头疼的:org.xml.sax.SAXException: Deserializing parameter 'arg0': could not find deserializer for type... 异常,现在正式来开始我们的stubs发布之旅:
新建一个java工程:axisStubsServiceDemo,导入相应的axis的jar包,然后我们新建一个User的类 :
private String username; private int age;
非常的简单了,就姓名和年龄两属性,getter和setter方法相当是必须的了。
然后呢,再新建一个操作该User实体的Service服务类:UserInfoService,现列出具体代码 :
/** * 添加一个用户的基本信息 * @param user 用户实例 * @return String SUCCESS/FAIL * */ public String addUser(User user){ if(null!=user){ return ReturnFlag.SUCCESS.toString(); }else{ return ReturnFlag.FAIL.toString(); } }
也没什么,就是一添加用户操作,如果转入的实体不为空,我们就认为创建成功,相当简单和不严谨的逻辑,但只为示例,所以,不深究!当然了,这两个文件都位于com.axisstubs.demo包下,把此两个类文件编译完拷贝到axis\WEB-INF\classes目录下 。
编写一deploy.wsdd文件,具体内容如下 :
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="UserInfoService" provider="java:RPC"> <parameter name="className" value="com.axisstubs.demo.UserInfoService"/> <parameter name="allowedMethods" value="*"/> </service> </deployment>
就是用于发布此UserInfoService服务了。服务名为UserInfoService,对应的类全路径为com.axisstubs.demo.UserInfoService,把此deploy.wsdd文件拷贝到WEB-INF目录下,并在此目录下,新建一generate-server-config.bat文件,具体内容如下:
set AXIS_LIB=G:\workspace\AXIS_HOME\lib set Java_CMD=java -Djava.ext.dirs=%AXIS_LIB% %Java_CMD% org.apache.axis.client.AdminClient deploy.wsdd cmd
双击运行,如果一切jar及类信息正常,你可以看到如下大概的cmd模式页面:
成功执行后,我们可以看到WEB-INF目录下多了个server-config.wsdd 文件,此文件是AXIS的服务描述文件,所以发布的服务均可在这里找到,所以,在浏览器里输入http://localhost:8080/axis/servlet/AxisServlet看看我们的服务有没有发布成功就显而易见了。如何你对AXIS以及wsdd研究得够好,你可以直接修改server-config.wsdd创建并修改Web服务。
到目前为止,AXIS的服务发布算是完成了。
现在我们来生成访问此服务的客户端:
生成访问服务器端的客户端,我们有理由相当,客户端绝对是一些类代码,在Axis的API里,有这样的两个工具类,分别为:org.apache.axis.wsdl.Java2WSDL以及org.apache.axis.wsdl.WSDL2Java,可以从这两个类看出来,Java2WSDL就是把Java类文件生成WSDL,而WSDL2Java呢,则是WSDL生成Java代码,我们的Java代码有了,客户端的代码,我们就用org.apache.axis.wsdl.WSDL2Java了,怎么获取到WSDL文件呢,既然服务已经发布了,那WSDL文件的获取自然就不在话下了:http://localhost:8080/axis/services/UserInfoService?wsdl,拷贝网页的内容到UserInfoService.wsdl并放入项目的根目录 。现在我们就来根据此wsdl文件来生成对应的客户端文件吧,为此编写了一个WSDL2Java.bat文件:
set AXIS_LIB=G:\workspace\AXIS_HOME\lib set JAVA_CMD=java -Djava.ext.dirs=%AXIS_LIB% set OUTPUT_PATH=G:\workspace\axisStubsServiceDemo\src set Package=com.axisstubs.demo.client %JAVA_CMD% org.apache.axis.wsdl.WSDL2Java -o%OUTPUT_PATH% -p%Package% UserInfoService.wsdl cmd
如果一切正常的话,那么在你的工程com.axisstubs.demo.client包下应该会生成五个文件,分别为:User.java、UserInfoService_PortType.java、UserInfoServiceSerivce.java、UserInfoServiceServiceLocator.java以及UserInfoServiceSoapBindingStub.java 。
OK,所有的一切都已准备就绪了,就差运行测试了哇,传入不为空的User实例,返回SUCCESS,否则返回FAIL:
UserInfoServiceService service = new UserInfoServiceServiceLocator();//Service UserInfoServiceSoapBindingStub client = new UserInfoServiceSoapBindingStub(new URL(service.getUserInfoServiceAddress()),service); User user = new User(); user.setUsername("kevin cui"); user.setAge(25); String retValue = client.addUser(user); System.out.println(retValue);
运行结果如下:
Exception in thread "main" AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXException: Deserializing parameter 'user': could not find deserializer for type {http://localhost:8080/axis/services/UserInfoService}User faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}hostname:cuics
出错了。它是在告诉我们,在反序列化user参数的时侯找不到反序列化User类型,没有注册序列化和反序化?对的:
在server-config.wsdd的UserInfoService服务里加入如下:
<typeMapping deserializer = "org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/" qname = "ns1:User" serializer = "org.apache.axis.encoding.ser.BeanSerializerFactory" type = "java:com.axisstubs.demo.User" xmlns:ns1 = "http://localhost:8080/axis/services/UserInfoService"/>
重启服务,运行:
SUCCESS
噢耶,搞定!对自定义bean类未注册,通常是导致我们无法成功运行的原因,此问题也困扰了我好长时间,google了好久才找到,希望对大家会有所帮助。另附上源代码:axisStubsServiceDemo.rar
发表评论
-
Spring SpringMVC MyBatis MVN
2011-11-23 22:29 0突然想起用maven了,虽然早在今年上半年就有买了本书在看 ... -
Apache Lucene3.0 入门实例介绍
2011-05-24 23:02 1876咱这搞技术活儿的吧 ... -
Commons Logging 源码解析二
2011-05-18 22:52 0我们说过,Commons Loggi ... -
Commons Logging 源码解析一
2011-05-15 22:43 2079最近一段日子可真是够忙的,项目上线终于开始有回报了!一直要 ... -
Commons FileUpload 源码解析二
2011-04-14 23:03 0FileItemFactory: /** * ... -
Commons FileUpload 源码解析一
2011-04-14 20:39 0Commons FileUpload?! 哇噢~可以这样说 ... -
JExcelAPI(jxl)读写Excel应用
2011-04-04 23:51 10241这篇博文在我的草 ... -
Apache Axis了解
2011-03-04 22:16 1501最近项目到了最最关键的时刻了,客户的试用期也快结束了,客户 ... -
Commons DbUtils源码阅读之实例及测试应用
2011-02-23 22:39 1933去年整了一Commons DbUtils的源码阅读,现如今 ... -
Apache Ant常用标签介绍
2011-02-20 22:24 4807在上一篇博文中简单介绍了一下Ant是如何编译和发布Java ... -
Apache Ant 实例介绍
2011-02-17 22:55 4466开开心心的过了个年,快快乐乐的过了个情人节!So,继续我技 ... -
Commons DbUtils 源码阅读八
2011-01-19 21:39 1843距离DbUtils组件源码七 ... -
Commons DbUtils 源码阅读七
2011-01-03 13:36 2077实际上,我们也知道官网上对ResultSet的解析示例: ... -
Commons DbUtils 源码阅读六
2010-12-24 23:27 1706DbUtils组件的核心部分已经解析完了,实际上呢,DbUt ... -
Commons DbUtils 源码阅读五
2010-12-13 21:31 5848关于DbUtils,我们深入剖析了对ResultSet解析 ... -
Commons DbUtils 源码阅读四
2010-12-03 19:51 2484在读BasicRowProcessor ... -
Commons DbUtils 源码阅读三
2010-11-29 22:26 3083前两天着实被javaeye关闭着急了一下,还好,总算开放了 ... -
Commons DbUtils 源码阅读二
2010-11-19 21:17 1906DbUtils组件的整个代码结构做了一个简单的疏导,现在来 ... -
Commons DbUtils 源码阅读一
2010-11-17 22:51 2964想起读源码了! 主要是出于这几个方面的考虑: ...
相关推荐
1. **易用性**:Apache Axis提供了一套简单的API和命令行工具,使得开发者能够快速地创建、发布和调用Web服务,无需深入理解底层的复杂技术。 2. **自动代码生成**:基于WSDL,Axis能自动生成服务端的Java stubs和...
6. **创建服务代码**:在Eclipse中创建一个新的Java项目,然后编写`Person`类和服务接口。例如,我们可以创建两个方法`sayHello()`和`add()`。 7. **打包成AAR文件**:使用Eclipse的Axis2插件,选择`New > Other > ...
总结来说,`org.apache.axis.jar`是Apache Axis框架的关键组成部分,它为Java开发者提供了创建、部署和消费Web服务的强大工具。理解并掌握如何使用这个库,将有助于提高开发Web服务的效率和质量。
这通常涉及创建服务代理对象,然后调用相应的方法,如`getWeatherByCityName(String cityName)`,传入城市名来获取天气信息。 5. **处理返回数据**: Web服务返回的数据通常是XML格式,客户端需要解析这些数据以...
Apache Axis 是一个开源的Web服务框架,主要用于创建和部署Web服务。它支持SOAP(Simple Object Access Protocol)协议,使得应用程序可以通过网络进行通信。本部分的用户指南主要关注如何在Axis中利用WSDL(Web ...
Apache Axis1.4是Apache软件基金会开发的一个开源Web服务框架,专门用于构建和部署Web服务。这个框架在2004年发布,虽然现在已经有些老旧,但因其稳定性、广泛支持和丰富的功能,仍然在很多项目中被使用。本文将深入...
在"axisDemoClientService"这个压缩包中,很可能包含了一个示例客户端和服务端的项目,用于演示如何使用Apache Axis创建和调用Web服务。这个示例通常会包括以下部分: - 客户端代码:展示了如何使用Axis生成的...
Apache Axis2是Apache软件基金会下的一款开源、高性能的Web服务框架,它支持SOAP协议,并且兼容JAX-WS(Java API for XML Web Services)规范。Axis2是Apache Axis的一个重大升级版本,提供了更丰富的功能、更高的...
- `samples/`目录包含了一些示例代码,帮助开发者了解如何使用Axis创建和调用Web服务。 - `docs/`目录可能有API文档和其他技术文档,便于开发者查阅。 - `build.xml`是Ant构建文件,用于构建和打包Axis项目。 - `...
三、使用Apache Axis1.4创建Web服务 1. **定义服务接口**:编写Java接口,指定操作方法。 2. **实现服务接口**:编写实现接口的Java类,实现业务逻辑。 3. **生成WSDL**:使用Axis工具生成WSDL文件,描述服务的接口...
在标题和描述中提到的“axis2的jar包和例子”,这表明我们将探讨Apache Axis2的核心组件以及如何使用它来创建和消费Web服务。Apache Axis2的jar包包含了运行Web服务所需的所有核心库,这些库涵盖了处理SOAP消息、...
《使用Apache Axis开发Web服务》这本书提供了深入浅出的教程,帮助读者轻松掌握如何使用Apache Axis来创建Web服务,并理解相关的标准和技术。 #### 书籍特点与优势 本书以易于理解的教程风格编写,采用逐步引导的...
2. **创建服务**:Axis2提供了一种简单的方法来创建和部署Web服务。这可能涉及到编写服务接口和实现,然后使用Axis2的代码生成工具将它们转换为服务。你将学习如何使用服务描述文件(如WSDL)来定义服务接口。 3. *...
Apache Axis 是一个流行的开源Web服务框架,主要用于Java平台。它为开发者提供了在Java应用程序中创建、部署和使用Web服务的能力。这个压缩包“基于Java的Web服务框架 Apache Axis.zip”很可能包含了Apache Axis的...
例如,创建一个计算两数之和的服务,编写Java类,使用Axis工具生成WSDL,然后在客户端使用SOAP请求调用服务,获取结果。 总结,Apache Axis作为Java Web服务框架,提供了一整套构建、部署和管理Web服务的工具,极大...
Apache Axis 是一个开源的Web服务框架,主要用于创建和部署SOAP(简单对象访问协议)服务。在Web服务领域,Apache Axis 提供了一种高效且灵活的方式来实现客户端和服务器端的通信。1.2RC2是该版本的一个候选发布版本...
- **创建Web服务**:通过编写Java类并使用特定的注解,Axis1.4可以自动将其暴露为SOAP服务。 - **消费Web服务**:使用Axis1.4提供的客户端工具,可以自动生成Java客户端代理类,方便调用远程SOAP服务。 - **处理WSDL...