`

Myeclpse6.0+Axis2 返回对象数组(List)的webservice例子

阅读更多

【wayfoon】 

最近公司要求实现一个webservice调用,之前也接触过,但只是看看,没有动手试试,于是现在正式开始学习webservice。

之前参照网上的例子写了一个简单的say hello webservice例子。传递的对象是string,而且只有一个方法;但实际应用中,需要传递一些复制的对象,比如:数组,集合,对象数组。

由于webservice 是通过xml来交互数据的,而且是不分平台的。因此,java 中的List等集合类的哦是通过数组来实现的。学习webservice最好不要从一种语言的角度(java、c#)来对待问题,如果非要看成一中语言,那看成是c语言吧。

 

简单的hello world 例子见 http://www.blogjava.net/mlzry0612/articles/185209.html?opt=admin 里面有详细的axis+myeclipse5.5安装部署,图文并茂。不同myeclipse版本 有所不同。

 

在演示例子前,你必须已经安装好了Axis,并且已经知道怎样使用axis,知道通过wsdl生成webservice代码和生成aar发布文件。不会的话,先学习前面的hello 例子。

下面演示一个比较复杂的例子。例子实现:输入一个string 返回得到一个对象数组(输入里面所有的元素对象),注意是对象数组。每个对象对应一个bean实体。

使用axis的好处是可以根据wsdl自动生成大部分代码。因此,采用axis开发webservice 的实现关键在于生成wsdl文件的编写。

生成wsdl文件可以采用两种方式:

第一种:直接新建wsdl再通过wsdl设计器来设计(也就是hello例子里面将的)

如果你对wsdl不是很熟悉,而且,输入或输出的参数都非常复杂,不清楚输入输出的组成结构时,你可以采用第二种方法。这种方式,可以让你使用你最熟悉的语言来表达你的意思。以java为例,你可以将对个对象放到List里面来表达你要输出的值,这个在wsdl里面是另外一种表达方式(没有List)。

第二种:选中建立好的web service项目,
file - new - other - myeclipse - web services - web service,
选中要将webservice添加到哪个项目,
勾选create new java bean,
next,
填web service name, 比如hello
其他的会自动生成,
如果有包的话选一下包,finish.
然后会生成Ihello.java和helloImpl.java两个文件,
前面的是接口,后面的是实现.

Ihello.java文件:

  1. package org.way;
  2. import java.util.List;
  3. // Generated by MyEclipse 
  4. public interface Ihello
  5. {
  6.     public String example(String message);
  7. }

helloImpl.java文件

  1. package org.way;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. // Generated by MyEclipse
  5. public class helloImpl implements Ihello
  6. {
  7.     public String example(String message)
  8.     {
  9.         return null;
  10.     }
  11. }

例子的目的是要返回一个对象数组,因此我可以将上面文件改成

新的Ihello.java文件:

  1. package org.way;
  2. import java.util.List;
  3. // Generated by MyEclipse
  4. public interface Ihello
  5. {
  6.     public List<HelloBean> example(String message);
  7. }

新的helloImpl.java文件

  1. package org.way;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. // Generated by MyEclipse
  5. public class helloImpl implements Ihello
  6. {
  7.     public List<HelloBean> example(String message)
  8.     {
  9.         List<HelloBean> list = new ArrayList<HelloBean>();
  10.         return list;
  11.     }
  12. }

新的两个文件对学习java的来说,非常熟悉了。HelloBean 是一个实体bean,你可以写多个字段 以及get/set方法,这里不列出。

然后将这个项目部署到tomcat里,
启动tomcat,打开http://127.0.0.1:8080/项目名/services, (注意必须加services)
会出现项目所提供的web service列表,
点进去就是wsdl, 另存为网页成*.wsdl文件。这样就生成了需要的wsdl文件。

 

生成的wsdl 文件以及详解 见:http://blog.csdn.net/wayfoon322/archive/2008/09/11/2914792.aspx

 

好了,关键的wsdl文件生成,现在可以利用这个wsdl生成webservice代码。生成方法见hello例子

生成之后的项目结构是:

 

wayfoon:目录结构

 

需要注意其他三个文件:HelloTest.java 是测试文件,HelloStub,java是给客户端用的,HelloSkeleton.java:我们要实现的webservice业务代码需要在这个文件中编写,我们的业务是:输入string 输出对象数组,采用java语言描述则是 见代码注释

HelloSkeleton.java:

  1. /**
  2.  * HelloSkeleton.java
  3.  * 
  4.  * This file was auto-generated from WSDL by the Apache Axis2 version: 1.4 Built on : Apr 26, 2008
  5.  * (06:24:30 EDT)
  6.  */
  7. package org.way;
  8. /**
  9.  * HelloSkeleton java skeleton for the axisService
  10.  */
  11. public class HelloSkeleton implements HelloSkeletonInterface
  12. {
  13.     /**
  14.      * Auto generated method signature
  15.      * 
  16.      * @param examplein00
  17.      */
  18.     public org.way.Exampleout example(org.way.Examplein0 examplein00)
  19.     {
  20.         //输出的对象
  21.         Exampleout out=new Exampleout();
  22.         HelloBean hb=null;
  23.         //包含一个数组 的对象
  24.         ArrayOfHelloBean param=new ArrayOfHelloBean();
  25.         for (int i = 0; i <10; i++)
  26.         {
  27.             hb=new HelloBean();
  28.             hb.setCid("Cid="+i);
  29.             hb.setName(examplein00.getExamplein0());
  30.             hb.setSex("sex");
  31.             //将单个实体加入到对象数组里面
  32.             param.addHelloBean(hb);
  33.         }
  34.         out.setExampleout(param);
  35.         
  36.         return out;
  37.     }
  38. }

 

打包生成*.arr 文件。名称任意。放到 axis2\WEB-INF\services 下面

启动tomcat

最后junit测试,HelloTest.java 文件

  1. package org.way;
  2. import org.way.HelloStub.HelloBean;
  3. /*
  4.  * HelloTest Junit test case
  5.  */
  6. public class HelloTest extends junit.framework.TestCase
  7. {
  8.     /**
  9.      * Auto generated test method
  10.      */
  11.     public void testexample() throws java.lang.Exception
  12.     {
  13.         String url="http://192.168.0.70:8080/axis2/services/hello";
  14.         org.way.HelloStub stub = new org.way.HelloStub(url);// the default implementation should
  15.         // point to the right endpoint
  16.         org.way.HelloStub.Examplein0 request = (org.way.HelloStub.Examplein0) getTestObject(org.way.HelloStub.Examplein0.class);
  17.         request.setExamplein0("wayfoon");
  18.         
  19.         //System.out.println(stub.example(request).getExampleout());
  20.         HelloStub.ArrayOfHelloBean arrayOfHelloBean=(HelloStub.ArrayOfHelloBean)stub.example(request).getExampleout();
  21.         HelloStub.HelloBean[] localHelloBean=(HelloStub.HelloBean[])arrayOfHelloBean.getHelloBean();
  22.         System.out.println("length:"+localHelloBean.length);
  23.         for (int i = 0; i < localHelloBean.length; i++)
  24.         {
  25.             HelloStub.HelloBean hb=(HelloStub.HelloBean)localHelloBean[i];
  26.             System.out.println("{Cid:"+hb.getCid()+" Name:"+hb.getName()+"},");
  27.             
  28.         }
  29.         
  30.         assertNotNull(stub.example(request));
  31.     }
  32.     // Create an ADBBean and provide it as the test object
  33.     public org.apache.axis2.databinding.ADBBean getTestObject(
  34.             java.lang.Class type) throws java.lang.Exception
  35.     {
  36.         return (org.apache.axis2.databinding.ADBBean) type.newInstance();
  37.     }
  38. }

 

输入:wayfoon

输出

最终结果:

{Cid:Cid=0 Name:wayfoon },
{Cid:Cid=1 Name:wayfoon },
{Cid:Cid=2 Name:wayfoon },
{Cid:Cid=3 Name:wayfoon },
{Cid:Cid=4 Name:wayfoon },
{Cid:Cid=5 Name:wayfoon },
{Cid:Cid=6 Name:wayfoon },
{Cid:Cid=7 Name:wayfoon },
{Cid:Cid=8 Name:wayfoon },
{Cid:Cid=9 Name:wayfoon },

 

 

注意:使用axis,jdk最好使用1.6。新建webservice 项目 最好选择JAVA EE 5.0,


作者:南极光  
时间:2008-9-5

欢迎大家同我联系,wayfoon@163.com
欢迎转载,转载请保留申明信息。

 

分享到:
评论

相关推荐

    Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结

    Axis+MyEclipse6.0+Tomcat5.0开发Web Service实例总结

    myEclipse10+axis2+tomcat6.0发布WebService.pdf

    本文将介绍如何在myEclipse10中使用Axis2插件与Tomcat6.0发布WebService。首先,我们需要了解Axis2是Apache软件基金会的一个开源项目,它是一个Web服务引擎,用于处理Web服务的发布、部署和管理。myEclipse10是一款...

    myEclipse10+axis2+tomcat6.0发布WebService.docx

    在本教程中,我们将探讨如何在myEclipse10中使用Axis2框架和Tomcat6.0服务器来发布Web服务。 **Axis2** 是Apache软件基金会开发的一个Web服务引擎,它允许开发者创建和部署Web服务。Axis2提供了高性能和灵活性,...

    myeclipse6.0+struts网上书店

    【标题】"myeclipse6.0+struts网上书店" 涉及的主要技术栈是MyEclipse 6.0、Struts框架以及JSP(JavaServer Pages),这些都是Java Web开发的重要组成部分。下面将详细阐述这三个核心概念及其在构建网上书店系统中的...

    Myeclipse6.0+eclipse3.3下安装svn插件操作说明

    Myeclipse6.0+eclipse3.3下安装svn插件操作说明

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![借鉴].pdf

    在本文中,我们将详细探讨如何配置Tomcat 6.0、MyEclipse 6.0以及MySQL 5.0的数据库连接池。首先,我们理解这个配置过程的重要性,因为一个有效的数据库连接池管理能提高应用的性能和资源利用效率。 **配置步骤** ...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!.pdf

    Tomcat服务器是Apache软件基金会...通过上述配置步骤,Tomcat6.0服务器能够与MyEclipse6.0开发环境和mysql5.0数据库协同工作,实现一个高效稳定的数据库连接池,从而提高应用程序处理数据库操作的性能和扩展性。

    WebSphere6.1+myeclipse6.0+ssh2整合手册

    总的来说,"WebSphere6.1+myeclipse6.0+ssh2整合手册"旨在帮助开发者搭建一个高效的企业级开发环境,通过详细的配置步骤和实践指导,使得SSH2框架在WebSphere上的应用更加顺畅。通过学习和实践,开发者能够更好地...

    Myeclipse(8.5+Tomcat6.0+jdk1.6)下的支付宝demo

    【标题】"Myeclipse(8.5+Tomcat6.0+jdk1.6)下的支付宝demo"涉及的关键知识点主要包括以下几个方面: 1. Myeclipse:Myeclipse是一款强大的集成开发环境,专为Java EE应用程序开发设计。它集成了Eclipse的核心功能,...

    Flex4.5 + Tomcat6.0 + MyEclipse 9.0+ Java+Blazeds环境配置和使用

    标题与描述均聚焦于“Flex4.5 + Tomcat6.0 + MyEclipse 9.0+ Java+Blazeds环境配置和使用”,这一主题涉及了多种技术栈的集成,包括Flex4.5(FlashBuilder)、Tomcat6.0、MyEclipse 9.0、Java以及Blazeds。...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置![参考].pdf

    本篇文章将详细讲解如何配置Tomcat 6.0、MyEclipse 6.0以及MySQL 5.0的数据连接池。 首先,我们需要了解数据库连接池的作用。连接池在应用程序启动时创建一定数量的数据库连接,当应用程序需要访问数据库时,可以从...

    Tomcat6.0+MyEclipse6.0+mysql5.0数据库连接池配置!宣贯.pdf

    本篇将详细讲解如何在Tomcat6.0中,结合MyEclipse6.0集成开发环境以及MySQL5.0数据库,进行数据库连接池的配置。 首先,Tomcat6.0相较于早期版本在配置方面更加灵活,特别是数据库连接池的配置。一种常见的方式是...

    Myeclipse6.0 + Birt 安装

    对于Myeclipse 6.0这样的较早版本,若要使用Birt功能,需要手动安装Birt插件。下面将详细介绍在Myeclipse 6.0上安装Birt插件的步骤。 1. 首先,启动Myeclipse,然后进入菜单栏中的"Help"选项,选择"Software ...

    myeclipse6.5+flex 3 + tomcat6.0 + ds-console.war环境搭建

    在本文中,我们将深入探讨如何搭建一个基于MyEclipse 6.5、Flex 3、Tomcat 6.0和ds-console.war的开发环境。这个环境主要用于开发和部署使用Flex前端与Java后端交互的应用程序,特别是通过LCDS(LiveCycle Data ...

    MyEclipse6.0+SQL2000开发简单的通讯录系统

    在本文中,我们将深入探讨如何使用MyEclipse6.0集成开发环境(IDE)和SQL Server 2000数据库来构建一个简单的通讯录系统。这个项目旨在为初学者提供一个基础的数据库应用开发实例,帮助他们理解如何将Java编程语言与...

    MyEclipse6.0+SQL2005开发通讯录 

    在本文中,我们将深入探讨如何使用MyEclipse6.0集成开发环境(IDE)与Microsoft SQL Server 2005数据库来开发一个功能完备的通讯录应用。这个应用包括基本的增、删、改功能,并支持数据的分页显示,这对于用户友好性...

Global site tag (gtag.js) - Google Analytics