CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟




 
标题: J2ME与Web Service-KSOAP的罗曼史
libinfei8848
版主
Rank: 7Rank: 7Rank: 7


UID 227026
精华 17
积分 14992
帖子 3722
威望 6114
ZD币 10392 元
阅读权限 250
注册 2006-11-25
状态 离线
  楼主
发表于 2007-6-28 12:15  资料  个人空间  短消息  加为好友 
开发者在线

J2ME与Web Service-KSOAP的罗曼史


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/
  


  
  


  
  
  


  
   
   
  


  
   
  

# web.xml
  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
  


    AdminServlet
    /servlet/AdminServlet

  
-->
   
  
    wsdl
     text/xml
  
  
    xsd
    text/xml
  
5.开启你的application server,把目录jagiews发布为一个名叫jagiews的web application。
6.测试:打开浏览器,输入网址(这里使用的是weblogic,其他的服务器请酌情修改): http://localhost:7001/jagiews/se ... ocess&name=qqqq,如果浏览器能在返回的xml文档中显示字符串"QQQQ",恭喜你,你的web service发布成功了。如果发布不成功,请按以上发布步骤检查一下。
2、客户端
客户端自然是用MIDlet了,不过用什么方式来访问web service呢?其实有3种访问方式
直接用HttpConnection访问 http://localhost:7001/jagiews/se ... ocess&name=qqqq,得到xml的返回数据,然后用kxml(http://kxml.enhydra.org/)解析,得到返回值。
如果你的手机支持MIDP2.0的话,可以考虑使用JSR172。
用ksoap api。
这里讲述第三种方式。使用之前,你需要从 http://ksoap.enhydra.org/software/downloads/index.html下载稳定的ksoap包,置于你的classpath中。




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
libinfei8848
版主
Rank: 7Rank: 7Rank: 7


UID 227026
精华 17
积分 14992
帖子 3722
威望 6114
ZD币 10392 元
阅读权限 250
注册 2006-11-25
状态 离线
  沙发
发表于 2007-6-28 12:15  资料  个人空间  短消息  加为好友 
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);




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
libinfei8848
版主
Rank: 7Rank: 7Rank: 7


UID 227026
精华 17
积分 14992
帖子 3722
威望 6114
ZD币 10392 元
阅读权限 250
注册 2006-11-25
状态 离线
  板凳
发表于 2007-6-28 12:15  资料  个人空间  短消息  加为好友 
// 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()方法里,否则出现画面被锁住的情况。




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 


操作系统 数据库 中间件 应用软件 管理软件 Web应用 AJAX Linux Web2.0 RIA 开源 SOA OSS SEO Vista SharePoint Windows Server Windows 2003 Windows 2008 IIS 动态语言 Windows IE7 Oracle Oracle11g office SQLServer Firefox Solaris Ubuntut 微软Google 资讯 博客 技术看板 英雄 图片 QQ 腾讯QQ 珊瑚虫QQ 金山上市 站点图 AJAX BI BPM CRM DNS Android SQL Server 2008 EAI Enterprise 2.0 ETL ERP Flash GPL3 Java j2me JavaEE LAMP mashups NTFS ODBC ODF OOP Outsourcing RIA RSS SOA UML Web2.0 Workflow XAML XML ZFS 备份 并发控制 并行计算 动态语言 多核计算 虚拟技术 CRM 数据仓库 虚拟化 Apollo Apache BizTalk DB2 Eclipse Excel Expression Flex3 Fedora7 Forefront FreeBSD Hibernate IE 7 IIS JavaFX JBoss Linspire live Maxthon Mobile 6.0 Mozilla MySQL office OneCare OpenOffice Solaris Oracle Oracle 11g SQL Server Opera Outlook Photoshop PostgreSQL PowerBuilder PowerShell Rational RHEL ROR Salesforce Server Core Solaris SugarCRM TFS Tomcat Ubuntut Vista VMWare VPC VSTS WCF WebLogic WPF Xandros Xen KDE GNOME 火狐浏览器 Gmail 邮箱 Exchange server AJAX BI BPM EAI ETL ERP CRM DNS Flash Java JavaEE j2me LAMP NTFS ODBC ODF OOP Outsourcing RIA RSS SOA SEO Web2.0 mash up Workflow XAML XML GPL 3协议 ZFS 备份 并行计算 多核 数据仓库 搜索 并发控制 并行计算 动态语言 虚拟化 虚拟技术 Enterprise Web2.0 软件技术资讯 操作系统 Windows Server 2008 Windows Server 2008专题 系统安全 IIS 虚拟机 Windows Linux 嵌入式操作系统 Vista专区 数据库/数据仓库 MySQL & PostgreSQL & Sybase Oracle 10g / 9i / 11g SQL SERVER DB2 中间件/SOA QQ2009下载 QQ QQ群 QQ炫铃 QQ视频 QQ好友 木马病毒 QQ2007 江民 瑞星 金山毒霸 协作办公 ODF/OOXML SharePoint office web应用 浏览器 SaaS/S+S Microsoft技术 操作系统软件数据库软件中间件软件

软件频道2008年3月精华 软件频道2008年2月精华 软件频道2008年1月精华 软件频道12月精华 软件频道11月精华 软件频道10月精华 软件频道9月精华 软件频道8月精华 软件频道7月精华 软件频道6月精华 软件频道5月精华 软件频道4月精华 软件频道3月精华 软件频道2月精华 软件频道1月精华


当前时区 GMT+8, 现在时间是 2008-9-6 15:26

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 4.182414 second(s), 7 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版