axis2使用教程、webservices自定义参数,webservices自定义返回值

Java Axis2 1.6.2使用说明

下载axis

下载最新的axis2jar包以及配置文件。下载地址:

http://ws.apache.org/axis2/

貌似需要翻墙。我用的是火狐插件翻墙的。绝体步骤你不懂得可以百度一下吧。

配置axis2

首先你的需要安装好一个tomcat。版本这个用6、7都可以。至于5以下的我没试过可否支持axis2。

首先配置和tomcat

Tomcat的配置步骤

这里我不详细说了,不知道的朋友可以百度一下,网上这种帖子多的是。

配置axis2

   将axis2-1.6.2-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录下,并启动Tomcat。

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

   http://localhost:8080/axis2/

   如果在浏览器中显示出wellcome页面,则表示Axis2安装成功。


发布webservices

编写一段java代码,然后编译成class文件。将编译后的class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)。

这样就可以发布webservices服务了。

比方说

public  class Hello{

    public String hello(){

            return "hello";

    }  

}

将编译后的class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中。然后进入http://localhost:8080/axis2点击页面的services 。然后就显示出来webservices服务了。

配置axis2热部署和热发布。避免每次发布需要重启tomcat。

打开<Tomcat安装目录>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置。把false改为true即可。如下:

<parameter name="hotdeployment">true</parameter>

<parameter name="hotupdate">true</parameter>

然后重新启动一下tomcat。

 

注意:

1. POJO类不能使用package关键字声明包。

2. 在浏览器中测试WebService时,如果WebService方法有参数,需要使用URL的请求参数来指定该WebService方法参数的值,请求参数名与方法参数名要一致。

3. 发布WebService的pojo目录只是默认的,如果想在其他的目录发布WebServices,可以打开axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:

    <deployer extension=".class" directory="mypojo" class="org.apache.axis2.deployment.POJODeployer"/>

上面的配置允许在<Tomcat安装目录>\webapps\axis2\WEB-INF\mypojo目录中发布WebService。

 

 使用axis2实现webservices自定义参数,webservices自定义返回值

 

对于配置axis2的过程不是很麻烦。可能很多人对于如何调用webservices比较疑惑。下面我将介绍给大家如何使用axis2使用自定义类型的参数、获取自定义类型的返回值、获取返回List<自定义泛型>类型的数据。

 

下面为我自己封装的请求webservices的类核心代码

 

/**

   * 执行webservices方法

   *

   * @return List<HashMap<String,String>>类型的结果集

   * @throws AxisFault

   *            Axis异常

   */

  publicList<HashMap<String, Object>> invokeBlocking() throws AxisFault {

       List<HashMap<String,Object>> returns = new ArrayList<HashMap<String, Object>>();

       RPCServiceClient  serviceClient = new RPCServiceClient();

       Optionsoptions = serviceClient.getOptions();

       EndpointReference  targetEPR = new EndpointReference(url);

       options.setTo(targetEPR);

       QName    opAddEntry = new QName(targetNamespace, method);

       Object[]  so = serviceClient.invokeBlocking(opAddEntry, parameters,

                  newClass[] { returnType });

       if(so.length > 0) {

             if(so[0] instanceof Object[]) {

                  Object[]  elements = (Object[]) so[0];

                  for(Object o : elements) {

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        OMElementImpl  ome = (OMElementImpl) o;

                        maps.put(ome.getLocalName(),ome.getText());

                        while (ome.getNextOMSibling() != null) {

                              ome= (OMElementImpl) ome.getNextOMSibling();

                              maps.put(ome.getLocalName(),ome.getText());

                        }

                        returns.add(maps);

                  }

             }else {

                  Objectob = so[0];

                  if(ob instanceof OMElementImpl == false) {

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        maps.put("simple",ob);

                        returns.add(maps);

                  }else {

                        OMElementImpl  ome = (OMElementImpl) so[0];

                        HashMap<String,Object> maps = new HashMap<String, Object>();

                        maps.put(ome.getLocalName(),ome.getText());

                        returns.add(maps);

                  }

 

             }

             return  returns;

       }else {

             return  null;

       }

   }


 

下面是代码里面提到的变量,以及说明


/**

   * url :webservices 连接地址不包含方法及参数

   *

   * 例如: http://127.0.0.1:8080/axis2/services/Hello

   */

  private String url;

  /**

   * method :调用webservices的方法名称例如: getTime

   */

  private Stringmethod;

 

  /**

   * targetNamespace :webservices的targetNamespace名词

   * 默认值为:http://ws.apache.org/axis2

   */

  private StringtargetNamespace = "http://ws.apache.org/axis2";

 

  /**

   * parameters :请求方法的参数

   *

   */

  private Object[]parameters;

 

  /**

   * returnType :方法返回值类型

   */

  @SuppressWarnings("rawtypes")

  private ClassreturnType;

 


 

代码里用到的到均可以在axis2-bin包下找到。


axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-metadata-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
htpcore-4.0.jar
mail-1.4.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar


这些包一个不能多,多了也没用。一个也不能少,少了就报错。是我整理的1.6.2最新的jar包。



源代码我也提供给大家。你们可以在我的csdn上下载。

源代码包含:webservices代码和client端代码。里面有详细的注释。可以借鉴学习使用axis2使用自定义类型的参数、获取自定义类型的返回值、获取返回List<自定义泛型>类型的数据。

http://download.csdn.net/detail/woaixinxin123/5388995

 

 

Jar包和axis2的配置文件,提供另外一个下载地址。无须积分即可下载。[由于csdn文件大小限制,所以分开下载]

http://download.csdn.net/detail/woaixinxin123/5389051

http://download.csdn.net/detail/woaixinxin123/5389071

 

 本人web、android开发 、qq群255825960

猜你喜欢

转载自blog.csdn.net/woaixinxin123/article/details/8935147
今日推荐