WAP之家:为您提供最全最新的WAP技术,WAP动态及WAP站长资讯等。 WAP站长交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发J2ME与Web Service-KSOAP快速上手

J2ME与Web Service-KSOAP快速上手
作者:陈万飞  来源:SUN  发布时间:2005-8-10 12:07:04
<servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <!-- uncomment this if you want the admin servlet --> <!-- <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> --> <!-- currently the W3C havent settled on a media type for WSDL; http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft for now we go with the basic 'it's XML' response --> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> </web-app>

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种访问方式

  1. 直接用HttpConnection访问 http://localhost:7001/jagiews/services/StringProcess?method=process&name=qqqq,得到xml的返回数据,然后用kxml(http://kxml.enhydra.org/)解析,得到返回值。
  2. 如果你的手机支持MIDP2.0的话,可以考虑使用JSR172。
  3. 用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.*;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @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.*;


/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @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;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

  public class StringProcessorStub {
    public StringProcessorStub() {
  }

  public String process(String name) {
    String result = null;
    try {

      SoapOb

上一页  [1] [2] [3]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码