服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

j2me与web service-ksoap快速上手


  摘要
  
  本文用一个简明的例子,阐述了如何在手机上用ksoap api来访问本地服务器上的web service。并且给出了详细的操作步骤和全部的server,client源代码。
  
  1. 服务端
  
  这次要发布的web service非常简单。它的功能是把从客户端传入的字符串中的小写字母转变成大写字母,再返回给客户端。soap 服务器采用apache的axis(可以从http://ws.apache.org/axis/下载),应用服务器可以选用各种servlet 容器,我这里采用的是weblogic。
  
  1.1 实现类的源代码
  
  // stringprocessor.java
  package com.jagie.j2me.ws;
  
  public class stringprocessor {
  public stringprocessor() {
  }
  
  public string process(string name){
  return name.touppercase();
  }
  
  }
  
  1.2 发布步骤
  
  1.准备一个目录作为web application的发布目录,我这里的这个目录叫jagiews,这个目录的全路径中最好不要有空格和中文。我的发布目录结构如下:
  
 j2me与web service-ksoap快速上手(图一)

  2.编译stringprocessor.java,把生成的stringprocessor.class置于: /jagiews/web-inf/classes/com/jagie/j2me/ws目录下。
  
  3.在jagiews/web-inf/lib 文件夹中置入以下axis服务器需要的jar文件
  axis.jar,axis-ant.jar,commons-discovery.jar,commons-logging.jar,jaxrpc.jar,log4j-1.2.8.jar,saaj.jar ,wsdl4j.jar。这些文件可以在http://ws.apache.org/axis/下载,如图所示:
  
 j2me与web service-ksoap快速上手(图二)

  4.在jagiews/web-inf目录下增加2个发布描述文件:server-config.wsdd,web.xml。
  
  #server-config.wsdd
  
  <?xml version="1.0" encoding="utf-8"?>
  <deployment xmlns="http://xml.apache.org/axis/wsdd/"
  xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <globalconfiguration>
  <parameter name="adminpassword" value="admin"/>
  <parameter name="attachments.directory" value="c:/program files
  /apache tomcat 4.0/webapps/axis/web-inf/attachments"/>
  <parameter name="attachments.implementation"
  value="org.apache.axis.attachments.attachmentsimpl"/>
  <parameter name="sendxsitypes" value="true"/>
  <parameter name="sendmultirefs" value="true"/>
  <parameter name="sendxmldeclaration" value="true"/>
  <parameter name="axis.sendminimizedelements" value="true"/>
  <requestflow>
  <handler type="java:org.apache.axis.handlers.jwshandler">
  <parameter name="scope" value="session"/>
  </handler>
  <handler type="java:org.apache.axis.handlers.jwshandler">
  <parameter name="scope" value="request"/>
  <parameter name="extension" value=".jwr"/>
  </handler>
  </requestflow>
  </globalconfiguration>
  <handler name="localresponder"
  type="java:org.apache.axis.transport.local.localresponder"/>
  <handler name="urlmapper"
  type="java:org.apache.axis.handlers.http.urlmapper"/>
  <handler name="rpcdispatcher"
  type="java:org.apache.axis.providers.java.rpcprovider"/>
  <handler name="authenticate"
  type="java:org.apache.axis.handlers.simpleauthenticationhandler"/>
  <handler name="msgdispatcher"
  type="java:org.apache.axis.providers.java.msgprovider"/>
  <service name="adminservice" provider="java:msg">
  <parameter name="allowedmethods" value="adminservice"/>
  <parameter name="enableremoteadmin" value="false"/>
  <parameter name="classname" value="org.apache.axis.utils.admin"/>
  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
  </service>
  <service name="version" provider="java:rpc">
  <parameter name="allowedmethods" value="getversion"/>
  <parameter name="classname" value="org.apache.axis.version"/>
  </service>
  <!-- your service begin-->
  <service name="stringprocess" provider="java:rpc">
  <parameter name="allowedmethods" value="process"/>
  <parameter name="classname"
  value="com.jagie.j2me.ws.stringprocessor"/>
  </service>
  <!-- your service end -->
  <transport name="http">
  <requestflow>
  <handler type="urlmapper"/>
  <handler type="java:org.apache.axis.handlers.http.httpauthhandler"/>
  </requestflow>
  </transport>
  <transport name="local">
  <responseflow>
  <handler type="java:org.apache.axis.transport.local.localresponder"/>
  </responseflow>
  </transport>
  </deployment>
  
  # web.xml
  
  <?xml version="1.0" encoding="iso-8859-1"?>
  
  <!doctype web-app
  public "-//sun microsystems, inc.//dtd web application 2.3//en"
  "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
  
  <web-app>
  <display-name>apache-axis</display-name>
  <servlet>
  <servlet-name>axisservlet</servlet-name>
  <display-name>apache-axis servlet</display-name>
  <servlet-class>
  org.apache.axis.transport.http.axisservlet
  </servlet-class>
  </servlet>
  
  <servlet>
  <servlet-name>adminservlet</servlet-name>
  <display-name>axis admin servlet</display-name>
  <servlet-class>
  org.apache.axis.transport.http.adminservlet
  </servlet-class>
  <load-on-startup>100</load-on-startup>
  </servlet>
  
  <servlet>
  <servlet-name>soapmonitorservice</servlet-name>
  <display-name>soapmonitorservice</display-name>
  <servlet-class>
  org.apache.axis.monitor.soapmonitorservice
  </servlet-class>
  <init-param>
  <param-name>soapmonitorport</param-name>
  <param-value>5001</param-value>
  </init-param>
  <load-on-startup>100</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  <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种访问方

扫描关注微信公众号