1
我已經實現了一個Java web服務WelcomMsg,它正在Apache Axis上運行。 Web服務只有一個方法greetUs()。它返回一個字符串「Greetings」: 當我使用HttpTransport對象調用時,我得到一個異常並總是得到「false」。通過ksoap2從Android調用Java Web服務
我想命名空間在這裏。請查看代碼並告訴我什麼是缺失/不正確。我已經提供了服務方法,wsdl內容和Android肥皂客戶端內容。
在服務的方法如下:
public class WelcomeMsg {
public String greetUs()
{
return "Greetings!!!";
}
}
這裏是WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:part element="impl:greetUsResponse" name="parameters">
</wsdl:part>
<wsdl:part element="impl:greetUs" name="parameters">
</wsdl:part>
<wsdl:operation name="greetUs">
<wsdl:input message="impl:greetUsRequest" name="greetUsRequest">
</wsdl:input>
<wsdl:output message="impl:greetUsResponse" name="greetUsResponse">
</wsdl:output>
</wsdl:operation>
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="greetUs">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="greetUsRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="greetUsResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:port binding="impl:WelcomeMsgSoapBinding" name="WelcomeMsg">
<wsdlsoap:address location="http://localhost:8080/NewWebService/services/WelcomeMsg"/>
</wsdl:port>
Android的SOAP客戶端如下:
package com.example.HelloDroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.*;
import org.ksoap2.transport.HttpTransportSE;
public class Droid extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION = "DefaultNamespace";
private static final String METHOD_NAME = "greetUs";
private static final String NAMESPACE = "urn:DefaultNamespace";
private static final String URL = "http://192.168.186.136:12733/NewWebService/services/WelcomeMsg";
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) findViewById(R.id.TextView01);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=false;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
try{
ht.call(SOAP_ACTION, envelope);
//tv.setText("http set");
SoapPrimitive sp= (SoapPrimitive) envelope.getResponse();
tv.setText("Msg from service: "+sp);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}