Android调用Xfire开发的java-webservice
来源:互联网 发布:nginx搭建静态服务器 编辑:程序博客网 时间:2024/05/17 07:46
这里注重讲解如何开发Android-webservice。java如何开发webservice就不在描述。生成的wsdl文件如下。(测试方法)
<?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions targetNamespace="http://dao.simul.com" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:tns="http://dao.simul.com" 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">- <wsdl:types>- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://dao.simul.com">- <xsd:element name="uploadCMAHeartbeatInfo">- <xsd:complexType>- <xsd:sequence> <xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element>- <xsd:element name="uploadCMAHeartbeatInfoResponse">- <xsd:complexType>- <xsd:sequence> <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element>- <xsd:element name="sayHello">- <xsd:complexType>- <xsd:sequence> <xsd:element maxOccurs="1" minOccurs="1" name="in0" nillable="true" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element>- <xsd:element name="sayHelloResponse">- <xsd:complexType>- <xsd:sequence> <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types>- <wsdl:message name="sayHelloResponse"> <wsdl:part name="parameters" element="tns:sayHelloResponse" /> </wsdl:message>- <wsdl:message name="uploadCMAHeartbeatInfoRequest"> <wsdl:part name="parameters" element="tns:uploadCMAHeartbeatInfo" /> </wsdl:message>- <wsdl:message name="uploadCMAHeartbeatInfoResponse"> <wsdl:part name="parameters" element="tns:uploadCMAHeartbeatInfoResponse" /> </wsdl:message>- <wsdl:message name="sayHelloRequest"> <wsdl:part name="parameters" element="tns:sayHello" /> </wsdl:message>- <wsdl:portType name="mywebservicePortType">- <wsdl:operation name="uploadCMAHeartbeatInfo"> <wsdl:input name="uploadCMAHeartbeatInfoRequest" message="tns:uploadCMAHeartbeatInfoRequest" /> <wsdl:output name="uploadCMAHeartbeatInfoResponse" message="tns:uploadCMAHeartbeatInfoResponse" /> </wsdl:operation>- <wsdl:operation name="sayHello"> <wsdl:input name="sayHelloRequest" message="tns:sayHelloRequest" /> <wsdl:output name="sayHelloResponse" message="tns:sayHelloResponse" /> </wsdl:operation> </wsdl:portType>- <wsdl:binding name="mywebserviceHttpBinding" type="tns:mywebservicePortType"> <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> - <wsdl:operation name="uploadCMAHeartbeatInfo"> <wsdlsoap:operation soapAction="" /> - <wsdl:input name="uploadCMAHeartbeatInfoRequest"> <wsdlsoap:body use="literal" /> </wsdl:input>- <wsdl:output name="uploadCMAHeartbeatInfoResponse"> <wsdlsoap:body use="literal" /> </wsdl:output> </wsdl:operation>- <wsdl:operation name="sayHello"> <wsdlsoap:operation soapAction="" /> - <wsdl:input name="sayHelloRequest"> <wsdlsoap:body use="literal" /> </wsdl:input>- <wsdl:output name="sayHelloResponse"> <wsdlsoap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding>- <wsdl:service name="mywebservice">- <wsdl:port name="mywebserviceHttpPort" binding="tns:mywebserviceHttpBinding"> <wsdlsoap:address location="http://113.140.93.110:8888/mywebservice/services/mywebservice" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
其中uploadCMAHeartbeatInfo和sayHello都是要访问的接口方法。
建立Android项目。添加ksoap2-android-assembly-2.4-jar-with-dependencies.jar到项目中。
新建类:WebServiceHelper.java
package com.sunny;import java.io.IOException;import org.ksoap2.SoapEnvelope;import org.ksoap2.SoapFault;import org.ksoap2.serialization.SoapObject;import org.ksoap2.serialization.SoapSerializationEnvelope;import org.ksoap2.transport.HttpTransportSE;import org.xmlpull.v1.XmlPullParserException;public class WebServiceHelper {private static final String NAMESPACE = "http://dao.simul.com/";// WSDL文档的URL 注意这里要用ip,即使是本机也不能用localhost或者127.0.0.1代替private static final String URL = "http://113.140.93.110:8888/mywebservice/services/mywebservice";// 定义调用的WebService方法名private static final String METHODNAME = "sayHello";public static String sayHello(String str) {String show = null;// 指定WebService的命名空间和调用的方法名利用SoapObject类// 第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。// 第2个参数表示要调用的WebService方法名SoapObject request = new SoapObject(NAMESPACE, METHODNAME);// 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下// 要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。request.addProperty("aa", str);// 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述// 构造方法设置SOAP协议的版本号:该版本号需要根据服务端WebService的版本号设置// SoapSerializationEnvelope对象后,不要忘了设置SoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第1步创建的SoapObject对象。SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.dotNet = false;envelope.setOutputSoapObject(request);//创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URLHttpTransportSE transport = new HttpTransportSE(URL);//transport.debug = true;// web service请求try {//使用call方法调用WebService方法transport.call(NAMESPACE+METHODNAME, envelope);//使用getResponse方法获得WebService方法的返回结果SoapObject result = (SoapObject)envelope.bodyIn; show=(String)result.getProperty(0).toString(); } catch (SoapFault e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}return show;}}
测试的Activity
package com.sunny;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.sunny.R.id;public class Activity01 extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity);Button myButton = (Button)findViewById(id.mButton);final TextView tx=(TextView)findViewById(R.id.myTextView1);myButton.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) {String show = WebServiceHelper.sayHello("sunny");tx.setText(show);}});}}
运行程序:
到此开发完成。
其中项目中要注意的地方有几点,陈列如下
1.在AndroidManifest.xml中加入网络访问权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2.要注意url的地址不能为内网ip,必须为公网ip
http://XXX.XXX.XXX.XXX:8888/mywebservice/services/mywebservice(正确)
http://192.168.0.110:8888/mywebservice/services/mywebservice(错误)
3.Xfire的webservice不能加入.wsdl后缀。
基本就是这些,因为android-webservice的访问情况不一。我这里说的是我遇到的问题。就是这么解决的。
如有不能解决的地方,需自己仔细分析原因。
- Android调用Xfire开发的java-webservice
- java用XFire开发调用webService例子
- java用XFire开发调用webService例子
- java调用webservice XFire!
- java调用webservice XFire
- java调用webservice XFire
- java(xfire)调用java编写的webservice
- java XFire 开发 WebService
- [Java] Xfire开发WebService
- xfire开发并调用webservice
- 使用java的xfire调用.net的webservice-王亮
- 使用java的xfire调用.net的webservice-王亮
- xFire实现Java间自定义类型的WebService调用(一)
- xFire实现Java间自定义类型的WebService调用(二)
- xFire实现Java间自定义类型的WebService调用(一)
- xFire实现Java间自定义类型的WebService调用(二)
- C++调用java基于XFire的WebService接口
- 用xfire实现基于java的webservice接口调用
- 复制网页至Word时, 如何确保图片复制完全
- Oracle中的 UPDATE FROM 解决方法
- C语言宏定义技巧(常用宏定义)
- 我的程序人生
- MFC中怎样把抓取到的位图保存到指定文件中
- Android调用Xfire开发的java-webservice
- httpclient 4.1.2 的SSL使用方法
- Java学习之-----反射机制
- HTTP调试工具:Fiddler 介绍
- 使用微软的FCI/FDI库进行文件压缩
- Python正则表达式指南
- hibernate 13 优化抓取和高速缓存 | hibernate 实战(第二版) 第13章优化抓取和高速缓存 | 笔记
- 网页Adobe Reader ActiveX控件的说明文档
- 如何使用VS 2008 打开VS 2010