背景
在一个大型平台项目中,经常会有多个团队协作开发,而不同的团队所使用的开发语言和开发技术也不尽相同,本文就介绍一下如何在java中访问C#写的WebService(基于soap协议)接口,很长用的场景就是Android手持系统访问WebService接口。
说明:本代码依赖的jar包如下:
ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar
代码实现
package com.soap.client.test;
import org.junit.Test;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class SoapClientTester {
private final String MYURL = "http://172.16.12.23:9003/CuringWebService/CuringAppService";
private final String NAMESPACE = "http://curing.mesnac.com";
private final String METHODNAME = "getClassNames";
public SoapClientTester() {
}
@Test
public void TestCall()
{
try {
SoapObject request = new SoapObject(NAMESPACE,METHODNAME);
// request.addProperty("name", accountet.getText().toString()); //为接口方法传参
// request.addProperty("arg0", "{\"function\":\"getInStoreBill\",\"request\":{\"billNo\":\"20190310011001\",\"date\":\"2019-03-10\",\"shift\":\"123\"}}");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = request;
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(MYURL);
ht.call(NAMESPACE+METHODNAME, envelope); //接口调用
//返回对象应为Object 否则会出现转换异常错误
Object soapObject = (Object) envelope.getResponse();
System.out.println(soapObject.toString());
//后面的代码就是对soapObject.toString()的内容进行解析,这就是接口方法的返回值
}catch (Exception e) {
e.printStackTrace();
}
}
}