ksoap2 を使用して、.net Web サービスに SOAP エンベロープを送信しようとしています。残念ながら、それが作成しているエンベロープは、Web サービスが好きではありません。これを soapUI でテストしたところ、[] (JSON) だけで同じ結果が得られました。Ksoap が生成しています:
<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>
<getTest xmlns="http://www.carefusion.com/" id="o0" c:root="1">
<testint i:type="d:int">16875</testint>
</getTest>
</v:Body>
</v:Envelope>
soapUI でテストすると、Web サービスは次のことを実際に確認したいと考えています。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:car="http://carefusion.com/">
<soapenv:Header/>
<soapenv:Body>
<car:getTest>
<car:testint>16874</car:testint>
</car:getTest>
</soapenv:Body>
</soapenv:Envelope>
私のJSONを返します。私はおそらく ksoap ライブラリを正しく使用していません。エンベロープを適切にフォーマットするには、コードをどうすればよいですか?
FirstScreen.java
package carefusion.com.MyTest;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;
import android.widget.TextView;
public class FirstScreen extends Activity {
/**Called when the activity is first created */
private static final String URL="http://10.220.13.202:8080/Respiratory/ResService.asmx";
private static final String SOAP_ACTION ="http://carefusion.com/getTest";
private static final String METHOD_NAME ="getTest";
private static final String NAMESPACE="http://www.carefusion.com/";
private static final String param="16875";
TextView tv;
ListView lv;
ArrayList<AgentMetric> agentMetricList = new ArrayList<AgentMetric>();
AgentMetric agentObj = new AgentMetric();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_screen);
tv=(TextView)findViewById(R.id.TextView01);
lv=(ListView)findViewById(R.id.ListView01);
try
{
String response= new RetrieveJson().execute(URL, SOAP_ACTION, METHOD_NAME, NAMESPACE, param).get();
tv.setText(response);
}
catch(Exception e)
{
tv.setText(e.toString());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.first_screen, menu);
return true;
}
}
RetrieveJson.java
package carefusion.com.MyTest;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.os.AsyncTask;
import android.util.Log;
public class RetrieveJson extends AsyncTask <String, Void, String>
{
@Override
protected String doInBackground(String... URL) {
String result="";
SoapObject Request=new SoapObject (URL[3].toString(),URL[2].toString());
PropertyInfo pi = new PropertyInfo();
pi.setName("testint");
pi.setValue(Integer.parseInt(URL[4].toString()));
pi.setType(int.class);
Request.addProperty(pi);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet=true;
soapEnvelope.setOutputSoapObject(Request);
HttpTransportSE aht =new HttpTransportSE(URL[0].toString());
aht.debug=true;
try
{
aht.call(URL[1].toString(), soapEnvelope);
SoapObject response = (SoapObject)soapEnvelope.bodyIn;
result = response.getProperty(0).toString();
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
Log.i(getClass().getSimpleName(),"requestDump : "+aht.requestDump);
Log.i(getClass().getSimpleName(),"responseDump : "+aht.responseDump);
}
return result;
}
@Override
protected void onPostExecute(String result) {
}
}