webservice传递List对象
用的axis2做的webservice
刚学会的……
前辈教的,很简单就会了!但是不知道怎么传递复杂的对象。现在做的项目就是要传递List<javaBean>,不知道怎么做了……
从网上搜了好久,发现都是要改写wsdd文件什么的。可是使用axis的好处是可以根据wsdl自动生成大部分代码。我做的webservice的时候只改写了web.xml,并且添加了一个services.xml,就把webservice做好了,然后new->other->Axis2 Code Generator,一步一步生成客户端编码的,所以从网上搜得方法,我直接看晕了,感觉在我这不适用!
求哪位大虾给指点……
急……
谢谢……
------解决方案--------------------
不知道你看的是什么材料,在wsdl语言里面从来没有说描述List的类型。因为IDL要跨语言,有些语言里面有List有些语言压根就没有这个,所以根本没有直接修改wsdd文件的方法。
实际上java做webservice开发如果传递List<JavaBean>对象,是采用的将List转化为JavaBean数组的方法,在一段将List转化为数组然后wsdl描述数组进行传递,另外一方接受到数组之后处理——如果另外一方也是java解析,可以重新转化为List<JavaBean>,如果是C#也可以转成相应的列表
我们上学期软件工程作业就遇到这个问题,解决思路也是这个。
JavaBean里面数据类型和引用对象类型要符合JavaBean规范,空的构造方法,实现序列化接口,这个你们应该知道的吧
------解决方案--------------------
List转化为JavaBean的数组,注意转化为数组而不是JavaBean,具体的实现就是List转化为数组的语法
还有wsdl不是生成的,wsdl是webservice description language是语言,生成的文件是wsdd文件其实就是一个xml文件
具体的例子代码太多了,跟业务逻辑柔和在一起,你是想要转换为数组的么?给你贴具体转换的代码
Java code
@Override
public EventIdl[] find(String queryString) {
Session session = HibernateUtil.getSession();
Transaction ts = session.beginTransaction();
List lst = session.createQuery(queryString).list();
ts.commit();
HibernateUtil.closeSession();//上面代码都是通过Hibernate获得服务器的查询结果
//查询结果是一个List<Event>类型
EventIdl[] eis = new EventIdl[lst.size()];//新建同样长度数组
Iterator iter = lst.iterator();
int i = 0;
while(iter.hasNext()) {
Event e = (Event) iter.next();//获得list里面数据,进行必要转化
//在你的程序里面如果Event符合JavaBean规范就可以直接用Event数组
//我们程序里面的Event有个字段不符合规范,转换为EventIdl类型
eis[i++] = Event.toEventIdl(e);//对每个数组元素赋值
}
return eis;
}
------解决方案--------------------
你webservice什么水平,如果利用axis2发送和接收JavaBean的程序基础有么?
如果有的话,在客户端没有什么特别的,就是接收到的变成相应的对象数组罢了
还有webservice涉及东西比较多,不像一个GUI纯Java代码给你就贴上来,就是给你
说怎么传List的思路,你如果提不出再针对和具体的问题,笼统的要代码没多少意义的
肯定的说客户端不需要更改什么配置,需要写代码接收对象,但是需要服务端写好的webservice在应用服务器
上成功发布才行
------解决方案--------------------
wsdd这些xml文件是利用工具自动生成的,不是不需要写……
------解决方案--------------------
你查看axis2的入门实例,就能找到wsdd文件,说了是自动给你生成的,你要修改什么,本来就不想让你修改的
没给你发送和接收的程序,我重申一遍,我的回答就是针对如何发送和装换List数组,所以贴出来的就跟这个
有关就是List转化为数组了
怎么接收和发送数组对象跟axis2发送普通JavaBean对象一个道理