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
同步定位与地图构建(SLAM)技术为移动机器人或自主载具在未知空间中的导航提供了核心支撑。借助该技术,机器人能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位与环境建模中的各类不确定性。 Matlab作为工程计算与数据可视化领域广泛应用的数学软件,具备丰富的内置函数与专用工具箱,尤其适用于算法开发与仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发与验证周期。 本次“SLAM-基于Matlab的同步定位与建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征提取、数据关联与地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器人导航与自主移动领域的研究人员提供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达与视觉传感器)的建立与应用、特征匹配与数据关联方法、滤波器设计(如扩展卡尔曼滤波与粒子滤波)、图优化框架(如GTSAM与Ceres Solver)以及路径规划与避障策略。通过项目实践,参与者可深入掌握SLAM算法的实现原理,并提升相关算法的设计与调试能力。 该项目同时注重理论向工程实践的转化,为机器人技术领域的学习者提供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化与可操作化,显著降低了学习门槛,提升了学习效率与质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器人、自动驾驶及无人机等领域的应用前景广阔。掌握该项技术不仅有助于提升个人专业能力,也为相关行业的技术发展提供了重要支撑。随着技术进步与应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器人技术领域的专业人员提供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参与者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值