使用axis2发布/调用WebService

2025-11-21 09:53:53

1、首先打开axis2文件夹里面的axis2-1.6.2-war.zip压缩文件,然后把解压后的war包放到tomcat的webapps里,启动tomcat的时候就会自动生成相应的文件,放进去就不用管它了。(剩下的几个压缩文件为帮助文档和源码)

这时候启动tomcat,访问http://127.0.0.1:8080/axis2/ ,如果能看到axis2的Welcome!页面,就说明axis2部署成功了。点一下页面选项Services ,会跳转到axis2自带的服务页面;另外点击 Administration 选项,输入用户名:admin,密码:axis2,登陆进去可以配置axis2的一些配置,以及发布更新aar包

使用axis2发布/调用WebService

2、新建一个动态web project,起名Test,编写java类,命名HelloWorld,具体代码如下:

      package com.inspur.service;

public class HelloWorld {

public String sayHello(String name){

return "Hello,"+name+".";

}

public String saySorry(String name){

return "Sorry,"+name+".";

}

public String getWorld(){

return "Hello,World";

}

}

     此类相当于提供了一个HelloWorld接口,内含三个服务,前两个获取使用者传入的值来返回相应的结果,后一个直接调用就能返回相应的结果。

3、把tomcat安装目录下的webapps/axis2/WEB-INF下的modules、service和conf文件夹拷到 HelloWorld项目webContent下的WEB-INF下,把lib里面的jar包,也拷到项目的lib里面。

使用axis2发布/调用WebService

4、然后在项目WEB-INF下的services文件夹里新建HelloWorld/META-INF路径,META-INF下新建 services.xml,内容如下:

 <service name="HelloWorld">  

<description>  

MyService  

</description>  

<parameter name="ServiceClass">  

com.inspur.service.HelloWorld

</parameter>  

<operation name="sayHello">           

<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>

此配置文件的作用就是相当于一个映射,把提供服务的实体类的具体路径映射出来,三个operation- name对应三个方法名,而且名字一定要一一对应,不能随意更改。class引用为固定的,无需变动。

5、在项目的web.xml里添上如下配置:

<!-- Axis2 config start -->

  <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>

   <url-pattern>/services/*</url-pattern>

  </servlet-mapping>

  

  <!-- Axis2 end -->

   <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

   </welcome-file-list>

6、(这一步可以先跳过去,如果下一步执行页面报500,可以回头看一下这一步)

因为项目自定义的过滤器会和axis2配置起冲突,所以我在过滤器里面把起冲突的services文件夹忽略掉,(各位具体情况具体调整)所以继续修改项目web.xml文件:

找到<filter-name>webDispatcher</filter-name>

      <filter-class>org.loushang.internet.servlet.WebDispatcherFilter

</filter-class>

      <init-param>

        <param-name>excludes</param-name>

        <param-value>/*/aaa/*.jsp,/aaa/*</param-value>

</init-param>

在<param-value>/*/aaa/*.jsp,/aaa/*</param-value>中添加上,/*/services/*

变成<param-value>/*/aaa/*.jsp,/aaa/*,/*/services/*</param-value>即可。

7、这时候就能通过http://127.0.0.1:8080/Test/services/HelloWorld/getWorld  来访问自己发布的webservice,getWorld为方法名,如果为有参方法,要加上(?name=要传的值)“name”要和实体类里面方法的参数名一致,例如http://127.0.0.1:8080/Test/services/HelloWorld/sayHello?name=xxxx

使用axis2发布/调用WebService

8、另外也可以通过访问http://127.0.0.1:8080/Test/services/HelloWorld?wsdl来查看发布的webservice网络服务描述,里面自动生成介绍你的Web service有什么功能,以及每个函数调用时的参数,描述Web service及其函数、参数和返回值。相当于针对你发布的webservice的一个使用文档。


到这里,使用axis2发布webservice就算告一段落。

9、另附上使用axis2发布webservice的另一种方法,亲测可用,有兴趣可以试一下。

1、(第一步和方法一步骤一样)axis2.war包放到tomcat的webapps目录下,启动tomcat,访问地址http://127.0.0.1:8080/axis2/ ,即可访问axis2的Welcome!页面。访问地址http://127.0.0.1:8080/axis2/services/listServices 可访问服务列表,和前面步骤一样,就不赘述。

2、编译服务端项目HelloWorld后,将HelloWorld.class文件放到

tomcat\webapps\axis2\WEB-INF\pojo目录中【注:若没有pojo目录,则手动新建该目录】。

     在浏览器地址栏中输入如下的URL:

http://127.0.0.1:8080/axis2/services/listServices 即可访问刷新后的服务列表。

【注:POJO类不能使用package关键字声明包,若使用axis2管理平台发布,则需要修改 HelloWorld类,去掉package字段。意思是java文件编译成class文件之前,只能放在src下面的 default默认包里面,不能含有package,不能新建包,不然webservice就会访问失败,这也算是一个局限性】

1、webservice有四种不同的客户端:

——传统式, 非阻塞式, 双工模式, 双工非阻塞

这里说的是传统式客户端。

2、首先建立类Client,代码如下(未注释的地方无需更改):

package com.inspur.client;

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.axis2.AxisFault;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.client.ServiceClient;

/**

 * @author lvshuo

 * @version 1.0

 * @create 2017-6-9 下午17:44:00

 */  

public class Client {

 private static EndpointReference targetEPR = new EndpointReference(  

            "http://127.0.0.1:8080/Test/services/HelloWorld");//替换为自己的接口地址

 public static void main(String[] args)  

    {  

        Options options = new Options();  

        options.setAction("urn:sayHello");//调用接口方法,替换成自己的  

        options.setTo(targetEPR);  

        ServiceClient sender = null;  

        try  

        {  

            sender = new ServiceClient();  

            sender.setOptions(options);

            OMFactory fac = OMAbstractFactory.getOMFactory();  

            OMNamespace omNs = fac.createOMNamespace(  

                    "http://service.inspur.com", ""); //此处地址为namespace,可在wsdl里面查到,如图2.1 

            OMElement method = fac.createOMElement("sayHello", omNs);//设置方法名

            OMElement name = fac.createOMElement("name", omNs);//设置入参名称,如有多个参数可创建多个OMElement对象,如name1、name2。。

            name.setText("xiaoming");//设置入参值(要传入方法内的参数) 

            method.addChild(name);  

            method.build();  

            System.out.println("method:" + method.toString());//

            OMElement response = sender.sendReceive(method);  

            System.out.println("response:" + response);  

            OMElement elementReturn = response.getFirstElement();

            System.out.println("return:"+elementReturn.getText());//可用此方法elementReturn.getText(),来获取被调方法的返回值

}  

        catch (AxisFault e)  

        {  

            System.out.println("Error");  

            e.printStackTrace();  

        }  

    }  

}  

注:注释的地方为要更改的部分,修改完后一个简单的webservice客户端就算是编写完成,可根据实际开发需要修改内容。

参照图2.1,命名空间为包名倒序。

输出结果如图2.2

使用axis2发布/调用WebService

使用axis2发布/调用WebService

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢