- 浏览: 45632 次
- 性别:
- 来自: 日照
-
最新评论
-
xwz0528:
4楼的问题我也遇到过,webservice.webxml.co ...
J2ME使用KSoap调用C#开发的Web Service -
heshan664754022:
请教一个问题import java.io.IOExceptio ...
J2ME使用KSoap调用C#开发的Web Service -
heshan664754022:
弄出来了,以前学习都是用java开发的,走的是8080端口,没 ...
J2ME使用KSoap调用C#开发的Web Service -
xwz0528:
你不是用VS创建的Web Service吗,Web Servi ...
J2ME使用KSoap调用C#开发的Web Service -
heshan664754022:
我想问下系统自动生成的这个http://tempuri.org ...
J2ME使用KSoap调用C#开发的Web Service
J2ME使用KSoap调用C#开发的Web Service(1)
1.概述
对于J2ME访问远端的Web Service,除了官方标准JSR 172,我们还可以使用kSOAP。
kSOAP是Enhydra.org的一个开源作品,是EnhydraME项目的一部分。基于Enhydra.org出品的开源通用XML解析器kXML,kSOAP完成了J2ME/MIDP平台上的SOAP解析和调用工作。 Stefan Haustein领导的kSOAP开发小组于2001年5月17日推出了Alhpa版本。之后又经过了一年的开发,2002年6月6日推出的kSOAP 1.2支持了SOAP1.2规范。2003年8月25日推出的kSOAP2,对SOAP序列化规范支持得更好了。 大多数人选择kSOAP的原因是,kSOAP虽然在2003年8月之后就不再维护了,但它是Open Source的,很容易加入增强特性,比如说默认情况下kSOAP2仅仅支持cmnet接入点,可以修改kSOAP2的HttpTransport.java代码增加对cmwap接入点的支持。kSOAP2.0还有一个优点是,改进了对Microsoft dotNET的兼容。以前有很多人抱怨kSOAP调用dotNET编写的Web Service时遇到了不少的困扰。
2.例子
为了实现这一功能,今天和金金在网上搜了一整天,几乎把网络翻了一遍,见到的不是一样的东西,就是一些没解答的提问,简直是郁闷死了,中途我三次见了一下周公,呵呵,第三次醒来想起来要如何做了。先说一下我在网上收到的方法吧,把KSoap的Jar文件导入到工程中,然后再进行相应的操作,我照着做了,把jar文件导入到工程,在编译的时候是没有问题的,但在运行的时候去报错了,说java.lang.NoClassDefFoundError:org/xmlpull/v1/XmlPullParserException
可是我已经把类库Jar导入进去了啊,找了很长时间也无法解决,不知道网上的是怎么弄的,我用的是Eclipse+EclipseMe+Sun WTK。
还好我找到了解决方案,我从网上找到了KSoap的源码,把它工程src中的文件加进了我的src中,然后编译运行都还成功,在网上下的KSoap源码不全,少几个java文件,我就用反编译工具把相应的.class文件弄成.java文件,这样就生成了比较犬的Ksoap源码,见附件。下面就先从创建Web Service讲起:
我用的是VS2008,创建一个Web服务应用程序,代码如下:
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; namespace SimpleKSoapWS { /// <summary> /// Service1 的摘要说明 /// </summary> [WebService(Namespace = "urn:fengxing")] //创建时是自动生成的,把它注释掉 //[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //[ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class Service1 : System.Web.Services.WebService { [WebMethod] [SoapRpcMethod( Action = "urn:fengxing/Hello",//.NET 要求将 HTTP SOAPAction 头用来标识所请求的操作;其格式是服务的名称空间后跟操作名,中间用 / 隔开(例如, urn:fengxing/foo)。 RequestNamespace="", RequestElementName = "HelloRequest", ResponseNamespace="", ResponseElementName = "HelloResponse" )] public String Hello(String username, String password) { if (username != null) return ("Hello:" + username); else return "null"; } } }
点击启动调试就可以运行。
然后用Ksoap调用Web Service,创建一个J2ME Midlet Suite项目,添加名为Test的J2ME Midlet,再把Ksoap src文件夹下的文件添加到本项目src文件夹下,具体代码如下:
import java.io.IOException; import javax.microedition.midlet.*; import javax.microedition.io.ConnectionNotFoundException; import javax.microedition.lcdui.*; import org.ksoap2.*; import org.ksoap2.serialization.*; import org.ksoap2.transport.*; import org.xmlpull.v1.XmlPullParserException; public class Test extends MIDlet implements CommandListener{ private Display dis; private Command connectCmd=new Command("连接",Command.OK,1); private Command exitCmd=new Command("退出",Command.EXIT,1); private Form f; private StringItem si=new StringItem("",""); public Test() { // TODO Auto-generated constructor stub } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } protected void startApp() throws MIDletStateChangeException { // TODO Auto-generated method stub dis=Display.getDisplay(this); f=new Form("调用Web Service"); f.append("要显示的内容:"+"\n"); f.addCommand(connectCmd); f.addCommand(exitCmd); f.setCommandListener(this); dis.setCurrent(f); } public void commandAction(Command c, Displayable s) { // TODO Auto-generated method stub if (c == exitCmd) { try { destroyApp(false); notifyDestroyed(); } catch (MIDletStateChangeException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(c==connectCmd) { //匿名内部Thread,调用ksoap2访问远程服务 Thread webserviceThread=new Thread() { public void run() { String methodName="Hello"; String serviceURL="http://localhost:4450/Service1.asmx"; SoapObject request=new SoapObject(null,methodName); request.addProperty("username", "xiaowen"); request.addProperty("password", "pwd"); SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request; HttpTransport ht=new HttpTransport(serviceURL); ht.debug=true; String Response = null; try { ht.call("urn:fengxing/Hello", envelope);//和.NET中SoapRpcMethod的Action一样 Response = envelope.getResponse().toString(); }catch (ConnectionNotFoundException e) { System.out.println("先打开服务器"); return; } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } System.out.println("dump>>" + ht.responseDump); si.setText(Response); f.append(si); f.removeCommand(connectCmd); } }; webserviceThread.start(); } } }
要保证创建的服务是打开的,最终运行结果如下:
3.详解
明天吧。
评论
import java.io.IOException;
import javax.microedition.midlet.*;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.*;
import org.ksoap2.*;
import org.ksoap2.serialization.*;
import org.ksoap2.transport.*;
import org.xmlpull.v1.XmlPullParserException;
public class test5 extends MIDlet implements CommandListener{
private Display dis;
private Command connectCmd=new Command("l锟斤拷",Command.OK,1);
private Command exitCmd=new Command("锟剿筹拷",Command.EXIT,1);
private Form f;
private StringItem si=new StringItem("","");
public test5() {
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// TODO Auto-generated method stub
dis=Display.getDisplay(this);
f=new Form("锟斤拷锟斤拷Web Service");
f.append("要锟斤拷示锟斤拷锟斤拷锟捷o拷"+"\n");
f.addCommand(connectCmd);
f.addCommand(exitCmd);
f.setCommandListener(this);
dis.setCurrent(f);
}
public void commandAction(Command c, Displayable s) {
// TODO Auto-generated method stub
if (c == exitCmd)
{
try {
destroyApp(false);
notifyDestroyed();
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(c==connectCmd)
{
//锟斤拷锟斤拷锟节诧拷Thread锟斤拷锟斤拷锟斤拷ksoap2锟斤拷锟斤拷远锟教凤拷锟斤拷
Thread webserviceThread=new Thread()
{
public void run()
{
String methodName="getMobileCodeInfo";
String as="15053189130";
String serviceURL="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
SoapObject request=new SoapObject(serviceURL,methodName);
request.addProperty("mobileCode", as);
request.addProperty("userID","");
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut=request;
//(new MarshalBase64()).register(envelope);
HttpTransport ht=new HttpTransport(serviceURL);
ht.debug=true;
String Response = null;
try {
ht.call("http://WebXml.com.cn/getMobileCodeInfo", envelope);//锟斤拷.NET锟斤拷SoapRpcMethod锟斤拷Action一锟斤拷
// ht.call(null, envelope);
Response = envelope.getResponse().toString();
}catch (ConnectionNotFoundException e) {
System.out.println("锟饺打开凤拷锟斤拷锟斤拷");
return;
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
System.out.println("dump>>" + ht.responseDump);
System.out.println(Response);
si.setText(Response);
f.append(si);
f.removeCommand(connectCmd);
}
};
webserviceThread.start();
}
}
}
我仿照你的去调用一个现有的web服务,为什么不行呢,我在j2se项目里可以调用这个服务,但是在j2me里面,调用后 总是返回说手机号码错误,请帮忙下

和你命名的urn:fengxing有什么区别,还有为什么我运行的时候会报异常,说先打开服务器,要打开那个服务器呢?
发表评论
-
IIS发布asp.net网站
2010-09-08 12:49 2006由于asp.net的版本不正确,或者vs.net先于iis之前 ... -
SQL数据库数据类型详解
2010-08-17 08:04 919SQL数据库数据类型详解 数据类型 ... -
风行项目开发组----开始前的总结
2010-07-23 21:24 964开始前的总结 ... -
.NET Framework 对 SOAP 格式的支持
2010-07-23 19:57 2618为 ASP.NET 创建 Web 服务的开发人员可以通过向各个 ... -
控制SOAP消息编码格式(SOAP Encoding Styles)
2010-07-23 19:43 4518SOAP编码格式是Web services ... -
J2ME音频播放
2010-07-22 16:28 1245J2ME音频播放 今天上午做了一个播放音乐 ... -
J2ME无线联网技术
2010-07-22 16:07 1001J2ME无线联网技术 首先看一下 ... -
QQ后台运行,s40全机型支持!
2010-07-20 23:32 3928S40手机后台运行QQ是几代人的梦想,现在S40V5过后的手机 ... -
风行项目开发组----我的初步体验
2010-07-20 22:44 861我的初步体验 ... -
J2me开发PNG文件格式
2010-07-19 16:41 1383前几天学生面试时,面试官问到了PNG文件格式!转载一篇文章供 ... -
使Nokia手机S40支持后台运行
2010-07-19 11:27 3972下文依诺基亚5130为例,建议先看完文章末尾的【解惑】再阅读。 ... -
Nokia S40 sdk 各版本信息
2010-07-19 10:12 2362Nokia S40 sdk 各版本信息 Seri ...
相关推荐
9. **示例应用**:压缩包中的源码可能是作者开发的一个示例应用,展示了如何使用 kSOAP2 调用 Web Services。通过分析这些代码,初学者可以快速入门,了解实际开发流程。 总的来说,这个资源对于想要在 J2ME 平台上...
在J2ME开发中,开发者通常会使用集成开发环境(IDE),如NetBeans、Eclipse或JBuilder,这些工具提供了代码编辑、调试和打包应用的功能。编写完代码后,需要通过模拟器或实际设备进行测试。 "J2ME开发.pdf"可能包含...
Java 2 Micro Edition (J2ME) 是一种用于开发...总的来说,J2ME 连接 Web Service 主要涉及到 SOAP 协议的理解、kSOAP2 库的使用以及 J2ME 的网络编程。掌握这些知识,你就能创建出能够利用远程服务功能的 J2ME 应用。
在本文中,我们将深入探讨如何让J2ME应用程序访问由C#编写的Web服务,同时解决中文字符传输的问题。J2ME(Java 2 Micro Edition)是一种轻量级的Java平台,广泛应用于移动设备和嵌入式系统。C#则是微软开发的一种...
在本文中,我们将探讨如何使用J2ME(Java 2 Micro Edition)访问由C#编写的Web服务,并解决在传输过程中可能出现的中文乱码问题。首先,我们需要了解J2ME和.NET平台之间的编码差异。 J2ME是Java平台的一个轻量级...
一个基本的Web服务调用示例如下,展示如何使用kSOAP传递String类型的数据: 首先,在服务器端创建一个简单的Web服务,如Java的Servlet或ASP.NET Web服务。以下是一个简单的Java示例: ```java public class ...
总的来说,"axis+ksoap2开发webservice配置指南"是一个关于在Java环境下使用Axis创建Web服务,并使用ksoap2在J2ME平台上进行调用的实践教程。这个过程涉及到了Web服务的生命周期管理、SOAP通信机制以及J2ME平台上的...
**解析用于J2ME开发平台的Web服务API详解** Java 2 平台袖珍版 (J2ME) 是一种轻量级的Java版本,专为资源受限的移动设备和嵌入式系统设计。为了在这些设备上实现Web服务功能,Java Community Process (JCP) 定义了...
j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发
J2ME无线通信技术应用开发,手机编程.主要介绍了基于java的手机软件开发。
总的来说,kSOAP2-j2ME是J2ME开发中与Web服务交互的重要工具。理解和掌握kSOAP2的使用方法和原理,对于提升J2ME应用的功能性和可扩展性有着重要作用。通过深入研究源代码,开发者可以更好地定制和优化其在特定项目中...
**J2ME开发工具的使用** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门用于嵌入式设备和移动设备的开发,如手机、智能家电等。在J2ME开发中,选择合适的开发工具至关重要,因为它们能够帮助开发者高效地...
对于想要学习如何使用 J2ME 开发 RPG 游戏的初学者来说,以下是一些关键知识点: 1. **J2ME 架构**:理解 J2ME 的架构至关重要,它包括配置(Configurations)和Profile(Profiles)。配置定义了运行环境的基本硬件...
【基于Web Service的3G手机应用开发常见问题】 在基于Web Service的3G手机应用开发过程中,开发者常常遇到一系列技术和概念性的问题。Web Service是一种基于开放标准(如XML、SOAP和WSDL)的通信协议,它允许不同...
J2ME(Java 2 Micro Edition)是Java技术的一个重要组成部分,它主要针对的是嵌入式设备和消费类电子产品的应用开发,比如早期的智能手机、移动电话、PDA、数字电视等。J2ME由Sun Microsystems(后被Oracle收购)...
在Android平台上调用Web Service,通常需要借助第三方库来实现,这里主要介绍的是使用ksoap2-android库。ksoap2是一个轻量级的SOAP客户端开发包,尤其适用于资源有限的Java环境,比如Applets或者J2ME应用程序。而在...
开发者通常使用Sun Microsystems的KJava模拟器或NetBeans IDE进行j2ME应用开发。这些工具提供了代码编辑、调试和设备模拟等功能,帮助开发者在无实际设备的情况下测试应用。 三、MIDP API MIDP API是j2ME游戏开发...