如何像SOAP UI请求一样从android构建SOAP请求?
问题描述:
最近,我正在debbuging我的Android应用程序,但我从我的web服务接收数据时遇到了问题,因为在日志中,它表示我发送的参数(List)为空... ...的东西是.. 。当我用SOAP UI测试我的方法时,它起作用了!我得到了我想要的东西,但是从Android上的XML请求正在这里修建不同的是,XML(!这个XML工程)如何像SOAP UI请求一样从android构建SOAP请求?
SOAP UI:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ws="http://ws.soap.net/">
<soapenv:Header/>
<soapenv:Body>
<ws:GetSomething>
<!--Zero or more repetitions:-->
<List>
<!--Optional:-->
<id>000001</id>
<!--Optional:-->
<type>Sign</type>
</List>
</ws:GetSomething>
,你可以看到这是一个SOAP UI建成请求我的WS
的XML和这是我在Android调试时发现XML:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<n0:GetSomething xmlns:n0="http://ws.soap.net/">
<n0:List>
<id>000001</id>
<tipo>sign</tipo>
<id>000002</id>
<tipo>sign</tipo>
<id>000003</id>
<tipo>sign</tipo>
</n0:List>
</n0:GetSomething>
</v:Body>
</v:Envelope>
因此,通过在Android调试生成的XML,当我在SOAP UI粘贴,只是说,我送的(List)的参数为空...
我测试了Android和唯一生成的XML工作,如果我 “列表” 之前删除 “NO” 前缀我的意思是:
从这个:
这样:
<List>
</List>
ŧ他是我的Android的SOAP请求:
private final String SOAP_NAMESPACE = "http://ws.soap.net/";
private final StringURL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest";
private final String SOAP_SOMETHING = "GetSomething";
private final String SOAP_ACTION_GETSOMETHING = "http://ws.soap.net/" + SOAP_SOMETHING;
public SoapObject SendSigns(ArrayList<Signs> paramSigns)
{
SoapObject request = new SoapObject(SOAP_NAMESPACE, SOAP_SOMETHING);
request.addSoapObject(buildArray(paramSigns));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
new MarshalBase64().register(envelope);
envelope.bodyOut = request;
envelope.setOutputSoapObject(request);
envelope.setAddAdornments(false);
envelope.implicitTypes= true;
envelope.dotNet=true;
envelope.headerOut = new org.kxml2.kdom.Element[1];
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_SOAP);
try {
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION_GETSOMETHING, envelope);
SoapObject Object = (SoapObject) envelope.getResponse();
if(Object!=null)
{
return Object;
}
} catch (Exception e) {
Log.d("CALL DUMP", "requestError: "+androidHttpTransport.requestDump);
Log.d("CALL DUMP", "responseEror: "+androidHttpTransport.responseDump);
Log.e("ERROR: ", String.valueOf(e));
}
return null;
}
答
你把URL_SOAP与弦乐之间的空间?
这里是我们的代码:
private final StringURL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest";
正确:
private final String URL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest";