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());}}}}



0 0
原创粉丝点击