2017-07-16 6 views
0

最近、私はAndroidアプリケーションをデバッグしていましたが、ログでは、送信したパラメータ(List)がnullだったため、Webサービスからデータを受け取るときに問題が発生しました。私はSOAP UIを使ってメソッドをテストするとうまくいきます!そして私は私が望む結果を得るが、アンドロイドからXML要求は、ここでは異なる構築されているXMLです:SOAP UIリクエストのようにアンドロイドからSOAPリクエストを作成するにはどうすればいいですか?

SOAPのUI(このXMLワークス!):

<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への要求

として構築されており、これは、Android上でデバッグするときに私が見つけたXMLで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> 

だから私は、SOAP UIに貼り付けるAndroid上でデバッグすることにより、生成されたXMLは、ちょうど私が送信されたパラメータ(リスト)がnullであったと言う...

私は、Androidで生成されたXMLをテストし、のみこれに

<List> 
</List> 

T本から

:私は "リスト" 私が意味する前に、 "N0" 接頭辞を削除した場合に動作します彼は、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; 

}

答えて

0

あなたはURL_SOAPと文字列の間にスペースを入れていますか?正しい

private final StringURL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest"; 

private final String URL_SOAP="http://MI_IP:PORT/GetSomeRest/WebServiceTest"; 
ここ

はウルのコードです
関連する問題