继续我们上个例子 , 完成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调用.net WebService实例
包括了webservice,api,蓝牙,mobile media,mobile graphics,PDA,wireless messag,wtk,nokia ui等方面
最近在开发j2me,需要连接Webservice,可是在ksoap官网下载的包用不了,想到这个是开源包,应该有源代码,在不同的网站上找了很久,终于收集到了MIDP设备连接Webservice的源代码。经过我的使用,证明是可以用的。...
J2ME实现的断点续传,解决下载文件问题
J2ME API J2ME API J2ME API J2ME API J2ME API
J2ME开发 J2ME开发 J2ME开发 J2ME开发
基于WebService技术的J2ME和_NET互连.pdf
在eclipse中怎样使用j2me 在eclipse中怎样使用j2me 在eclipse中怎样使用j2me
j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1j2me试题1
J2ME培训教程,以前学JJ2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程J2ME培训教程2ME发的一个PPT,内容还可以,需要的朋友不要客气J2ME...
j2me入门教程j2me入门教程j2me入门教程j2me入门教程j2me入门教程
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
J2ME游戏开发 J2ME游戏开发 J2ME游戏开发
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
j2me框架_用J2ME的通用联网框架开发联网.pdf
j2me手机浏览器 j2me手机浏览器 j2me手机浏览器
J2ME游戏开发(第一版) J2ME游戏开发(第一版) J2ME游戏开发(第一版)
j2me点阵字库,适合j2me游戏的一个很小的字库
j2ME初学Demo j2ME demo j2me demo j2ME实例
J2ME中文开发教程(附带Myeclipse用J2ME插件),想要学习J2ME的朋友们千万不要错过啊。很清晰的PDF版本。