axis2的qname not fond for the package问题的解决

June15,2011|作者:白菜

在一个项目组,需要用到webservice,虽然现有的webservice组件为axis2,比较古老了,不过夜没办法,是个老项目。

不过AXIS2还算好用,就是还是复杂了一些。

在部署webservice的时候,我们可以通过这样的方法来在浏览器中测试

http://aiyooyoo.com/service/getStudentService/listStudent?unit=5

getStudentService为服务名,listStudent为方法名,而unit=5自然就是参数了。

在测试的时候,发现如果是基本类型的话,就能正常运行,但我这次需要的是一个list<student>的集合类型。

在浏览器中报错如下:

qnamenotfondforthepackagecom.aiyooyoo.com.dbutil

很明显,我的代码里是有这个包的,刚开始怀疑是这种方法有局限性造成的,于是用代码写了个客户端进行测试,问题依然如此。现在就确实确实是返回类型的问题了,如果返回int等基本类型就正常。

查了下资料,发现AXIS2不支持集合,而axis1反倒支持,axis2需要用对象数组的方式来处理,为了已有类的通用性,想到了我可以再服务器端先把集合转换为字符串,再在客户端把字符串转换为集合,不就解决了吗。

于是,主要代码如下:

//集合转字符串

Listlist<Student>=newarrayList<Student>();

....

returnlist.toString();

//字符串转集合

JSONArrayjsonArray=JSONArray.fromObject(jsonString);

JSONObjectjsonObject;

ObjectpojoValue;

Listlist=newArrayList();

for(inti=0;i<jsonArray.size();i++){

jsonObject=jsonArray.getJSONObject(i);

pojoValue=JSONObject.toBean(jsonObject,Student.class);

list.add(pojoValue);

}

returnlist;

}

相关推荐