XFire实践

学习做Web service, 要到xfire(v1.2.6)。将这可怕的经历记一下。

主要参考:XFire完整入门教程

其中提到的数据绑定(aegis.xml)一般可以通过Java泛型避开。

当然要使用IDE,我用的是Eclipse 4.3(Kepler) Java EE, 建立Dynamic Web Project.

Servlet容器使用Tomcat. 上述工程导出的WAR文件放置到tomcat的webapp目录下。

开发Android客户端,使用到一个ksoap2(v2.3, v2.4, v2.6.5,实测2.4可用)包,用于与服务器的SOAP通信。这比PC客户端简陋得多,但是PC客户端用到的一大堆JAR包无法作为Android应用的一部分,导出apk时出现异常(与dalvik格式冲突)。

主要参考:android调用web service(cxf)实例 和 在Android 中使用KSOAP2调用WebService

通过浏览器查看SOAP envelope的版本,比如http://xxx.xxx.xxx.xxx:8080/third/services/TravellerService?wsdl,支持soap11和soap12.


 <?xml version="1.0" encoding="UTF-8" ?> 
+ <wsdl:definitions targetNamespace="http://soft.cs.tsinghua.tutor.backend/UIAction" xmlns:ns1="http://model.tutor.tsinghua.cs.soft" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://soft.cs.tsinghua.tutor.backend/UIAction" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">


我在以下问题上花费了不少功夫:

window7企业版出了毛病,tomcat7.0.40运行后(未知是否成功),通过浏览器访问localhost:8080找不到站点。疑为端口被bugzilla占用,将其卸载后正常。

按照上述入门教程建立工程时,把services.xml错当成了service.xml, 运行后数次看见浏览器给出错误追踪信息显示前一个文件找不到而未觉悟。

为aegis.xml颇琢磨了一会。集合数据都要做类型说明吗?数组也要吗?当然不必。但是听同学蒋说用于交互数据的POJO类要setter和getter匹配。

同学蒋把我在linux下做的工程移植到他的mac本上,问题多多,系统安装的tomcat不能被eclipse识别出来,最后不得不从tomcat官网上下载一个linux版本来用。

org.xmlpull.v1.XmlPullParserException: expected: START_TAG。这个问题给我造成了巨大的麻烦。原因令人发指:被测的xfire的方法(请求/应答)失灵,返回的XML有错,换个好的方法就通信成功了。如果先用PC客户端测试了Service的某个方法得知它是有效的,就该用Android客户端尝试使用该方法。其间搜来些资料,有人说手机数据连接不正常,Web Service地址不要写IP地址要写域名,现在看来都很荒谬!

你可能感兴趣的:(tomcat,android,xfire,ksoap2)