当前位置: 代码迷 >> Web前端 >> play!中运用webservice
  详细解决方案

play!中运用webservice

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

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

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

更多可以看这里:http://hi.baidu.com/waltertan/blog/item/feee9f19b07b1d76dbb4bd4b.html 把远程的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将会弹出

你也在图上看到了怎么配置了,名字随你爱好,关键就是参数配置而已,其它的一目了然,建议把要生成的wsdl文件复制到工程根目录下,方便管理。
下图的配置就是说生成后刷新哪个目录,使生成的文件加载到工程中来,不用自己再去刷新一次工程目录,省事...

看看除了生成java代码是使用了apache cxf,运行时好像并不依赖它们,真是更省事!!!有木有!!!!以后要重新用wsdl2java生成java代码,只需手指一点这个扩展命令就自动生成了,方便吧!
---------------------------华丽分割线-------------------------------------
文章就止结束,如果你有更好的方法愿意分享就联系我吧!!923933533(都知道这是什么号吧) liujiuwu@gmail.com

  相关解决方案