截至2005年2月6日,还没有出现支持jsr172的手机!经过大量的试验证明,目前最方便、快速的方式就是通过jsr172规范来实现对web services的访问,可以访问其它任何工具创建的web services!
目前,有两种方式访问web服务:1、通过jsr172 api。2、通过ksoap api。由于使用ksoap方式访问web服务的例子很多,尤其是访问使用java开发的web服务,但是使用ksoap方式访问用.net 开发的web服务,目前的例子很少,而且我花了几天时间没有调通一个,原因未明,故只讨论使用jsr172的方式。ksoap的方式另外开贴讨论。
注:要获知ksoap的详细资料请上:http://ksoap.objectweb.org/
要获知jsr172的资料请上:http://java.sun.com/products/wsa/
本示例开发环境:j2me wireless toolkit 2.2,jb9,do.net2003
需要的jar包:kxml-min.zip ,ksoap-midp.zip
步骤1:使用.net 开发的web 服务为:(确保调试通过)
[webmethod(description="login"]
//[system.web.services.protocols.soaprpcmethod]
public bool login(string sloginuserid,string sloginpwd)
{
string spwd="";
guserid = "";
if((sloginuserid == null) (sloginuserid.trim() == ""))
{
return false;
}
try
{
myconnection = new sqlconnection(constr);
string strsql = "select * from tuser where userid=@userid";
sqlcommand mycommand = new sqlcommand(strsql, myconnection);
sqlparameter paramuserid = new sqlparameter("@userid", sqldbtype.nvarchar, 12);
paramuserid.value = sloginuserid;
mycommand.parameters.add(paramuserid);
myconnection.open();
datareader = mycommand.executereader(commandbehavior.closeconnection);
while(datareader!=null && datareader.read())
{
spwd = datareader.getstring(2);
}
if( !spwd.equals(sloginpwd))
{
return false;
}
else
{
return true;
}
}
catch (exception ex)
{
error.log(ex.message.tostring());
return false;
}
finally
{
if(myconnection!=null)
myconnection.close();
if(datareader!=null)
datareader.close();
}
}
步骤2:在j2me中引入web服务。
在开始菜单中找到j2me wireless toolkit2.2中的utilities一项,点击stub generator按钮,在弹出的界面上输入wsdl,例如:http://192.168.10.101/service/myservices.asmx?wsdl,注意一定要加wsdl.在outpath中填入你想将生成的访问web服务的代码存放的目录;output package中填入你的工程src的目录,例如helloworld.ws是指src目录下的子目录helloworld下的目录ws--如果编译不通过,可以手工改。设定cldc的版本1.0/1.1,建议用1.1的,支持浮点运算呢。点击ok按钮,就可以产生访问web服务的代码了。将代码copy或者本身就产生在自己的工程目录中,刷新jb9的开发环境,新产生的代码即可出现。保证编译通过。
步骤3:使用web服务。
修改你的midlet:
例如:
/** service connector jax-rpc stub for connecting to server. */
private salesservicesoap_stub service;//这里写你自己的服务,产生的java文件中有一个xxsoap_stub.java文件,其中xx就是你的web服务名。
......
/** initialize midlet data, service, parsers */
public void startapp() {
service = new salesservicesoap_stub();//new一个实例
service._setproperty(salesservicesoap_stub.session_maintain_property,
new boolean(true));
......
注意下面这段代码就使用web服务的login方法了!
public void commandaction(command c, item item) {
if (c == cmd_login) {
sloginuserid = txtuserid.getstring();
sloginpwd = txtuserpwd.getstring();
if (sloginuserid.length() == 0) {
error("input userid please!");
return;
}
if (sloginpwd.length() == 0) {
error("input password please!");
return;
}
//call .net xml webservices
thread t = new thread() { //一定要新开线程,避免锁定屏幕
public void run() {
try {
boolean loginresult = service.login(sloginuserid, sloginpwd); //method:login()
if (loginresult == false) {
error("you have no permission login.");
}
else {
display.setcurrent(mainform);
}
}
catch (exception e) {
if (!exit_string.equals(e.getmessage())) {
e.printstacktrace();
error("connection problems.\n"
+ "check your inte.net/proxy settings.");
}
}
}
};
t.start();
}
ok,到此,你就搞定了!
j2me call the do.net web services!
简单吧!
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器