J2ME与WebService-KSOAP的罗曼史
来源:百度文库 编辑:神马文学网 时间:2024/04/28 18:45:09
版权声明:能够任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:
http://www.matrix.org.cn/resource/article/43/43662_J2ME_KSOAP.Html
关键词: j2me soap webservice
1、服务端
这次要发布的web service很简单。他的功能是把从客户端传入的字符串中的小写字母转变成大写字母,再返回给客户端。
Soap 服务器采用apache的AXIS(能够从http://ws.apache.org/axis/下载),应用服务器能够选用各种servlet 容器,我这里采用的是weblogic。
1.1 实现类的源代码:
// StringPRocessor.java
package com.jagie.j2me.ws;
public class StringProcessor
{
public StringProcessor()
{
}
public String process(String name)
{
return name.toUpperCase();
}
}
1.2 发布步骤
1.准备一个目录作为web application的发布目录,我这里的这个目录叫jagiews,这个目录的全路径中最好不要有空格和中文。我的发布目录结构如下:
2.编译StringProcessor.java,把生成的StringProcessor.class置于: /jagiews/WEB-INF/classes/com/jagie/j2me/ws目录下。
3.在jagiews/WEB-INF/lib 文档夹中置入以下axis服务器需要的jar文档 axis.jar,axis-ant.jar,commons-discovery.jar,commons-logging.jar,jaxrpc.jar,log4j-1.2.8.jar,saaj.jar ,wsdl4j.jar。这些文档能够在http://ws.apache.org/axis/下载。
4.在jagiews/WEB-INF目录下增加2个发布描述文档:
server-config.wsdd,web.xml。
#server-config.wsdd
"http://xml.apache.org/axis/wsdd/"
xmlns:java=
"http://xml.apache.org/axis/wsdd/providers/java">
"adminPassWord" value="admin"/>
"attachments.Directory"
value="C:/Program Files
/Apache Tomcat 4.0/webapps
/axis/WEB-INF/attachments"/>
"attachments.implementation"
value="org.apache.axis.
attachments.AttachmentsImpl"/>
"sendXsiTypes"
value="true"/>
"sendMultiRefs"
value="true"/>
"sendXMLDeclaration"
value="true"/>
"axis.sendMinimizedElements"
value="true"/>
"java:org.apache.axis.handlers.JWSHandler">
name="scope"
value="session"/>
"java:org.apache.axis.handlers.JWSHandler">
name="scope"
value="request"/>
name="extension"
value=".jwr"/>
"LocalResponder"
type="java:org.apache.axis.
transport.local.LocalResponder"/>
type="java:org.apache.axis.
handlers.http.URLMapper"/>
type="java:org.apache.axis.
providers.java.RPCProvider"/>
type="java:org.apache.axis.
handlers.SimpleAuthenticationHandler"/>
type="java:org.apache.axis.
providers.java.MsgProvider"/>
provider="java:MSG">
value="AdminService"/>
value="false"/>
value="org.apache.axis.utils.Admin"/>
http://xml.apache.org/axis/wsdd/
provider="java:RPC">
value="getVersion"/>
value="org.apache.axis.Version"/>
provider="java:RPC">
value="process"/>
value="com.jagie.j2me.
ws.StringProcessor"/>
"java:org.apache.axis.handlers.
http.HTTPAuthHandler"/>
# web.xml
encoding="ISO-8859-1"?>
PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com
/j2ee/dtds/web-app_2.2.dtd">
Apache-Axis
AxisServlet
Apache-Axis
Servlet
org.apache.axis.transport.http.AxisServlet
AdminServlet
Axis Admin Servlet
org.apache.axis.transport.http.AdminServlet
100
SOAPMonitorService
SOAPMonitorService
org.apache.axis.monitor.SOAPMonitorService
SOAPMonitorPort
5001
100
AxisServlet
/servlet/AxisServlet
AxisServlet
*.jws
AxisServlet
/services/*
SOAPMonitorService
/SOAPMonitor
wsdl
text/xml
xsd
text/xml
5.开启您的application server,把目录jagiews发布为一个名叫jagiews的web application。
6.测试:打开浏览器,输入网址(这里使用的是weblogic,其他的服务器请酌情修改): http://localhost:7001/jagiews/services/StringProcess?method=process&name=QQqq,假如浏览器能在返回的xml文档中显示字符串"QQQQ",恭喜您,您的web service发布成功了。假如发布不成功,请按以上发布步骤检查一下。
2、客户端
客户端自然是用MIDlet了,但是用什么方式来访问web service呢?其实有3种访问方式
直接用HttpConnection访问 http://localhost:7001/jagiews/services/StringProcess?method=process&name=qqqq,得到xml的返回数据,然后用kxml(http://kxml.enhydra.org/)解析,得到返回值。
假如您的手机支持MIDP2.0的话,能够考虑使用JSR172。
用ksoap api。
这里讲述第三种方式。使用之前,您需要从 http://ksoap.enhydra.org/software/downloads/index.html下载稳定的ksoap包,置于您的classpath中。
2.1 客户端源代码
2.1.1 WSClientMIDlet.java
package com.jagie.j2me.ws;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
*Title:
*Description:
*Copyright: Copyright (c)
2004
*Company:
* @author not attributable
* @version 1.0
*/
public class WSClientMIDlet
extends MIDlet
{
static WSClientMIDlet instance;
public WSClientMIDlet()
{
instance = this;
}
public void startApp()
{
Display display=
Display.getDisplay(this);
DisplayForm displayable =
new DisplayForm();
display.setCurrent(displayable);
}
public void pauseApp()
{
}
public void destroyApp
(boolean unconditional)
{
}
public static void quitApp()
{
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
2.1.2 DisplayForm.java
package com.jagie.j2me.ws;
import javax.microedition.lcdui.*;
/**
*Title:
*Description:
*Copyright: Copyright (c)
2004
*Company:
* @author not attributable
* @version 1.0
*/
public class DisplayForm
extends Form
implements CommandListener,
Runnable
{
private TextField textField1;
private Thread t;
public DisplayForm()
{
super("字符转换webservice测试");
try
{
jbInit();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void jbInit()
throws Exception
{
// Set up this Displayable
to listen to command events
textField1 = new TextField
("", "", 15, TextField.ANY);
this.setCommandListener(this);
textField1.setLabel
("待处理的字符串是:");
textField1.setConstraints
(TextField.ANY);
textField1.setInitialInputMode
("Tester");
setCommandListener(this);
// add the Exit command
addCommand(new Command
("Exit", Command.EXIT, 1));
addCommand(new Command
("Process", Command.OK, 1));
this.append(textField1);
}
public void commandAction
(Command command,
Displayable displayable)
{
if (command.getCommandType
() == Command.EXIT)
{
WSClientMIDlet.quitApp();
}
else if (command.getCommandType()
== Command.OK)
{
t = new Thread(this);
t.start();
}
}
public void run()
{
String s1 =
textField1.getString();
String s2 =
new StringProcessorStub().process(s1);
StringItem resultItem =
new StringItem("处理后的字符串是:", s2);
this.append(resultItem);
}
}
2.1.3 StringProcessorStub.java
package com.jagie.j2me.ws;
import org.ksoap.*;
import org.ksoap.transport.HttpTransport;
/**
*Title:
*Description:
*Copyright: Copyright (c) 2004
*Company:
* @author not attributable
* @version 1.0
*/
public class StringProcessorStub
{
public StringProcessorStub()
{
}
public String process(String name)
{
String result = null;
try
{
SoapObject rpc =
new SoapObject
("http://localhost:
7001/jagiews/services/StringProcess",
"process");
rpc.addProperty("name", name);
HttpTransport ht =
new HttpTransport
("http://localhost:7001/
jagiews/services/StringProcess",
"");
result = (String) ht.call(rpc);
}
catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
总结
有了ksoap,手机上调用web service就很容易了。但是要注意的是,使用网络连接这种费时操作的时候,一定要单独开线程进行,不要直接写在commandAction()方法里,否则出现画面被锁住的情况。进入讨论组讨论。
J2ME与WebService-KSOAP的罗曼史
荣毅仁与夫人杨鉴清的传奇罗曼史
[收藏]REST WebService与SOAP WebService的比较
几个J2ME读书软件的比较与猜想
J2ME平台体系结构 (J2ME) - [Matrix - 与 Java 共舞]
如何利用Google的WebService搜索网络资源|Google,WebService...
Webservice 的设计和模式
一部自然罗曼史的多重解读
中低音长笛—传奇的罗曼史
.一部自然罗曼史的多重解读
中低音长笛—传奇的罗曼史
一部自然罗曼史的多重解读
“你装饰了别人的梦”——张充和谈卞之琳与“卞、张罗曼史
谈J2ME的发展历史
BREW和J2ME的来源
[常见问题] J2ME手机屏幕的切换
一种基于J2ME的移动支付系统的设计与实现
利用J2ME与ASP建立数据库连接
j2me进度条与线程化模型
WebService开发较全面的文章----转载
WebService开发较全面的文章转载
调用WebService的几种方法
一种基于J2ME的移动支付系统的设计与实现 -- 电子竞赛交流区 -- EDN电子设计技术
中低音长笛—传奇的罗曼史(需下载)