- 浏览: 132606 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
spp_1987:
然后没了?
axis2对应jar的maven配置 -
tmbfe:
有用,谢谢!!
在Eclipse中创建maven项目出现的环境警告 j2se-1.5 -
fuyu_oo:
多谢多谢多谢
在Eclipse中创建maven项目出现的环境警告 j2se-1.5 -
haiou33:
麻烦问下 你这问题解决没 ,我先也出现了这个问题,还没找到合适 ...
axis2 File "/axis2-web/listSingleService.jsp" not found -
sachxp:
感谢PO主,帮了我大忙,特意登录感谢。@xieyongwei ...
在Eclipse中创建maven项目出现的环境警告 j2se-1.5
Web Service是实现SOA(Service-Oriented Architecture)面向服务架构的技术,而Axis2是实现Web Service的一种技术框架(架构)。
先去apache官网上下载axis2-1.6.2-bin和axis2-1.6.2-war
下载地址:http://axis.apache.org/axis2/java/core/download.cgi
配置AXIS2的环境变量
将axis2-1.6.2-bin.zip解压
在环境变量里面配置AXIS2_HOME指向你的axis路径就行了。
解压axis2-1.6.2-war并将解压出来的axis2.war解压到tomcat的webapps中
访问:http://localhost:8082/axis2/端口自己改成自己的tomcat的端口就行了,
看到Welcome!就说明成功了。
WebService发布方式
我们先打开axis2\WEB-INF\conf下的axis2.xml。
有一段配置:
hotdeployment 是热发布,就是不需要重新启动Tomcat就可以自动发布WebService。
但不等于更新了该webService,如果你想更新,还得重新启动Tomcat,这对于我们程序员来说,非常不方便,下面这个配置都解决了这个问题:hotupdate热更新,默认为false 改为true即可。
1.无包路径的发布方式:
将TestService 编译得到.class文件后,将class文件放到webapps\axis2\WEB-INF\pojo
中去,如果pojo不存在则创建它。
这样我们就将这个Service发布上去了。
在浏览器输入:http://localhost:8082/axis2/services/listServices 见下图:
红框中则是我们发布的Webservice。
输入以下url:
http://localhost:8082/axis2/services/TestService/getName?name=xxx
http://localhost:8082/axis2/services/TestService/helloWorld
pojo是axis2默认的目录:
你可以添加你想要的目录:
但是这些目录中的类不要重复,不然要报错。
2.有包路径的发布方式:
显然,不带包的发布方式肯定不满足我们的需求。 为此,Axis2也允许将带包的POJO类发布成WebService,见例子:
1) 首先我们编写一个带包的POJO类:
2) 编写一个services.xml,这个文件需要放在META-INF目录中。
<!-- axis 配置 -->
在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。
例如,sayHello方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,
而updateName方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
使用这种方式发布WebService,我们需要将这2个文件打包成.aar文件
目录结构:
在cmd中进入到test的目录,输入以下命令:
jar cvf test.aar .
ps:注意上面命令中后面的.
最后将 test.aar文件复制到\webapps\axis2\WEB-INF\services目录中,
启动Tomcat后,就可以调用这个WebService了。
如果你有多个service的话,则需要用<serviceGroup>
客户端调用webservice
先建立一个简单的pojo类:
发布该webService并能成功调用。编写客户端代码调用:
http://localhost:8082/axis2/services/EmployeeInfo是你的Service EPR路径。
http://webservice.jynine.com这个是你访问http://localhost:8082/axis2/services/EmployeeInfo?wsdl后的那个targetNamespace。
输出结果为:
也可以用RPC方式调用WebService
ps:当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。
如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
输出结果为:Jim
wsdl2java
也可以根据wsdl2java来简化我们客户端
在cmd中输入
则在你的当前目录下就会生成一个generator目录,在generator\src\com\jynine\webservice中就会找到一个EmployeeInfoStub.java
我们就可以用这个类来编写客户端:
输出结果为:Rose
代码是不是简单多了。
用adb生成客户端:
同理还有xmlbeans:
JiBX:
axis2相关的包的maven配置http://jynine.iteye.com/blog/1893677。
先去apache官网上下载axis2-1.6.2-bin和axis2-1.6.2-war
下载地址:http://axis.apache.org/axis2/java/core/download.cgi
配置AXIS2的环境变量
将axis2-1.6.2-bin.zip解压
在环境变量里面配置AXIS2_HOME指向你的axis路径就行了。
解压axis2-1.6.2-war并将解压出来的axis2.war解压到tomcat的webapps中
访问:http://localhost:8082/axis2/端口自己改成自己的tomcat的端口就行了,
看到Welcome!就说明成功了。
WebService发布方式
我们先打开axis2\WEB-INF\conf下的axis2.xml。
有一段配置:
<parameter name="hotdeployment">true</parameter> <parameter name="hotupdate">false</parameter>
hotdeployment 是热发布,就是不需要重新启动Tomcat就可以自动发布WebService。
但不等于更新了该webService,如果你想更新,还得重新启动Tomcat,这对于我们程序员来说,非常不方便,下面这个配置都解决了这个问题:hotupdate热更新,默认为false 改为true即可。
1.无包路径的发布方式:
public class TestService { public String getName(String name){ return name; } public String helloWorld(){ return "hello world!"; } }
将TestService 编译得到.class文件后,将class文件放到webapps\axis2\WEB-INF\pojo
中去,如果pojo不存在则创建它。
这样我们就将这个Service发布上去了。
在浏览器输入:http://localhost:8082/axis2/services/listServices 见下图:
红框中则是我们发布的Webservice。
输入以下url:
http://localhost:8082/axis2/services/TestService/getName?name=xxx
<ns:getNameResponse> <return>xxx</return> </ns:getNameResponse>
http://localhost:8082/axis2/services/TestService/helloWorld
<ns:helloWorldResponse> <return>hello world!</return> </ns:helloWorldResponse>
pojo是axis2默认的目录:
<deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
你可以添加你想要的目录:
<deployer extension=".class" directory="xxx" class="org.apache.axis2.deployment.POJODeployer"/>
但是这些目录中的类不要重复,不然要报错。
2.有包路径的发布方式:
显然,不带包的发布方式肯定不满足我们的需求。 为此,Axis2也允许将带包的POJO类发布成WebService,见例子:
1) 首先我们编写一个带包的POJO类:
package com.jynine.webservice; public class AxisService { public String sayHello(){ return "hello"; } public String saygoodBye(String name){ return "Good Bye "+name +"!"; } public void updateName(String name){ System.out.println("Update "+name+" !"); } }
2) 编写一个services.xml,这个文件需要放在META-INF目录中。
<!-- axis 配置 -->
<service name="AxisService"> <description> Web Service例子 </description> <parameter name="ServiceClass"> com.jynine.webservice.AxisService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>
在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。
例如,sayHello方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,
而updateName方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
使用这种方式发布WebService,我们需要将这2个文件打包成.aar文件
目录结构:
- test - META-INF - services.xml - com - jynine - webservice - AxisService.class
在cmd中进入到test的目录,输入以下命令:
jar cvf test.aar .
ps:注意上面命令中后面的.
最后将 test.aar文件复制到\webapps\axis2\WEB-INF\services目录中,
启动Tomcat后,就可以调用这个WebService了。
如果你有多个service的话,则需要用<serviceGroup>
<serviceGroup> <service name="AxisService"> <description> Web Service例子 </description> <parameter name="ServiceClass"> com.jynine.webservice.AxisService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service> <service name="SimpleAxisService"> <description> 简单的axis服务 </description> <parameter name="ServiceClass"> com.jynine.webservice.SimpleAxisService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service> </serviceGroup>
客户端调用webservice
先建立一个简单的pojo类:
package com.jynine.webservice; import java.util.HashMap; import java.util.Map; /** * Axis webService 例子 * @author jynine * */ public class EmployeeInfo { private Map<String, String> map = new HashMap<String, String>(); /** * 初始化 */ private void initEmployee(){ map.put("1000", "Tom"); map.put("1001", "Jim"); map.put("1002", "Rose"); map.put("1004", "Jack"); } /** * 获取员工名称 * @param num 工号 * @return */ public String getEmployeeName(String num){ initEmployee(); String name = "未知"; if(map.get(num) != null){ name = map.get(num); } return name; } /** * 更新员工信息 * @param num 工号 * @param name 员工姓名 */ public void updateEmployee(String num,String name){ initEmployee(); map.put(num, name); } /** * 删除员工信息 * @param num 工号 */ public void deleteEmployee(String num){ initEmployee(); map.remove(num); } }
发布该webService并能成功调用。编写客户端代码调用:
package com.jynine.webservice; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.OMNode; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class AxisClient { /** * 指定调用WebService的URL */ private static EndpointReference targetEPR = new EndpointReference("http://localhost:8082/axis2/services/EmployeeInfo"); public static OMElement getNameByNum(String num){ OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace namespace = fac.createOMNamespace("http://webservice.jynine.com", "tns"); OMElement method = fac.createOMElement("getEmployeeName", namespace); OMElement value = fac.createOMElement("num", namespace); OMNode omNode = fac.createOMText(value, num); value.addChild(omNode); method.addChild(value); return method; } public static void main(String[] args) { //ServiceClient try { OMElement getName = getNameByNum("1000"); Options options = new Options(); options.setTo(targetEPR); options.setTransportInProtocol(Constants.TRANSPORT_HTTP); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMElement result = sender.sendReceive(getName); String response = result.getFirstElement().getText(); System.out.println("员工名称为:"+response); } catch (Exception e) { e.printStackTrace(); } } }
http://localhost:8082/axis2/services/EmployeeInfo是你的Service EPR路径。
http://webservice.jynine.com这个是你访问http://localhost:8082/axis2/services/EmployeeInfo?wsdl后的那个targetNamespace。
输出结果为:
员工名称为:Tom
也可以用RPC方式调用WebService
public static void main(String[] args) throws AxisFault { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); // 指定调用WebService的URL options.setTo(targetEPR); // 指定getEmployeeName方法的参数值 Object[] opAddEntryArgs = new Object[] {"1001"}; // 指定getEmployeeName方法返回值的数据类型的Class对象 Class[] classes = new Class[] {String.class}; // 指定要调用的getEmployeeName方法及WSDL文件的命名空间 QName opAddEntry = new QName("http://webservice.jynine.com", "getEmployeeName"); // 调用getEmployeeName方法并输出该方法的返回值 System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]); }
ps:当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。
如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
输出结果为:Jim
wsdl2java
也可以根据wsdl2java来简化我们客户端
在cmd中输入
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8082/axis2/services/EmployeeInfo?wsdl -p com.jynine.webservice -s -o generator
则在你的当前目录下就会生成一个generator目录,在generator\src\com\jynine\webservice中就会找到一个EmployeeInfoStub.java
我们就可以用这个类来编写客户端:
public static void main(String[] args) throws RemoteException { EmployeeInfoStub stub = new EmployeeInfoStub(); EmployeeInfoStub.GetEmployeeName gg = new EmployeeInfoStub.GetEmployeeName(); gg.setNum("1002"); System.out.println( stub.getEmployeeName(gg).get_return()); }
输出结果为:Rose
代码是不是简单多了。
用adb生成客户端:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8082/axis2/services/EmployeeInfo?wsdl -p com.jynine.webservice -d adb -s -o generator
同理还有xmlbeans:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8082/axis2/services/EmployeeInfo?wsdl -p com.jynine.webservice -d xmlbeans -s -o generator
JiBX:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8082/axis2/services/EmployeeInfo?wsdl -p com.jynine.webservice -d jibx -s -uw -o generator
axis2相关的包的maven配置http://jynine.iteye.com/blog/1893677。
发表评论
-
java.lang.ClassNotFoundException: org.springframework.web.context.request.Reques
2015-01-24 17:11 4040一月 24, 2015 4:51:02 下午 org.apac ... -
解决Spring中@ResponseBody 返回json字符串date类型变成long型的问题
2014-11-14 13:23 8785package com.jynine.service; ... -
java.lang.ClassFormatError: Unknown constant tag 100 in class file java/sql/Driv
2014-08-27 15:34 2247linux下启动tomcat报这个错: Aug 27, 20 ... -
axis2 和spring 集成
2014-06-26 10:59 886官方地址: http://axis.apache.org/ax ... -
JAVA之jar包读取外面的配置文件和引入其它的jar
2014-03-12 17:32 68641、Java文件 Test.java package co ... -
利用javapns对IOS进行推送
2014-02-21 18:16 2245package com.jynine.javapns; ... -
java之可回调的固定线程池
2013-12-10 18:34 2287import java.util.Map; import j ... -
java之生成图片验证码
2013-12-09 23:42 1642由于自己的项目登录需要验证码,于是便谢了一个图片验证码生成类。 ... -
axis2 File "/axis2-web/listSingleService.jsp" not found
2013-06-26 16:44 6491type Exception report messag ... -
axis2对应jar的maven配置
2013-06-25 00:39 8751axis2的maven配置: <axis-versio ... -
java用poi读取excel报错
2013-06-20 20:54 5160java.lang.IllegalStateException ... -
在Eclipse中创建maven项目出现的环境警告 j2se-1.5
2013-06-20 20:25 9865Build path specifies execution ... -
spring配置Quartz定时器时出现的异常
2013-06-17 17:41 2667spring配置Quartz定时器时出现的异常如下: org ... -
java去mybatis里面自动生成的Example文件 和烦人的注释
2013-05-29 23:21 3368上篇mybatis里面写了怎么配置mybatis自动生成代码的 ... -
java数据库连接
2013-05-28 18:35 1097package com.jynine; import j ... -
java写csv文件
2013-05-28 18:29 1783package com.jynine; import j ... -
spring MVC+maven搭建之实例
2013-04-14 12:15 0经过昨天的maven搭建,现在整合maven和sprng mv ... -
java Stringutil 字符串(内含金额转换为中文)
2013-03-18 18:16 1255今天主要写了这个金额转换的方法,这个金额转换最大支持九仟万亿兆 ... -
java中二、八、十 、十六进制之间的转换
2013-03-12 11:43 1062java 中 二、八、十 、十六进制之间的转换 packa ... -
java poi 读取Excel
2013-03-08 15:22 4275java 用poi读取excel并区分2003和2007 2 ...
相关推荐
webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例webService—Axis实例
eclipse+axis2学习webservice实例,亲测!
利用空闲时间整理出的使用Axis实现的webservice,该实例为Axis实现的服务端和客户端的完整实例代码(测试已通过),希望能帮助跟我一样初次接触webservice的新手
使用axis2技术编写的webservice接口实例,直接放在应用服务器下便可使 用http://localhost:xxxx/axis2/service/来访问WSDL 业务源代码位于\WEB-INF\classes\HelloWorld.java
Axis2(WebService)经典教程,详细讲述了如何用axis2实现webservice,由浅入深,配合实例。
<groupId>org.apache.axis2 <artifactId>axis2 <version>1.6.2 <groupId>org.apache.axis2 <artifactId>axis2-adb <version>1.6.2 <groupId>org.apache.axis2 ...
axis1.4开发webservice源码 包含webservice发布 与客户端调用
一个基于axis的webservice接口例子
axis2开发webservice与调用实例,包含新手教程说明文档,比较详细的讲解了webservice的发布与客户端调用
里面包含用到的axis的jar包 和一个java文件,下载后,将文件放在工程下,添加jar包即可运行,用的开源的webservice服务,里面重要代码都做了注释。
基于Axis2的WebService简单实例,整合到web项目中,包含axis2的所有必需的最小jar包,实际测试通过
axis2 webservice实例程序,包括所需要用到lib jar包,以及客户端和服务器端完整的实例程序,是自己辛苦了一周搞出来的,欢迎大家拍砖!
Tomcat+Axis+WebService 入门实例,讲述如何实现WebService的传递信息,
客户端用axis调用webservice实例 里面包含所需的jar包,希望对大家有用(不好意思,赚点积分啊)
Axis的入门实例 Axis复杂对象类型的WebService Axis的辅助工具发布、调用WebService Axis WebService会话Session的管理 Axis用控制台Dos命令发布WebService Axis跨多个WebService管理Session Axis用Spring的JavaBean...
java ,实现, axis2, webservice,源码,实例,可用 通用 aar文件
具体请查看文本文件,已经附带了示例工程,讲解了三种发布方式,包括spring发布方式
webservice的框架有很多种axis1 axis2 cfx......。 其中axis1.4是比较稳定和成熟的一种。。。 axis的下载 http://ws.apache.org/axis/
Axis 的入门实例 Axis 复杂对象类型的WebService Axis 的辅助工具发布、调用WebService Axis WebService 会话Session 的管理 Axis 用控制台Dos 命令发布WebService Axis 跨多个WebService 管理Session Axis 用Spring...
Axis开发WebService实例.pdf