Myeclpse6.0+Axis2 返回对象数组(List)的webservice例子
2008-09-05 11:16
295 查看
【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版本 有所不同,相关工具历史版本下载链接
http://archive.apache.org/dist/ws/axis2/tools/1_4_1/。
在演示例子前,你必须已经安装好了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文件:
package org.way;
import java.util.List;
// Generated by MyEclipse
public interface Ihello
{
public String example(String message);
}
helloImpl.java文件
package org.way;
import java.util.ArrayList;
import java.util.List;
// Generated by MyEclipse
public class helloImpl implements Ihello
{
public String example(String message)
{
return null;
}
}
例子的目的是要返回一个对象数组,因此我可以将上面文件改成
新的Ihello.java文件:
package org.way;
import java.util.List;
// Generated by MyEclipse
public interface Ihello
{
public List<HelloBean> example(String message);
}
新的helloImpl.java文件
package org.way;
import java.util.ArrayList;
import java.util.List;
// Generated by MyEclipse
public class helloImpl implements Ihello
{
public List<HelloBean> example(String message)
{
List<HelloBean> list = new ArrayList<HelloBean>();
return list;
}
}
新的两个文件对学习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例子
生成之后的项目结构是:
需要注意其他三个文件:HelloTest.java 是测试文件,HelloStub,java是给客户端用的,HelloSkeleton.java:我们要实现的webservice业务代码需要在这个文件中编写,我们的业务是:输入string 输出对象数组,采用java语言描述则是 见代码注释
HelloSkeleton.java:
/**
* HelloSkeleton.java
*
* This file was auto-generated from WSDL by the Apache Axis2 version: 1.4 Built on : Apr 26, 2008
* (06:24:30 EDT)
*/
package org.way;
/**
* HelloSkeleton java skeleton for the axisService
*/
public class HelloSkeleton implements HelloSkeletonInterface
{
/**
* Auto generated method signature
*
* @param examplein00
*/
public org.way.Exampleout example(org.way.Examplein0 examplein00)
{
//输出的对象
Exampleout out=new Exampleout();
HelloBean hb=null;
//包含一个数组 的对象
ArrayOfHelloBean param=new ArrayOfHelloBean();
for (int i = 0; i <10; i++)
{
hb=new HelloBean();
hb.setCid("Cid="+i);
hb.setName(examplein00.getExamplein0());
hb.setSex("sex");
//将单个实体加入到对象数组里面
param.addHelloBean(hb);
}
out.setExampleout(param);
return out;
}
}
打包生成*.arr 文件。名称任意。放到 axis2/WEB-INF/services 下面
启动tomcat
最后junit测试,HelloTest.java 文件
package org.way;
import org.way.HelloStub.HelloBean;
/*
* HelloTest Junit test case
*/
public class HelloTest extends junit.framework.TestCase
{
/**
* Auto generated test method
*/
public void testexample() throws java.lang.Exception
{
String url="http://192.168.0.70:8080/axis2/services/hello";
org.way.HelloStub stub = new org.way.HelloStub(url);// the default implementation should
// point to the right endpoint
org.way.HelloStub.Examplein0 request = (org.way.HelloStub.Examplein0) getTestObject(org.way.HelloStub.Examplein0.class);
request.setExamplein0("wayfoon");
//System.out.println(stub.example(request).getExampleout());
HelloStub.ArrayOfHelloBean arrayOfHelloBean=(HelloStub.ArrayOfHelloBean)stub.example(request).getExampleout();
HelloStub.HelloBean[] localHelloBean=(HelloStub.HelloBean[])arrayOfHelloBean.getHelloBean();
System.out.println("length:"+localHelloBean.length);
for (int i = 0; i < localHelloBean.length; i++)
{
HelloStub.HelloBean hb=(HelloStub.HelloBean)localHelloBean[i];
System.out.println("{Cid:"+hb.getCid()+" Name:"+hb.getName()+"},");
}
assertNotNull(stub.example(request));
}
// Create an ADBBean and provide it as the test object
public org.apache.axis2.databinding.ADBBean getTestObject(
java.lang.Class type) throws java.lang.Exception
{
return (org.apache.axis2.databinding.ADBBean) type.newInstance();
}
}
输入: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
欢迎转载,转载请保留申明信息。
最近公司要求实现一个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版本 有所不同,相关工具历史版本下载链接
http://archive.apache.org/dist/ws/axis2/tools/1_4_1/。
在演示例子前,你必须已经安装好了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文件:
package org.way;
import java.util.List;
// Generated by MyEclipse
public interface Ihello
{
public String example(String message);
}
helloImpl.java文件
package org.way;
import java.util.ArrayList;
import java.util.List;
// Generated by MyEclipse
public class helloImpl implements Ihello
{
public String example(String message)
{
return null;
}
}
例子的目的是要返回一个对象数组,因此我可以将上面文件改成
新的Ihello.java文件:
package org.way;
import java.util.List;
// Generated by MyEclipse
public interface Ihello
{
public List<HelloBean> example(String message);
}
新的helloImpl.java文件
package org.way;
import java.util.ArrayList;
import java.util.List;
// Generated by MyEclipse
public class helloImpl implements Ihello
{
public List<HelloBean> example(String message)
{
List<HelloBean> list = new ArrayList<HelloBean>();
return list;
}
}
新的两个文件对学习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例子
生成之后的项目结构是:
需要注意其他三个文件:HelloTest.java 是测试文件,HelloStub,java是给客户端用的,HelloSkeleton.java:我们要实现的webservice业务代码需要在这个文件中编写,我们的业务是:输入string 输出对象数组,采用java语言描述则是 见代码注释
HelloSkeleton.java:
/**
* HelloSkeleton.java
*
* This file was auto-generated from WSDL by the Apache Axis2 version: 1.4 Built on : Apr 26, 2008
* (06:24:30 EDT)
*/
package org.way;
/**
* HelloSkeleton java skeleton for the axisService
*/
public class HelloSkeleton implements HelloSkeletonInterface
{
/**
* Auto generated method signature
*
* @param examplein00
*/
public org.way.Exampleout example(org.way.Examplein0 examplein00)
{
//输出的对象
Exampleout out=new Exampleout();
HelloBean hb=null;
//包含一个数组 的对象
ArrayOfHelloBean param=new ArrayOfHelloBean();
for (int i = 0; i <10; i++)
{
hb=new HelloBean();
hb.setCid("Cid="+i);
hb.setName(examplein00.getExamplein0());
hb.setSex("sex");
//将单个实体加入到对象数组里面
param.addHelloBean(hb);
}
out.setExampleout(param);
return out;
}
}
打包生成*.arr 文件。名称任意。放到 axis2/WEB-INF/services 下面
启动tomcat
最后junit测试,HelloTest.java 文件
package org.way;
import org.way.HelloStub.HelloBean;
/*
* HelloTest Junit test case
*/
public class HelloTest extends junit.framework.TestCase
{
/**
* Auto generated test method
*/
public void testexample() throws java.lang.Exception
{
String url="http://192.168.0.70:8080/axis2/services/hello";
org.way.HelloStub stub = new org.way.HelloStub(url);// the default implementation should
// point to the right endpoint
org.way.HelloStub.Examplein0 request = (org.way.HelloStub.Examplein0) getTestObject(org.way.HelloStub.Examplein0.class);
request.setExamplein0("wayfoon");
//System.out.println(stub.example(request).getExampleout());
HelloStub.ArrayOfHelloBean arrayOfHelloBean=(HelloStub.ArrayOfHelloBean)stub.example(request).getExampleout();
HelloStub.HelloBean[] localHelloBean=(HelloStub.HelloBean[])arrayOfHelloBean.getHelloBean();
System.out.println("length:"+localHelloBean.length);
for (int i = 0; i < localHelloBean.length; i++)
{
HelloStub.HelloBean hb=(HelloStub.HelloBean)localHelloBean[i];
System.out.println("{Cid:"+hb.getCid()+" Name:"+hb.getName()+"},");
}
assertNotNull(stub.example(request));
}
// Create an ADBBean and provide it as the test object
public org.apache.axis2.databinding.ADBBean getTestObject(
java.lang.Class type) throws java.lang.Exception
{
return (org.apache.axis2.databinding.ADBBean) type.newInstance();
}
}
输入: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
欢迎转载,转载请保留申明信息。
相关文章推荐
- Myeclpse6.0+Axis2 返回对象数组(List)的webservice例子
- axis2远程调用webservice例子(返回xml用dom4j解析)
- axis2 webservice 服务器端和客户端实现例子。
- 关于eclipse+ tomcat 6.0+axis2发布webservice简单实例补充
- 一个axis2 webservice helloword例子
- axis2 webservice 简单例子
- 基于Axis2开发WebService简单例子
- Ajax--WebService返回List
- axis2 webservice 小例子
- 如何使用xFire开发webService返回复杂对象List
- 发布webservice接口时报错-HTTP Status 500 - File "/axis2-web/listSingleService.jsp" not found
- axis webservice返回List 对象数组
- MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice
- webservice 学习笔记,axis2 传递对象数组,非stub方式
- axis2 client 调用webservice例子
- JAVA 用axis2调用webservice例子。
- 初学webservice,使用axis2第一个例子
- 利用Axis2开发WebService(6)---axis2 传递对象数组,非stub方式
- Axis2发布WebService例子(HelloWorld)
- 在 Webservice 返回 IList 数据