Axis2实现 web service接口开发 + 客户端调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Axis2实现 web service接口开发 + 客户端调用相关的知识,希望对你有一定的参考价值。

一、 新建一个web项目,

 1.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名);

  再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面。 

  具体路径:WEB-INF/services/myservice/META-INF/services.xml 

2.配置 web.xml 。加载axis2 和 applicationContext.xml。 

<!-- 加载配置文件 -->
     <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
   <context-param> 
        <param-name>contextConfigLocation</param-name>         
        <param-value>classpath:/*.xml</param-value> 
    </context-param> 
    <!-- 加载axis2 -->
    <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>/services/*</url-pattern>
    </servlet-mapping>

   

3.然后在项目中的src下创建包,再在包下创建一个类,用来提供web service接口。

package com.axis.service;
public class TestAxis {
    public String test(String str) {
        return "test " + str;
    }
    public String printHello(String name) {
        return "hello " + name;
    }
    public String printWorld(String name) {
        return "World " + name;
    }
}


4.配置 services.xml文件。 

<?xml version="1.0" encoding="UTF-8"?>
<service name="axisService" targetNamespace="http://e3.org/axis2Namespace/soapws">
    <!-- 服务名描述 -->
    <description>axis2 接口开发范例</description>
    <!-- 命名空间可以自由定义 -->
    <schema schemaNamespace="http://e3.org/axis2Namespace/soapws" />
    <!-- 方式一、直接写类位置 -->
    <!-- <parameter name="ServiceClass">com.axis.service.TestAxis</parameter> -->
    <!-- 方式二、指向的类位置,通过applicationContext.xml 配置 -->
    <parameter name="SpringBeanName">CrjWs</parameter>
    <parameter name="ServiceObjectSupplier">
       org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
    </parameter> 
    <!-- 方式一 -->
    <operation name="test"> 
      <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
    </operation> 
    <operation name="printHello"> 
      <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
    </operation> 
    <operation name="printWorld"> 
      <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
    </operation>  
    <!-- 方式二 -->
   <!--     
   <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> 
    -->
    <!-- 屏蔽的接口 -->
    <excludeOperations>
         <operation>printHello</operation>
    </excludeOperations>
</service>


5.配置文件 applicationContext.xml。 

<!--WebService 入口的 bean -->
    <bean id ="CrjWs" class="com.axis.service.TestAxis" />

 

6. 目录结构。

技术分享技术分享技术分享


7.运行该项目,使用浏览器访问地址 

   http://localhost:8080/webserviceTest/services/axisService?wsdl

 如果有异常信息,那就返回看一下是jar包缺失还是其它配置原因,自己从头细心再看看哪里是否没配置。

 如果成功,会在页面上显示一份wsdl页面。


二、下面是我遇到的一些小问题。

1、报 The SERVICE_OBJECT_SUPPLIER parameter is not specified。

 查看了一下发现是没有写监听器。在web.xml文件中添加

<listener>
  <listener-class>
       org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>


 如果使用 SpringBeanName 的话,需要加载 ServiceObjectSupplier。  

<parameter name="SpringBeanName">CrjWs</parameter>
  <parameter name="ServiceObjectSupplier">
         org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
  </parameter>


三、客户端调用。

package com.test;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class webTest {
    public static void main(String[] args) {
        String _newendPoint =
             "http://localhost:8080/webserviceTest/services/axisService?wsdl";
        String _newNameSpace = 
                  "http://e3.org/axis2Namespace/soapws";
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(_newendPoint));
            call.setOperationName(new QName(_newNameSpace, "test"));
            String s = (String) call.invoke(new Object[] {"test123"});
            System.out.println(s);
            // call.setOperationName(new QName(_newNameSpace,"printHello"));
            // s = (String) call.invoke(new Object[] { "printHello456"});
            // System.out.println(s);
            call.setOperationName(new QName(_newNameSpace, "printWorld"));
            s = (String) call.invoke(new Object[] { "printWorld789" });
            System.out.println(s);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}


本文出自 “海阔_星空” 博客,请务必保留此出处http://7852586.blog.51cto.com/7842586/1784076

以上是关于Axis2实现 web service接口开发 + 客户端调用的主要内容,如果未能解决你的问题,请参考以下文章

我第一次接触webservice,怎么调用用web service接口,cxf或者axis2都行,网上找的例子,都有点错误

JAVA开发Web Service几种框架介绍

JAVA开发Web Service几种框架介绍

Web Service学习之一:Web Service几种框架

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

java 调用 .net web service 问题