Android中SOAP Web服务的GetResponse
我想从sapsoapweb服务获得响应,但我得到了一个异常 我正在使用以下代码:Android中SOAP Web服务的GetResponse,android,web-services,soap,android-ksoap2,Android,Web Services,Soap,Android Ksoap2,我想从sapsoapweb服务获得响应,但我得到了一个异常 我正在使用以下代码: package com.veee.pack; import java.io.IOException; import android.app.Activity; import android.os.Bundle; import java.io.IOException; import org.apache.http.client.HttpClient; import org.apache.http.impl.clien
package com.veee.pack;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import java.io.IOException;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportBasicAuth;
import org.ksoap2.transport.HttpTransportSE;
import org.w3c.dom.Element;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class WeservicesExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//getting these values from wsdl file
//username and password appended as URL Parameters
final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";
final String URL = "http://*********:8000/sap/bc/srt/wsdl/srvc_14DAE9C8D79F1EE196F1FC6C6518A345/wsdl11/allinone/ws_policy/document?sap-client=800&sap-user******&sap-password=************";
final String METHOD_NAME = "Z_GET_CUST_GEN";
final String SOAP_ACTION = "urn:sap-com:document:sap:soap:functions:mc-style/Z_GET_CUST_GEN";
SoapObject request =new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Input", "1460");
request.addProperty("Langu", "d");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setOutputSoapObject(request);
HttpTransportSE httptransport=new HttpTransportSE(URL);
httptransport.debug = true;
try {
//calling the services
httptransport.call(SOAP_ACTION, envelope);
Object result = (Object) envelope.getResponse();
//getting the Response Here.
System.out.println("Result" + result.toString());
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当我调试应用程序时,它终止于
httptransport.call(SOAP_ACTION, envelope);
我在android中使用ksoap2运行了一些示例,效果很好。我在日志中遇到以下异常:
04-24 12:19:17.935: WARN/System.err(1569): java.net.SocketTimeoutException
04-24 12:19:17.935: WARN/System.err(1569): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:130)
请给出解决此问题的任何建议,或发送如何在Android中通过XML发出请求并接收响应
提前感谢….当套接字在某个时间间隔内无法读取或接受时,会发生socketTimeoutException。您应该始终为类似的事情做好准备,并在代码中使用try/catch来处理这些情况
访问web服务;确保您的应用程序在其清单中具有android.permission.INTERNET,并检查是否可以从模拟器访问web服务。您可以使用中的代码来检查您的服务是否可访问。当套接字在某个时间间隔内无法读取或接受时,会发生socketTimeoutException。您应该始终为类似的事情做好准备,并在代码中使用try/catch来处理这些情况
访问web服务;确保您的应用程序在其清单中具有android.permission.INTERNET,并检查是否可以从模拟器访问web服务。您可以使用中的代码检查您的服务是否可访问。您可以使用手动设置超时限制
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,Time_Out);
您可以使用手动设置超时限制
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,Time_Out);
避免在android中使用SOAP。。因为这是不推荐的 使用android官方支持的Restful Web服务。 如果您的Web服务提供商无法提供Restful服务,…请忍受一些问题,例如该应用程序有时无法工作,并且可能无法在某些android设备上工作 要解决ksoap2实现中使用多个ksoap2驱动程序的问题,请将网络调用的逻辑放在单独的线程中 调用httptransport.call(SOAP\u操作,信封);消耗大量内存、更多时间,因此避免在主线程中使用此调用。尝试在新的创建仿真器和其中一个设备中创建。KSOAP2在20%到50%的android设备上工作。有时,它可能无法在同一制造商的设备中工作,例如,它可能在HTC sense 2.3.4版本中工作,也可能无法在HTC sense 2.3.5版本中工作
建议使用Restful Web服务。避免在android中使用SOAP。。因为这是不推荐的 使用android官方支持的Restful Web服务。 如果您的Web服务提供商无法提供Restful服务,…请忍受一些问题,例如该应用程序有时无法工作,并且可能无法在某些android设备上工作 要解决ksoap2实现中使用多个ksoap2驱动程序的问题,请将网络调用的逻辑放在单独的线程中 调用httptransport.call(SOAP\u操作,信封);消耗大量内存、更多时间,因此避免在主线程中使用此调用。尝试在新的创建仿真器和其中一个设备中创建。KSOAP2在20%到50%的android设备上工作。有时,它可能无法在同一制造商的设备中工作,例如,它可能在HTC sense 2.3.4版本中工作,也可能无法在HTC sense 2.3.5版本中工作
建议使用Restful Web服务。
java.net.SocketTimeoutException
似乎暗示您正在尝试与未打开的服务通信。假设您的URL
地址指向仅在您的内部网络上公开的SAP服务-您如何连接到它,仅限WiFi?你能用Wireshark(或类似的)来检查你是否连接到它吗?谢谢你的回复,我使用的是Wired net,但soapui pro它工作得很好。如何在Android emulator中使其快速运行?需要任何设置吗?Wired net?从没听说过那个网络分析仪。在任何情况下,由于您显然是在模拟器上运行,您在网络分析器的连接日志中看到了什么?您是否在网络中使用了?您可以使用emulator中的默认web浏览器,浏览一些随机网站,如www.google.com?是的,我在我的计算机上使用有线网络。这将是一个基于路由器的网络。我在android emulator浏览器中浏览一些网站。它对我来说工作正常java.net。SocketTimeoutException
似乎暗示着你正在尝试与一个未打开的服务进行通信。假设您的URL
地址指向仅在您的内部网络上公开的SAP服务-您如何连接到它,仅限WiFi?你能用Wireshark(或类似的)来检查你是否连接到它吗?谢谢你的回复,我使用的是Wired net,但soapui pro它工作得很好。如何在Android emulator中使其快速运行?需要任何设置吗?Wired net?从没听说过那个网络分析仪。在任何情况下,由于您显然是在模拟器上运行,您在网络分析器的连接日志中看到了什么?您是否在网络中使用了?你能在emulator中使用默认的web浏览器浏览到一些随机网站,如www.google.com吗?是的,我在我的计算机上使用有线网络。这将是一个基于路由器的网络。我在android emulator浏览器中浏览一些网站。这对我来说很好