针对我们的订餐系统做如下记录:
1. 整理dao包下的类:
a) 把连接数据库的内容直接写在类里,不调用SqlFunction
b) 有些返回的是entity包下的实体类,把这些返回值改成String,内容用标签分隔
2. axis在tomcat的webapp下面,把整理好的类放到axis下,把后缀改成jws
3. 在浏览器测试一下,输入http://localhost:8080/axis/包/类.jws,如果显示xml文件就说明发布成功
4. android程序详细代码附后,其中几个类的调用顺序:
a) SoapObject (addProperty添加参数)
b) SoapSerializationEnvelope
c) AndroidHttpTransport
5. 在android程序中要注意以下几点:
a) 要记得在AndroidManifest.xml中加
<uses-permission android:name="android.permission.INTERNET" />
b) 用SoapObject传输,其中用addProperty方法添加参数,参数名和服务器的不用一致,但是顺序要一致。
c) SOAP请求信息对应SoapSerializationEnvelope对象。其中构造中传递的是SOAP协议的版本号,我们用的是SoapEnvelope.VER11。然后要指定bodyOut属性,对应SoapObject对象。
d) 用HttpTransportSE类指定WebService的WSDL文档的URL,也就是我们的web service的地址。call方法的第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象
e) 使用KSOAP2调用WebService可分为6步来完成,其中主要使用了SoapObject对象来指定了要调用的方法,然后通过HttpTransportSE对象的call方法来调用WebService的方法,最后通过getResponse方法返回结果。
f) 详细教程可以参考http://www.cnblogs.com/xiaohuzi/articles/1887312.html
调用代码:
public static String doCallWebService(String soapAction, String methodName, Map<String, String> props){
String xmlStr;
SoapObject request = new SoapObject(Constant.NAMESPACE, methodName);
Set<String> sets = props.keySet();
Iterator it = sets.iterator();
while(it.hasNext()){
String name =(String)it.next();
String value =(String)props.get(name);
request.addProperty(name, value);
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport androidHttpTransport =new AndroidHttpTransport (Constant.URL);
try {
androidHttpTransport.call(soapAction, envelope);
Object result = envelope.getResponse();
Log.i("resultObject",String.valueOf(result==null));
xmlStr = result.toString();
} catch(Exception e) {
e.printStackTrace();
return null;
}
return xmlStr;
}
其中
public static final String SOAP_ACTION = "http://tempuri.org/axis/3G/ModBean/check";
public static final String METHOD_NAME = "check";
public static final String NAMESPACE = "http://tempuri.org/axis/3G/ModBean";
public static final String URL = "http://10.21.244.54:8080/axis/3G/ModBean.jws";