继续我们上个例子 , 完成J2ME端代码的编写.
我们的那个MIDlet继承了Runnable接口, 所以可以在程序中使用另外一个线程来访问WebService. (这点很关键, 有些手机在实现某些操作时就必须用多线程的方式来执行, 至少我的索爱是这样. 例如调用WMA来收发短信, 开启手机的摄像头等等...)
现在我们就来编写用来访问WebService的接口和实现类.
package com.joey.j2me.service;
public interface UserService extends java.rmi.Remote {
public java.lang.String request(java.lang.String username,java.lang.String password)
throws java.rmi.RemoteException;
}
一个非常简单的接口, 下面我们来创建它的实现类.
package com.joey.j2me.service.impl;
import javax.microedition.xml.rpc.ComplexType;
import javax.microedition.xml.rpc.Element;
import javax.microedition.xml.rpc.Operation;
import javax.microedition.xml.rpc.Type;
import javax.xml.namespace.QName;
import javax.xml.rpc.JAXRPCException;
import com.joey.j2me.service.UserService;
public class UserServiceBean implements UserService, javax.xml.rpc.Stub {
protected static final QName _qname_UserName = new QName("", "username");
protected static final QName _qname_PassWord = new QName("", "password");
protected static final QName _qname_result = new QName("", "returnText");
protected static final QName _qname_request = new QName("http://cxf.joey.com/", "login");
protected static final QName _qname_requestResponse = new QName("http://cxf.joey.com/", "loginResponse");
protected static final QName _qname_wsdl_request = new QName("http://cxf.joey.com/", "login");
protected static final Element _login;
protected static final Element _loginResponse;
static {
Element username = new Element(_qname_UserName, Type.STRING, 1, 1, true);
Element password = new Element(_qname_PassWord, Type.STRING, 1, 1, true);
ComplexType _complexType_request;
_complexType_request = new ComplexType();
_complexType_request.elements = new Element[2];
_complexType_request.elements[0] = username;
_complexType_request.elements[1] = password;
_login = new Element(_qname_request, _complexType_request);
Element _ReturnText = new Element(_qname_result, Type.STRING, 1, 1, true);
ComplexType _complexType_requestResponse;
_complexType_requestResponse = new ComplexType();
_complexType_requestResponse.elements = new Element[1];
_complexType_requestResponse.elements[0] = _ReturnText;
_loginResponse = new Element(_qname_requestResponse, _complexType_requestResponse);
}
private String[] _propertyNames;
private Object[] _propertyValues;
public UserServiceBean () {
_propertyNames = new String[] { ENDPOINT_ADDRESS_PROPERTY };
_propertyValues = new Object[] { "http://localhost:8080/UserManager" };
}
public void _setProperty(String name, Object value) {
System.out.println("_setProperty");
int size = _propertyNames.length;
for (int i = 0; i < size; ++i) {
if (_propertyNames[i].equals(name)) {
_propertyValues[i] = value;
return;
}
}
String[] newPropNames = new String[size + 1];
System.arraycopy(_propertyNames, 0, newPropNames, 0, size);
_propertyNames = newPropNames;
Object[] newPropValues = new Object[size + 1];
System.arraycopy(_propertyValues, 0, newPropValues, 0, size);
_propertyValues = newPropValues;
_propertyNames[size] = name;
_propertyValues[size] = value;
}
public Object _getProperty(String name) {
System.out.println("_getProperty");
for (int i = 0; i < _propertyNames.length; ++i) {
if (_propertyNames[i].equals(name)) {
return _propertyValues[i];
}
}
if (ENDPOINT_ADDRESS_PROPERTY.equals(name) || USERNAME_PROPERTY.equals(name) ||
PASSWORD_PROPERTY.equals(name)) {
return null;
}
if (SESSION_MAINTAIN_PROPERTY.equals(name)) {
return new java.lang.Boolean(false);
}
throw new JAXRPCException("Stub does not recognize property: " + name);
}
protected void _prepOperation(Operation op) {
for (int i = 0; i < _propertyNames.length; ++i) {
op.setProperty(_propertyNames[i], _propertyValues[i].toString());
}
}
public java.lang.String login(java.lang.String username,java.lang.String password)
throws java.rmi.RemoteException {
Object[] inputObject = new Object[2];
inputObject[0] = username;
inputObject[1] = password;
Operation op = Operation.newInstance(_qname_wsdl_request, _login, _loginResponse);
_prepOperation(op);
op.setProperty(Operation.SOAPACTION_URI_PROPERTY, "");
Object resultObj;
try {
resultObj = op.invoke(inputObject);
} catch (JAXRPCException e) {
Throwable cause = e.getLinkedCause();
if (cause instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)cause;
}
throw e;
}
java.lang.String result;
Object resultObj2 = ((Object[])resultObj)[0];
result = (java.lang.String)resultObj2;
return result;
}
}
最后只要在MIdlet中的run方法里调用这个login方法就可以了.
未完...
分享到:
相关推荐
本手册围绕“j2me手册-webservice_mobile_wtk”这一主题,深入探讨了J2ME在Web服务、API使用、蓝牙通信、移动媒体、图形处理、PDA应用以及无线消息传递等方面的知识点,旨在帮助开发者更好地理解和应用J2ME技术。...
这里我们使用C#语言,定义一个简单的Web服务类`Service1`,其中包含一个名为`Hello`的Web方法,该方法接收一个字符串参数并返回一个包含中文字符的字符串。为了处理中文字符,你需要在Web服务的`web.config`文件中...
最近在开发j2me,需要连接Webservice,可是在ksoap官网下载的包用不了,想到这个是开源包,应该有源代码,在不同的网站上找了很久,终于收集到了MIDP设备连接Webservice的源代码。经过我的使用,证明是可以用的。...
在J2ME中,我们通常使用HttpConnection或StreamConnection来处理网络通信。要实现断点续传,我们需要: 1. **保存文件信息**:客户端在开始下载前,需要检查本地是否存在目标文件以及其已下载的部分。如果存在,...
1. **创建WebService**:在.NET平台上,使用C#或VB.NET等语言创建WebService,定义服务接口和方法,这些方法能够处理来自移动设备的请求,并返回相应的响应数据。 2. **WebService部署**:将创建好的WebService部署...
本系统使用WebService技术将J2ME移动终端设备和NET企业级应用程序连接起来,实现了数据交换和业务流程的集成,为企业构建移动电子商务系统提供了一种快速、有效的解决方案。该系统的实现为企业提供了一种快速、灵活...
J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能电表、家庭自动化设备等。它提供了跨平台的开发环境,使得开发者可以编写一次代码,到处运行。J2ME由两大...
**J2ME API 2.0 - J2ME使用手册 - J2ME帮助文档** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用...
在J2ME中,我们通常使用Canvas类作为画布,绘制游戏的各个元素。Canvas继承自Displayable,允许我们自定义绘制函数,实现游戏画面的更新。例如,在飞机游戏中,我们需要绘制飞机、敌人、子弹以及背景等元素。 事件...
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
它的目标是使用这个脚本引擎便于开发一个更加灵活的 j2me 游戏。 这些框架和库都可以用于简化 J2ME 应用程序的开发过程,提高开发效率。但是,在选择框架时,需要根据项目的需求和特点进行选择,以确保项目的成功。
"j2me游戏.rar"很可能是包含了一系列使用J2ME技术开发的游戏资源包。在本文中,我们将深入探讨J2ME游戏开发的关键知识点。 一、J2ME概述 J2ME由Java ME规范定义,它提供了多种配置和框架,如MIDP(Mobile ...
总的来说,这个J2ME中文教程解密版是一份全面且实用的学习资源,无论你是Java初学者还是希望进入移动开发领域的专业人士,都能从中受益。通过学习和实践,你将能够熟练地运用J2ME技术开发出富有创意的移动应用。
《J2ME游戏开发(第一版)》是针对Java Micro Edition(J2ME)平台进行游戏编程的专业指导书籍。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。这本书的焦点在于教导开发者...
在J2ME(Java 2 Micro Edition)平台上开发游戏时,地图的设计与绘制是至关重要的一个环节。J2ME作为一种轻量级的Java平台,广泛应用于移动设备,如早期的智能手机和平板电脑,用于实现各种应用程序,特别是游戏。本...
1. **环境配置**:如何安装Myeclipse以及激活J2ME插件,设置J2ME SDK路径,创建新的J2ME项目。 2. **基础语法**:介绍Java语言的基础知识,包括变量、控制结构、类和对象等。 3. **MIDP API**:讲解如何使用MIDP API...
总的来说,J2ME点阵字库是移动和嵌入式开发中的一个重要组成部分,它涉及字库的加载、字符映射、渲染、优化等多个技术环节。理解和掌握这些知识点对于创建高效且用户体验良好的J2ME应用,特别是游戏,至关重要。
总的来说,“j2me手机浏览器”是J2ME平台上的一个关键应用,它在功能手机时代为移动用户提供了接入互联网的能力。随着智能手机和更强大的移动操作系统的发展,J2ME浏览器逐渐被取代,但它们在移动互联网发展的早期...
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
【安卓AIDE开发J2ME】是一个教程主题,它涵盖了使用AIDE集成开发环境(IDE)来开发Java Micro Edition (J2ME)应用程序的过程。AIDE是一款强大的Android开发工具,通常用于编写原生的Android应用,但在此场景下,它被...