Разработка программы Android для связи с веб-сервисами Epicor 9
Это... Я пытаюсь получить запрос данных от веб-службы epicor с помощью приложения Android(в Eclipse) и библиотеки KSOAP2. Это мои коды:
public class MainActivity extends Activity {
//.........PART CONNECTION LINK............
private static final String SOAP_ACTION = "http://10.2.15.60/epicortrainservices/epicortrainservices/";
private static final String METHOD_NAME = "GetAllRows";
private static final String NAMESPACE = "http://10.2.15.60/epicortrainservices/";
private static final String URL = "http://10.2.15.60/epicortrainservices/POApvMsgService.asmx?wsdl";
private TextView tv;
private String response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (TextView)findViewById(R.id.textView1);
myAsyncTask myRequest = new myAsyncTask();
myRequest.execute();
}
private class myAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onProgressUpdate(Void... values) {
Log.i("TOPSCORE", "onProgressUpdate");
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
tv.setText(response);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
//.........PART ENCAPSULATE SOAP............
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo CompanyID = new PropertyInfo();
//Set Name
CompanyID.setName("CompanyID");
//Set Value
CompanyID.setValue("EPIC06");
//Set dataType
CompanyID.setType(String.class);
PropertyInfo whereClausePOApvMsg = new PropertyInfo();
//Set Name
whereClausePOApvMsg.setName("whereClausePOApvMsg");
//Set Value
whereClausePOApvMsg.setValue("");
//Set dataType
whereClausePOApvMsg.setType(String.class);
PropertyInfo pageSize = new PropertyInfo();
//Set Name
pageSize.setName("pageSize");
//Set Value
pageSize.setValue("5");
//Set dataType
pageSize.setType(int.class);
PropertyInfo absolutePage = new PropertyInfo();
//Set Name
absolutePage.setName("absolutePage");
//Set Value
absolutePage.setValue("5");
//Set dataType
absolutePage.setType(int.class);
request.addProperty(CompanyID);
request.addProperty(whereClausePOApvMsg);
request.addProperty(pageSize);
request.addProperty(absolutePage);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet=true;
HttpTransportSE httpTransport = new HttpTransportSE(URL);
httpTransport.setXmlVersionTag("<!--?xml version=\"1.0\" encoding= \"UTF-8\" ?-->");
httpTransport.debug = true;
try {
httpTransport.call(SOAP_ACTION, envelope);
} catch (HttpResponseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //send request
//.........PART GET RESPONSE............
SoapObject result = null;
try {
SoapObject resultString=(SoapObject) envelope.bodyIn;
result = (SoapObject)resultString.getProperty(0);
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//response contain the data request...
response = result.toString();
return null;
}
}
}
Это... xml коды, показывающие параметры метода "GetAllRows" из wsdl Epicor WebService:
<xs:element name="GetAllRows">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="CompanyID" type="xs:string"/>
<xs:element minOccurs="0" maxOccurs="1" name="whereClausePOApvMsg" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="pageSize" type="xs:int"/>
<xs:element minOccurs="1" maxOccurs="1" name="absolutePage" type="xs:int"/>
<xs:element minOccurs="0" maxOccurs="1" name="callContextIn" type="vantageSchema:CallContextDataSetType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Мои проблемы:
Я не знаю правильную ссылку (SOAP_ACTION) на веб-сервис epicor
Веб-сервису Epicor нужны "пользователь" и "пароль" каждый раз, когда я вызываю метод. Где я должен добавить это (в request.addProperty?) В коды?
Это верно, коды деталей для получения ответа на данные?