play!中使用webservice

第一种方式见:[url]http://playframework.wordpress.com/2010/08/15/web-services-using-play/[/url]
直接使用play!的WS工具类操作,对少量和简单接口来说非常方便。
现在主要分享一下第二种方式:在play!中使用 Apache CXF来使用webservice,其实你也可以选其它的看你自己的意愿了。

首先去[url]http://cxf.apache.org/download.html[/url]下载apache cxf,然后把bin加到环境变量中备用。
然后你就可以看看官方的这个文档了解一下wsdl2java工具的使用 [url]http://cxf.apache.org/docs/wsdl-to-java.html[/url]
wsdl2java -d 输出目录 -p 包名 -fe jaxws21 wsdl文件(这里可以是远程wsdl地址也可以是本地文件)

我在用这个工具生成时用远程地址时,由于报
WSDLToJava Error: Thrown by JAXB : undefined element declaration 's:schema'

更多可以看这里:[url]http://hi.baidu.com/waltertan/blog/item/feee9f19b07b1d76dbb4bd4b.html[/url] 把远程的wsdl另存为,然后删除其中的s:schema,使用wsdl2java的时候使用本地这个wsdl生成java文件也是一样的。但是要注意一下wsdl文件中soap:address的配置是否正确,不然会悲剧的,我就悲剧过了,请求时总是提示不可连接超时。
说了这么多还没和超爱的play!扯上关系,接着来,把上一步生成的java文件复制到play!工程源码中,这样就可以在play! controllers中直接使用便利的webservice了。

public static void getCategory() {
List<String> categories = (List<String>) Cache.get("categories");
if (categories == null) {
Logger.info("getCategory远程服务获取数据");
WsDataEngineForWebSite ws = new WsDataEngineForWebSite();
WsDataEngineForWebSiteSoap wsp = ws.getWsDataEngineForWebSiteSoap12();
GetCategoryResult categoryResult = wsp.getCategory();
Element categoryElement = (Element) categoryResult.getAny();

categories = new ArrayList<String>();
for (Node event : XPath.selectNodes("//NewDataSet//Table1", categoryElement)) {
String sort = XPath.selectText("sort", event);
String name = XPath.selectText("name", event);
String ename = XPath.selectText("ename", event);
categories.add(StringUtils.trimToEmpty(sort) + "|" + StringUtils.trimToEmpty(name) + "|" + StringUtils.trimToEmpty(ename));
}
Cache.set("categories", categories, "2min");
}
render(categories);
}

这里同时感谢下play!提供的XPath工具类,真是很方便,如果是用scala来做,解析起来更方便了,只是俺不熟不多扯。当然有工具可以将xml数据片段直接转为java object这样操作起来更方便,但没找到更简洁的转换办法,如果有告诉我一下,谢谢!
最后再说个技巧,如果频繁的用wsdl2java生成java文件复制也很麻烦,在eclipse中有很便捷的办法,见系列套图如下:
点run -> external tools -> External Tools Configurations将会弹出
[img]http://dl.iteye.com/upload/attachment/492217/b4c16eda-1d68-3a74-abf6-b94936c63c95.jpg[/img]
你也在图上看到了怎么配置了,名字随你爱好,关键就是参数配置而已,其它的一目了然,建议把要生成的wsdl文件复制到工程根目录下,方便管理。
下图的配置就是说生成后刷新哪个目录,使生成的文件加载到工程中来,不用自己再去刷新一次工程目录,省事...
[img]http://dl.iteye.com/upload/attachment/492219/8fa5ba5c-589e-3ce0-8c48-4c67d58a584a.jpg[/img]
看看除了生成java代码是使用了apache cxf,运行时好像并不依赖它们,真是更省事!!!有木有!!!!以后要重新用wsdl2java生成java代码,只需手指一点这个扩展命令就自动生成了,方便吧!
---------------------------华丽分割线-------------------------------------
文章就止结束,如果你有更好的方法愿意分享就联系我吧!!923933533(都知道这是什么号吧) liujiuwu@gmail.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值