⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callwsmidlet.java

📁 J2ME+WebService,采用KSoap框架进行操作。
💻 JAVA
字号:
/**
//文档生成日期:2005.8.14
//
//(1)概述:
//类名称:CallWSMIDlet
//类说明:
// 介绍这个应用的Form.
* 
//所在子系统:Web Service kSOAP Caller
//
//系统总描述:
	    
http://www.cnblogs.com/zhengyun_ustc/archive/2005/08/27/ksoapmidpwebservice1.html
讲的是
第一小步,Web Service传递String 
http://www.cnblogs.com/zhengyun_ustc/archive/2005/08/27/ksoapmidpwebservice2.html
则给出了
第二小步,Web Service传递较为复杂的类 
下面我们讲述如何在MIDP设备和Web Service之间传递较为复杂的类,比如这个类中不但有String类型成员变量,还有Vector之类的复杂类型。 
从kSoap的FAQ上看,他们推荐使用KvmSerializable以及 ClassMap传递自定义类,但是我一直没有试验成功。 
我还是按照能试验出来的办法讲述一下步骤吧: 
大致思路就是,在服务器端将类实例按照一定规格(一个一个的成员变量写)序列化为byte[],将这个byte[]数组返回给kSOAP。kSOAP收到之后,再反序列化,将byte[]一段一段地读入类实例。


//(2)历史记录:
//创建人: 郑昀(2005.8.14)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs:    http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc

//(3)版权声明:
//遵照GPL协议的大意开放源代码,您可以自由传播和修改,在遵照GPL协议的约束条件的前提下。

////////////////////////////////////////////////////////////////////*/

package com.ultrapower.view;

import java.io.IOException;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;

import org.ksoap.ClassMap;
import org.ksoap.SoapObject;
import org.ksoap.transport.HttpTransport;
import com.ultrapower.model.*;
import com.ultrapower.tools.MarshalBase64;

public class CallWSMIDlet extends MIDlet implements CommandListener {
    
    private Command exitCommand; // The exit command
	private Command connectCommand; 
    private Display display;    // The display for this MIDlet
	private Form mainForm;
    
    public CallWSMIDlet() {
        display = Display.getDisplay(this);
		exitCommand = new Command("退出应用", Command.SCREEN, 3); 
        connectCommand = new Command("链接Web Service", Command.SCREEN, 2); 
        mainForm = new Form ("kSOAP调用AlertService!"); 
    }
    
    public void startApp() {
		
		mainForm.addCommand(exitCommand); 
        mainForm.addCommand(connectCommand); 


        mainForm.setCommandListener(this); 
        display.setCurrent(mainForm); 
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
    
    public void commandAction(Command c, Displayable s) {
        if (c == exitCommand) {
            destroyApp(false);
            notifyDestroyed();
        }
		
		if (c == connectCommand) 
        { 
			//匿名内部Thread,访问远程服务。 
            Thread fetchThread=new Thread()
            { 
				public void run(){  
				System.out.println("Try HttpTransport.....");
				
				try {
		            /*
		             *  Change to run locally on developer machine
		             */
					String serviceNamespace = "http://10.168.0.223:8080/DominoFacade/services/j2meview";
					String methodName = "login";
					String serviceUrl = "http://10.168.0.223:8080/DominoFacade/services/j2meview?wsdl";

					System.out.println("Try add ClassMap.....");
		            ClassMap classMap = new ClassMap();
						(new MarshalBase64()).register(classMap);

					System.out.println("Try new SoapObject.....");
		            SoapObject request = new SoapObject(serviceNamespace, methodName );
					
					
					/*
					 * 添加 web service的输入参数
					 */
					request.addProperty("username", "user");
					request.addProperty("password", "ptw");

					System.out.println("Try new HttpTransport.....");
		            HttpTransport tx = new HttpTransport(serviceUrl, methodName);
		            tx.setClassMap( classMap );
		            tx.debug = true;
		            
					System.out.println("Try call AlertService.....");
					
					Object Response = tx.call(request);
					System.out.println("End call AlertService.....");
		            System.out.println( tx.responseDump );
					
					byte[] by = (byte[])Response;
					System.out.println("End convert to byte[].....");
					wsLogin wc = wsLogin.deserialize(by);
					System.out.println("Convert wsLogin succ:" +
							wc.getReturnCode());
					
					System.out.println("得到的StringVector大小为" + 
							wc.wsvAllMailSubject.size());
					
					for (int i=0; i<wc.wsvAllMailSubject.size(); i++) 
					{
						System.out.println("第" + i +"封主题:" + 
								wc.wsvAllMailSubject.getStringAt(i));
					} 
					
					System.out.println("End convert.");
		            
		        } catch(IOException e) {
		            e.printStackTrace();
		        }
				
				}
            };
            fetchThread.start(); 
			
            display.setCurrent(mainForm); 
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -