ksoap2连接 web service
2015-08-06 23:19
417 查看
首先说说Ksoap2:
Ksoap是Enhydra.org组织的一个开源作品,他是基于Enhydra.org出品的开源通用XML解析器KXML上进行开发的,2002年推出了Ksoap1.2版本,2003年推出了Ksoap2版本,Ksoap2提供了对soap序列化更好的支持。Ksoap2是一个轻量级的J2ME平台的实现框架,提供了soap协议消息的组装,网络post,网络return,解析等功能。
(下载地址:http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/3.4.0/ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar)可以把文件名去掉选择你想要的版本。
等下会用到的的一些常用接口。
再来说说:
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。
但是, 他已经被CXF 所取代了,CXF继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。
不过这里仍然用的时Xfire
好了,开始正题
先新建一个web service project
这里别忘了选择Xfire
![](http://images0.cnblogs.com/blog2015/737105/201508/062239428629435.png)
对于myeclipse没有Xfire的情况:
进入help->MyEclipse Configer Center ,点选Software选项卡,左侧有个Browse Software,点击导航右侧的 Add Site,弹出对话框,填入名称“XFire”(任填)和站点' http://dist.codehaus.org/xfire/update/ ', 在Browse Software下多了XFire的选项,双击选项,然后在Updates Aviables里面在单选框中打对勾,然后更新,会弹出更新向导,然后Next。。。
然后 定义个接口
接着 实现接口
然后 新建一个 web service
![](http://images0.cnblogs.com/blog2015/737105/201508/062252183153075.png)
下一步
![](http://images0.cnblogs.com/blog2015/737105/201508/062254347212602.png)
在下一步 填入你定义的接口和接口实现类 就行了
然后在 浏览器中输入:http://192.168.156.1/FilesProject/services/lyl?wsdl 如果可以看到描述信息 ,证明后台就布置好了。
2、wsdl
网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。
然后就是android端了
首先要导入 Xfire的jar包
选择工程右键properties
java build path
add External Jars:
![](http://images0.cnblogs.com/blog2015/737105/201508/062310524096545.png)
然后这里要特别注意一下:选择Order and Export 将导入的包打上对勾
不然就会这样的报错: java.lang.NoClassDefFoundError
因为jar包没有导进apk
配置权限:
<uses-permission android:name="android.permission.INTERNET"/>
布局自己搞定。
Ksoap是Enhydra.org组织的一个开源作品,他是基于Enhydra.org出品的开源通用XML解析器KXML上进行开发的,2002年推出了Ksoap1.2版本,2003年推出了Ksoap2版本,Ksoap2提供了对soap序列化更好的支持。Ksoap2是一个轻量级的J2ME平台的实现框架,提供了soap协议消息的组装,网络post,网络return,解析等功能。
(下载地址:http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/3.4.0/ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar)可以把文件名去掉选择你想要的版本。
等下会用到的的一些常用接口。
接口 |
SoapEnvelope 对应于SOAP规范中的SOAP Envelope,封装了head和body对象。 SoapSerializationEnvelope SoapSerializationEnvelope是对SoapEnvelope的扩展,对SOAP序列化(Serialization)格式规范提供了支持,能够对简单对象自动进行序列化(simple object serialization)。 SoapObject SoapObject更方便地构造SOAP调用; HttpTransport HttpTransport屏蔽了Internet访问/请求和获取服务器SOAP的细节。 |
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。
但是, 他已经被CXF 所取代了,CXF继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。
不过这里仍然用的时Xfire
好了,开始正题
先新建一个web service project
这里别忘了选择Xfire
![](http://images0.cnblogs.com/blog2015/737105/201508/062239428629435.png)
对于myeclipse没有Xfire的情况:
进入help->MyEclipse Configer Center ,点选Software选项卡,左侧有个Browse Software,点击导航右侧的 Add Site,弹出对话框,填入名称“XFire”(任填)和站点' http://dist.codehaus.org/xfire/update/ ', 在Browse Software下多了XFire的选项,双击选项,然后在Updates Aviables里面在单选框中打对勾,然后更新,会弹出更新向导,然后Next。。。
然后 定义个接口
package hpu.lyl.filestore.services; public interface IFileServices { //保存文件 public void save(String fileName, String content) throws Exception; //读取文件 public String load(String fileName) throws Exception; }
接着 实现接口
package hpu.lyl.filestore.services.impl; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Scanner; import hpu.lyl.filestore.services.IFileServices; public class FileServicesImpl implements IFileServices{ public String load(String fileName) throws Exception { File file = new File("D:" + File.separator + "android" + File.separator + fileName); //判断文件是否存在 if(!file.exists()){ return null ; } StringBuffer buf = new StringBuffer() ; Scanner scan = new Scanner(new FileInputStream(file)) ; scan.useDelimiter("\n") ; while(scan.hasNext()){ buf.append(scan.next()) ; } scan.close(); return buf.toString() ; } public void save(String fileName, String content) throws Exception { File file = new File("D:" + File.separator + "android" + File.separator + fileName); if (!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } PrintStream out = new PrintStream(new FileOutputStream(file)); out.print(content); out.close(); } }
然后 新建一个 web service
![](http://images0.cnblogs.com/blog2015/737105/201508/062252183153075.png)
下一步
![](http://images0.cnblogs.com/blog2015/737105/201508/062254347212602.png)
在下一步 填入你定义的接口和接口实现类 就行了
然后在 浏览器中输入:http://192.168.156.1/FilesProject/services/lyl?wsdl 如果可以看到描述信息 ,证明后台就布置好了。
这里在说说两句:
1、webservice
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。2、wsdl
网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。
3、soap
简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。然后就是android端了
首先要导入 Xfire的jar包
选择工程右键properties
java build path
add External Jars:
![](http://images0.cnblogs.com/blog2015/737105/201508/062310524096545.png)
然后这里要特别注意一下:选择Order and Export 将导入的包打上对勾
不然就会这样的报错: java.lang.NoClassDefFoundError
因为jar包没有导进apk
package com.example.webserviceproject; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button save = null; private Button load = null; private TextView show = null; private static final String NAMESPACE = "http://192.168.156.1/"; private static final String URL = "http://192.168.156.1/FilesProject/services/lyl"; private static final String SAVE_METHOD_NAME = "save"; private static final String LOAD_METHOD_NAME = "load"; private static final String SOAP_ACTION = "http://192.168.156.1/FilesProject/services/"; private Handler handle=new Handler(){ public void handleMessage(android.os.Message msg) { if(msg.what==0){ show.setText(msg.obj.toString()); } if(msg.what==1){ Toast.makeText(MainActivity.this, "数据保存成功", Toast.LENGTH_SHORT) .show(); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.save = (Button) super.findViewById(R.id.save); this.load = (Button) super.findViewById(R.id.load); this.show = (TextView) super.findViewById(R.id.show); this.save.setOnClickListener(new SaveOnClickListenerImpl()); this.load.setOnClickListener(new LoadOnClickListenerImpl()); } public class SaveOnClickListenerImpl implements OnClickListener { public void onClick(View v) { Thread thread = new Thread(null, saveInThread, "save"); thread.start(); } } public class LoadOnClickListenerImpl implements OnClickListener { public void onClick(View v) { Thread thread = new Thread(null, loadInThread, "load"); thread.start(); } } public Runnable saveInThread = new Runnable() { public void run() { SoapObject soapObject = new SoapObject(NAMESPACE, SAVE_METHOD_NAME); System.out.println("ssss"); soapObject.addProperty("fileName", "lyl.txt"); soapObject.addProperty("content", "ni hao wo shi ni da ye"); // 常量SoapEnvelope.VER10:对应于SOAP 1.0规范 // 常量SoapEnvelope.VER11:对应于SOAP 1.1规范 // 常量SoapEnvelope.VER12:对应于SOAP 1.2规范 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut = soapObject; envelope.dotNet = false; envelope.setOutputSoapObject(soapObject); // 传输 // HttpTransport是一个强大的辅助类,来完成Http-call // 它封装了网络请求的一切,你完全不用考虑序列化消息。 // HttpTransport仅仅负责把SoapEnvelope发送出去并接收响应 HttpTransportSE trans = new HttpTransportSE(URL); // 通过设置它的debug属性为true来打开调试信息。 trans.debug = true; // 使用调试功能 try { // 可以发送请求给服务器、接收服务器响应并序列化SOAP消息 trans.call(SOAP_ACTION, envelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } Message msg=handle.obtainMessage(1); msg.sendToTarget(); } }; public Runnable loadInThread = new Runnable() { public void run() { SoapObject soapObject = new SoapObject(NAMESPACE, LOAD_METHOD_NAME); soapObject.addProperty("fileName", "lyl.txt"); SoapSerializationEnvelope soapSerializationEnvelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); soapSerializationEnvelope.bodyOut=soapObject; soapSerializationEnvelope.dotNet=false; soapSerializationEnvelope.setOutputSoapObject(soapObject); HttpTransportSE trans=new HttpTransportSE(URL); trans.debug=true; try { trans.call(SOAP_ACTION, soapSerializationEnvelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } SoapObject result=(SoapObject)soapSerializationEnvelope.bodyIn; Message msg=handle.obtainMessage(0, result.getProperty(0)); msg.sendToTarget(); System.out.println("ddddddddddddddd"); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
配置权限:
<uses-permission android:name="android.permission.INTERNET"/>
布局自己搞定。
相关文章推荐
- Codeforces Round #313 Gerald is into Art (枚举)
- Scala 深入浅出实战经典 第1讲 Scala开发环境搭建和HelloWorld解析
- 1.Linux下libevent和memcached安装
- 1.Linux下libevent和memcached安装
- CF_37A_Towers
- Android:Toast 弹出信息框
- 实现一边打包一边删除文件
- org-reveal 特效
- 表单前端验证+ajax异步请求
- 1671 Walking Ant【bfs】
- vim 插件 syntastic 头文件找不到
- CF_525C_IlyaAndSticks
- 关于就业指导和职业规划
- 第1章 Sass简介
- Hibernate工作原理及为什么要用?
- JQuery获取复选框checkbox的值
- VS2010调试程序启动时加载程序非常慢的
- B1010 一元多项式求导 (25)
- replace() MySQL批量替换指定字段字符串
- JPA和hibernate的关系