axis2开发实例(二)建立独自的新工程
第一部分 环境搭建
1. 环境搭建
(1) 下载Axis2服务包:axis2-1.6.2-bin.zip,axis2-1.6.2-war.zip,分别解压到D:\webservice_axis2。
(2)下载myeclipse的axis2插件Axis2_Codegen_Wizard_1.3.0 和Axis2_Service_Archiver_1.3.0,一个是帮助我们生成aar文件的,另一个是帮我们用wsdl文件生成stub代码的。解压后将axis2插件包下的Axis2_Codegen_Wizard_1.3.0和Axis2_Service_Archiver_1.3.0文件夹拷贝至Myeclipse8.5\dropins 目录下,重启myeclipse生效
2. 编码 参考《http://blog.csdn.net/ge_zhiqiang/article/details/7656112》
(1)新建web工程newWebservice ,引入axis2的lib包
A、将Axis-War包解压后,把WEB-INF/下的conf,modules,services,lib拷贝到工程newWebservice 的WebRoot/WEB-INF/
B、修改web.xml,添加axis2的servlet
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>AxisAdminServlet</servlet-name> <servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class> </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>AxisAdminServlet</servlet-name> <url-pattern>/axis2-admin/*</url-pattern> </servlet-mapping> |
(2)创建service,用于发布
HelloWorldService.java
package com.service; public class HelloWorldService { public String sayHi(String helloName) { return "hi " + helloName; } } |
(3).发布service
A、右键工程名newWebservice --NewàOther,选择Axis2 Service Archiver,
B、打包编译文件,指向编译好的service文件位置,一般都是XXX\WebRoot\WEB-INF\classes,选择E:\workspaces_8.5\ newWebservice \WebRoot\WEB-INF\classes目录,记得红色标记处的勾选取消掉
Ps:这里指定位置都是WEB-INF\classes目录,因为第D步填写的service包路径就是相对于此目录的
C、下一步略过wsdl文件选择,下一步选择依赖的的jar文件,没有可不用选择,下一步自动设置service.xml配置文件,
D、下一步,填写需要发布的webservice名称以及对外开放的服务类名称(自定义),服务类名称前面要带包名,(需要手动填写service路径,点击Load)
勾选Search declared method only,可以在下面的列表框中看见我们对外发布的方法名
E、下一步,将arr文件生成在newWebservice工程的WebRoot/WEB-INF/services ,E:\workspaces_8.5\newWebservice\WebRoot\WEB-INF\services;
F、启动tomcat,访问http://localhost:8080/newWebservice/services/HelloWordService?wsdl,得到wsdl文件。
至此发布完成。
第二部分 使用客户端测试webservice
(1) 根据wsdl生成客户端,有两种方式
方式一:使用myeclipse的axis2插件Axis2 Code Generator生成客户端
方式二:使用基本的命令行方式
Ps:本人使用方式一生成的代码不能够编译,提示有问题;因此采用方式二:
(3)方式二:制作《根据wsdl生成java代码.bat》
1.在D:\webservice_axis2中,已有axis2-1.6.2-bin,目标wsdl文件如Axis2Wsdl.wsdl
新建根据wsdl生成java代码.bat,内容如下:
set JAVA_HOME=D:\Program Files\Java\jdk1.6.0_10 set AXIS2_HOME=D:\webservice_axis2\axis2-1.6.2-bin\axis2-1.6.2 set Output_Path=Testclient set Package=com.webservice.client set Wsdl_File=D:\webservice_axis2\Axis2Wsdl.wsdl %AXIS2_HOME%\bin\wsdl2java -uri %Wsdl_File% -p %Package% -s -o %Output_Path% ::一定要设置JAVA_HOME ::其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。如 http://localhost:8080/axis2/services/SimpleService?wsdl ::-p参数指定了生成的Java类的包名 ::-o参数指定了生成的一系列文件保存的根目录 @echo -------------OK----------------- @echo ---The code has been created in the folder: Testclient--- @pause |
绿色部分都是根据实际设置,执行批处理脚本生成的客户端代码会在Testclient中;
(2) 将Testclient中的src下的文件覆盖到项目Axis2Client的src下;新建测试代码
Test.java
package com.client.test; import com.webservice.client.MyServiceStub; import com.webservice.client.MyServiceStub.AddStudent; import com.webservice.client.MyServiceStub.AddStudentResponse; import com.webservice.client.MyServiceStub.AddStudents; import com.webservice.client.MyServiceStub.AddStudentsResponse; import com.webservice.client.MyServiceStub.GetGreeting; import com.webservice.client.MyServiceStub.GetGreetingResponse; import com.webservice.client.MyServiceStub.QueryStudent; import com.webservice.client.MyServiceStub.QueryStudentResponse; import com.webservice.client.MyServiceStub.QueryStudents; import com.webservice.client.MyServiceStub.QueryStudentsResponse; import com.webservice.client.MyServiceStub.Student; public class Test { public static void main(String[] ss) { // 设置远程服务调用地址 String target = "http://localhost:8080/newWebservice/services/HelloWordService"; try { // 根据地址构造用户存根 HelloWordServiceStub stub = new HelloWordServiceStub(target); SayHi sayHi = new SayHi(); sayHi.setHelloName("servyou"); SayHiResponse ggr = stub.sayHi(sayHi); // 接收方法返回值 String getResult = ggr.get_return(); System.out.println(getResult); } catch (Exception e) { e.printStackTrace(); } } |
第三部分 备注信息
备注:发布可以不生成arr文件,好处在于:经常改动代码或者添加安全控制模块如wss4j,因为经常改动 services.xml,所以这种情况最好不打包;否则最好打包发布
方法:
(1) 在/WEB-INF/services新建HelloWorldService(最好命名跟service命名一样,便于识别);
(2) 在HelloWorldService新建META-INF目录,在META-INF中建立services.xml文件
<service name="HelloWordService"> <description> Please Type your service description here </description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parametername="ServiceClass">com.service.HelloWorldService</parameter> </service> |
至此测试完毕
第四部分 补充
网上的实例基本都是将开发的service打包放到axis2中,但是在实际开发中,则不现实,不可能来回拷贝。而实际项目中存在两种可能性:A、新的web项目 B、已存在的web项目,如有需求:对外提供基于axis2的webservice,那么本实例就是演示这种情情况。
ps:可以将《axis2开发实例(一)》例子合并开发复杂类型
axis2开发实例(二)建立独自的新工程的更多相关文章
- NDK 开发实例二(添加 Eigen库)
上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...
- axis2开发实例(一)
主要参考<axis2之webservice新手超详细教程http://wenku.baidu.com/view/6eae036d011ca300a6c390a4.html> <axi ...
- Axis2开发实例
1.下载①axis2-1.7.4-bin.zip.②axis2-1.7.4-war.zip.③axis2-eclipse-service-plugin-1.7.4.zip.④axis2-eclipse ...
- Node.js 全栈开发(二)——ES 201x 新语法的使用之基础篇
在讲 ES 2015 新语法之前,先来说一下为什么叫 ES.JavaScript 是这门语言的名称,它有一个为它制定标准化的组织 European Computer Manufacturers Ass ...
- ecmall挂件开发实例二(转)
下述例子讲述了快速增加挂件的方法,但对系统中的代码未做更改,基本参照image_ad挂件的方法. 第 一步: 了解首页模板结构 首页文 件结构 include hearder.html 包含的头文件, ...
- Spring Boot 使用IntelliJ IDEA创建一个web开发实例(二)
1. 创建一个Controller类 package com.example.demo; import org.springframework.web.bind.annotation.RequestM ...
- [转贴]JAVA:RESTLET开发实例(二)使用Component、Application的REST服务
上一篇文章,我们介绍了基于JAX-RS的REST服务,本篇文章我们介绍不基于JAX-RS的模式.JAX-RS其实就是一个简单的 Application服务.和我们接下来介绍的Application基本 ...
- 《MFC游戏开发》笔记二 建立工程、调整窗口
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...
- ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...
随机推荐
- 解决UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe5 in position 108: ordinal not in range(128
今天做网页到了测试和数据库交互的地方,其中HTML和数据库都是设置成utf-8格式编码,插入到数据库中是正确的,但是当读取出来的时候就会出错,原因就是python的str默认是ascii编码,和uni ...
- 命令行调试smali
am start -D -n com.agilebits.onepassword/.activity.LoginActivity ps | grep passu0_a126 1107 217 5107 ...
- 配置Notepad++直接运行Python、Perl、C、C++、Java
运行(F5),输入命令并保存 cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT cmd ...
- 转:浏览器与WEB服务器工作过程举例
用户通过“浏览器”访问因特网上的WEB服务器,浏览器和服务器之间的信息交换使用超文本传输协议(HTTP--HyperText Transfer Protocol). 例:用户访问东南大学主页 Http ...
- 转:selenium webdriver 执行javascript代码
在用selenium webdriver 编写web页面的自动化测试代码时,可能需要执行一些javascript代码,selenium本身就支持执行js,我们在代码中import org.openqa ...
- 使用ReTrofit做缓存(结合上拉加载和下拉刷新)
1. noCache 不使用缓存,全部走网络 2. noStore 不使用缓存,也不存储缓存 3. onlyIfCached 只使用缓存 4. maxAge 设置最大失效时间,失效则不使用 需要服务器 ...
- Linux 查看 硬件配置
一:查看cpu more /proc/cpuinfo | grep "model name" grep "model name" /proc/cpuinfo 如 ...
- android adb shell 命令大全
1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...
- 转 android学习—— context 和 getApplicationContext()
在android中常常会遇到与context有关的内容 浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder( ...
- eclipse's code assist
突然发现有个类没有code assist功能了,而别的类都还有,新建的类也有,可是当把代码拷贝到新建的类还是不行:尝试了各种办法,包括删除workspace/.metadata/.plugin/org ...