Axis2+Spring构建WebService
来源:互联网 发布:软考初级程序员 编辑:程序博客网 时间:2024/05/17 03:53
先看服务端
1、去官网下载Axis2相关的jar包
2、新建一个动态WEB工程,并在src下创建com.service包,在service包下创建HelloWorldService、HelloWorldServiceImpl、User类。同时把第一步下载的jar都添加到工程的lib目录中
3、三个类代码如下
package com.service;import java.io.Serializable;import java.util.List;public class User implements Serializable{private static final long serialVersionUID = 1L;private String name;private int age;private List<String> address;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public List<String> getAddress() {return address;}public void setAddress(List<String> address) {this.address = address;}}
package com.service;import java.util.List;import java.util.Map;public interface HelloWorldService{public String sayHelloWorld(String name);public List<User> queryFamily(User user);public Map<String,List<User>> queryByUser(User user);public String meeting();}
package com.service;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class HelloWorldServiceImpl implements HelloWorldService{@Overridepublic String sayHelloWorld(String name) {String helloWorld = "helloWorld," + name;return helloWorld;}@Overridepublic List<User> queryFamily(User user) {String name = user.getName();int age = user.getAge();System.out.println("name:" + name + ",age:" + age + ",address:" + user.getAddress().toString());List<String> address = user.getAddress();List<User> userList = new ArrayList<User>();for(int i=0;i<10;i++){User u = new User();u.setName(i + "|" + user.getName());u.setAge(i + user.getAge());u.setAddress(address);userList.add(u);}return userList;}@Overridepublic Map<String, List<User>> queryByUser(User user) {String userName = user.getName();Map<String,List<User>> dataMap = new HashMap<String,List<User>>();List<User> danList = new ArrayList<User>();List<User> shuangList = new ArrayList<User>();for(int i=0;i<10;i++){User u = new User();u.setName(i + userName);u.setAge(i + user.getAge());if(i % 2 == 0){shuangList.add(u);}else{danList.add(u);}}dataMap.put("dan", danList);dataMap.put("shuang", shuangList);return dataMap;}@Overridepublic String meeting() {return "Nice Meeting";}}
4、这里是axis2+spring集合,所以要注意配置
配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>AxisWebService</display-name> <!-- begin Spring配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <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-mapping> <servlet-name>AxisServlet</servlet-name> <!-- 在这个URI下开放Web Service服务 --> <url-pattern>/services/*</url-pattern> </servlet-mapping></web-app>
在WEB-INF下创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><span style="white-space:pre"></span><!-- <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" /> --> <bean id="HelloWorldService" class="com.service.HelloWorldServiceImpl"/></beans>在WEB-INF目录下创建目录services文件夹,接着在services目录下随便创建个目录(这层目录随便取名,这里叫axis),然后在axis目录下创建META-INF文件夹,在该文件夹下创建services.xml
<?xml version="1.0" encoding="UTF-8"?> <service name="HelloWorld"> <description>web service</description> <!-- ServiceObjectSupplier是固定的名称,由它获取Spring的容器ApplicationContext引用 --> <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter> <!-- SpringBeanName是固定的,表示该bean HelloWorldService 是Spring中的bean的id--> <parameter name="SpringBeanName">HelloWorldService</parameter> <!-- 一定要配置messageReceiver,下面的配置不可少,为了方便都用输入输出类型 ,不配置默认会使用OMElement参数,rpc方式调用或者浏览器直接访问均会报错--> <operation name="sayHelloWorld"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="meeting"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/int-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="queryFamily"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="queryByUser"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/int-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation></service>
5、配置基本写完了,接下来说部署。看到网上很多demo,又是把axis包下的东西copy进来啊,打arr包,其实这些都不是必须的。到这步为止,我的项目就是一个完整的webService项目了,就可以部署到tomcat中了。
下面的都是不是必须的。
--------------------------------------------------------------
打arr包,必须用jar命令打,很多人都说不好使,正确的语法:jar cvf ws.aar * ,这样会把当前目录所有的文件夹达到包中,然后把arr包放在WEB-INF下的services目录下,同时把moudles、conf放到WEB-INF下,把axis2-web放到webContent下面。
上面这步无非是可以用后台自带的listServices功能。
然后就可以使用后台管理功能了。
输入地址:http://localhost:8080/AxisWebService/services/listServices
这样就相当于有个预览的功能,我们提供了一个HelloWorld服务,其中有4个方法可以调用。这就是多了这个好处。
6、将项目直接部署在tomcat中,访问地址:http://localhost:8080/AxisWebService/services/HelloWorld?wsdl就可以得到wsdl的文件内容了。
这表示项目部署成功,不一定可以进行地址访问,就像前面说的,不配置
<operation name="meeting"> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/int-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation>你访问方法是会出错的。我上面配置了不会出错。
创建客户端调用服务端
1、新建一个java工程,把服务端的jar包copy进来。
2、利用axis包中bin下的命令生成java代码,进入bin目录,
执行D:\code\jar包\axis2-1.7.1-bin\axis2-1.7.1\bin>wsdl2java -uri http://localhost:8080/AxisWebService/services/HelloWorld?wsdl
在bin下面就会生成对应的java代码,copy到java工程即可。
3、编写测试代码
package com.test;import java.rmi.RemoteException;import org.apache.axis2.AxisFault;import com.service.HelloWorldStub;import com.service.HelloWorldStub.Entry1;import com.service.HelloWorldStub.Map1;import com.service.HelloWorldStub.User;public class TestClient {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {HelloWorldStub stub = new HelloWorldStub();HelloWorldStub.Meeting meeting = new HelloWorldStub.Meeting();System.out.println(stub.meeting(meeting).get_return());HelloWorldStub.SayHelloWorld sayHelloWorld = new HelloWorldStub.SayHelloWorld();sayHelloWorld.setName("孙金福");System.out.println(stub.sayHelloWorld(sayHelloWorld).get_return());HelloWorldStub.User user = new HelloWorldStub.User();user.setAge(21);user.setName("李晴晴");user.setAddress(new String[]{"beijing","上海"});HelloWorldStub.QueryFamily queryFamily = new HelloWorldStub.QueryFamily();queryFamily.setUser(user);User[] userArray = stub.queryFamily(queryFamily).get_return();System.out.println("-------------");for(User u : userArray){System.out.println(u.getName() + "," + u.getAge() + "," + u.getAddress());}HelloWorldStub.QueryByUser queryByUser = new HelloWorldStub.QueryByUser();queryByUser.setUser(user);Map1 dataMap = stub.queryByUser(queryByUser).get_return();if(dataMap != null){Entry1[] entryArray = dataMap.getEntry();for(Entry1 entry : entryArray){String key = entry.getKey();User[] users = entry.getValue();System.out.println("key:" + key + ",values:" + users[0].getAge());}}}}
- Axis2+Spring构建WebService
- Spring + axis2 开发 webservice
- Spring + axis2 开发 webservice
- Spring axis2 webService 支持
- Spring axis2 webservice
- webservice axis2+spring整合
- 使用AXIS2构建WebService服务器
- axis2+spring+hibernate(webservice工程)
- webservice+axis2+spring+http/https
- Eclipse+Axis2+android构建WebService实战总结
- Eclipse+Axis2+android构建WebService实战总结
- WebService之Axis2系列教程Axis2与Spring集成发布
- axis2+spring+Hibernate webservice 非aar方式
- Axis2与spring结合创建webService
- webservice框架(cxf, axis2, spring-ws)
- axis2+spring集成发布webservice服务
- axis2+spring+Hibernate webservice 非aar方式
- eclipse开发webservice-axis2/spring+maven
- 浅析gcc、arm-linux-gcc和arm-elf-gcc的关系
- 贴吧qq爬虫
- 2014新跟踪算法KCF笔记 --续(代码部分)
- matlab中的并行方法与理解(2):parfor中的变量类型
- C++内存布局(上)
- Axis2+Spring构建WebService
- 单点登录cas常见问题(十四) - ST和TGT的过期策略是什么?
- 2016年山西医科大汾阳学院实验1,实验2
- 大龄新程序员的自我挽尊——老骥伏枥
- 程序猿新手,初次入门纪念!
- 欢迎使用CSDN-markdown编辑器
- 今日BBC
- OpenCV:使用VideoCapture类进行视频读取和显示-Mat
- Pocket Cube