在Android中調用axis2發佈web service過程中一直報http500錯誤,axis2 web service是用eclipse插件生成的,發現直接打包成war包或直接在eclipse運行,Android調用的時候會報錯,一定要打包成aar包。如果不用eclipse生成,而是手動添加則可以打包成war包使用(參考博文:使用axis2構建webservice),至於爲什麼還沒有在網上找到答案,並且調用的url還不一樣。
下面時Android調用web service的代碼:
//調用axis開發的web service
private String callAxisWebService(String name) {
String result = "";
String namespace = "http://service.axisdemo.demo.com";
String url = "http://192.168.1.8:8080/axisdemo/services/HelloService?wsdl";
String methodName = "sayHello";
SoapObject soapObject = new SoapObject(namespace, methodName);
soapObject.addProperty("name", name);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = soapObject;
HttpTransportSE ht = new HttpTransportSE(url);
ht.debug = true;
try {
ht.call(null, envelope, null);
SoapObject s1 = (SoapObject) envelope.bodyIn;
result = s1.getProperty("sayHelloReturn").toString();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage());
}
return result;
}
//調用eclipse插件生成的axis2 web service
private String callAxis2WebService(String name) {
String result = "";
String namespace = "http://service.axis2demo.demo.com";
//這裏的url後面沒有?wsdl
String url = "http://192.168.1.8:8080/axis2/services/helloService";
String methodName = "sayHello";
SoapObject soapObject = new SoapObject(namespace, methodName);
soapObject.addProperty("name", name);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = soapObject;
HttpTransportSE ht = new HttpTransportSE(url);
ht.debug = true;
try {
ht.call(null, envelope);
SoapObject s1 = (SoapObject) envelope.bodyIn;
result = s1.getProperty("return").toString();
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage());
}
return result;
}
//調用手動配置的axis2 web service
private String callAxis2WebService2(String name) {
String result = "";
String namespace = "http://service.axis2demo2.demo.com";
//這裏的url後面有?wsdl
String url = "http://192.168.1.8:8080/axis2demo2/services/HelloService?wsdl";
String methodName = "sayHello";
SoapObject soapObject = new SoapObject(namespace, methodName);
soapObject.addProperty("name", name);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = soapObject;
HttpTransportSE ht = new HttpTransportSE(url);
ht.debug = true;
try {
ht.call(null, envelope);
SoapObject s1 = (SoapObject) envelope.bodyIn;
result = s1.getProperty("return").toString();
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage());
}
return result;
}
//調用cxf開發的web service
private String callCxfWebService(String name) {
String result = "";
String namespace = "http://service.cxfdemo.demo.com/";
//在開發中使用了接口,所以?wsdl後面要跟IHelloService.wsdl
String url = "http://192.168.1.8:8080/cxfdemo/services/HelloServicePort?wsdl=IHelloService.wsdl";
String methodName = "sayHello";
SoapObject soapObject = new SoapObject(namespace, methodName);
soapObject.addProperty("name", name);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = soapObject;
//envelope.dotNet = true;
HttpTransportSE ht = new HttpTransportSE(url);
ht.debug = true;
try {
ht.call(null, envelope, null);
SoapObject s1 = (SoapObject) envelope.bodyIn;
result = s1.getProperty("return").toString();
} catch (IOException e) {
Log.e(TAG, e.getLocalizedMessage());
} catch (XmlPullParserException e) {
Log.e(TAG, e.getLocalizedMessage());
} catch (Exception e) {
Log.e(TAG, e.getLocalizedMessage());
}
return result;
}