webservice发布服务:AXIS2及客户端调用

1.Axis2:

到官网下载axis2的压缩包。

解压后:

1.将lib文件下的jar包复制到项目中

2.在web-inf下创建services->META-INF->services.xml,并将压缩包中的services.list、version-1.7.4.aar复制到services文件夹下

3.编写services.xml文件,配置发布的接口,格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<service name="testService" targetName="http://cn.itcast.test"> 
    <parameter name="ServiceClass">cn.itcast.test.Test</parameter>  
    <operation name="add">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  
    <operation name="aaa">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>
    <!-- <operation name="saySorry">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  
    <operation name="getWorld">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />  
    </operation>   -->
</service>

4.将编写好的services.xml文件替换version-1.7.4.arr中的services.xml文件(可以将version-1.7.4.arr修改后缀为zip然后打开找到services.xml文件并替换)

5.web.xml文件中配置axis2的servlet过滤器,格式如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <display-name>Apache-Axis2</display-name>
    <servlet>
        <display-name>Apache-Axis Servlet</display-name>
        <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>
        <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>
    
    <mime-mapping>
        <extension>inc</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
 -->
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
      <welcome-file>index.html</welcome-file>
      <welcome-file>/axis2-web/index.jsp</welcome-file>
    </welcome-file-list>

    <error-page>
      <error-code>404</error-code>
      <location>/axis2-web/Error/error404.jsp</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/axis2-web/Error/error500.jsp</location>
    </error-page>
</web-app>

启动服务器,访问接口的wsdl文档:http://localhost:8080/axis2Server/services/testService?wsdl,如果能访问到网页版xml格式文档,说明接口发布成功。

客户端生成代码及调用:

去官网下载axis2-1.7.4-bin里面有bin文件,bin文件下有各种以.bat为后缀的命令文件,新建一个自定义.bat文件,一般起名为generateCode.bat(中文:生成代码),文件中的内容如下:

wsdl2java -uri http://localhost:8080/axis2Server/services/testService?wsdl -p axis2.service.server -o e:\cn;

上面语句的意思是:axis2.service.server是目录结构;e:\cn是生成在e盘的cn文件夹下。

然而上面的wsdl2java命令需要配置环境变量才能执行,配置环境变量如下:

系统变量下新建变量名:AXIS2_HOME值:E:\axis2-1.7.4-bin\axis2-1.7.4;

将AXIS2_HOME配置在Path中:%AXIS2_HOME%\bin;

这样AXIS2的环境变量就配置好了,运行自定义的generateCode.bat文件即可生成代码。

Axis2客户端调用代码:

package cn.itcast.client;

import java.rmi.RemoteException;

import axis2.service.server.TestServiceStub;

 

public class Client {
 public static void main(String[] args) throws Exception {
  
  System.out.println(new Client().aa());
  System.out.println(new Client().bb());
  
 }
 
 public String aa() throws Exception {
  //stub类
  TestServiceStub testServiceStub = new TestServiceStub();
  //Add方法名:作为一个类new出来
  TestServiceStub.Add add = new TestServiceStub.Add();
  //将new出来的方法名类作为参数放在要调用的方法里
  testServiceStub.add(add);//此处的代码可省略,因为下面已经连写了testServiceStub.add(add).get_return();
  
  return testServiceStub.add(add).get_return();
 }
 
 public String bb() throws RemoteException{
  
  TestServiceStub testServiceStub = new TestServiceStub();
  TestServiceStub.Aaa aaa = new TestServiceStub.Aaa();
  aaa.setA("你好周杰伦");
  
  return testServiceStub.aaa(aaa).get_return();
 }
}

 

posted @ 2016-11-07 15:51  super超人  阅读(1040)  评论(0编辑  收藏  举报