java.io.IOException : HTTP request failed, HTTP 状态:500 (ksoap2)

标签 java android android-ksoap2 ksoap

我正在使用 KSOAP2,当向服务器发送请求时得到 java.io.IOException: HTTP request failed, HTTP status: 500 in the line httpTransport.call(SOAP_ACTION, envelope) ,但是服务器工作,我已经使用 SoapUI 检查了它。可能是什么问题?

public class SOAPClient
{
    private static final int TIMEOUT_SOCKET = 180000;

    public static SoapObject get(Context context, String methodName, ArrayList<Pair<String, ?>> args) throws Exception
    {
        final String URL = PrefHelper.getSOAPUrl(context);
        final String NAMESPACE = PrefHelper.getSOAPNamespace(context);
        final String SOAP_ACTION = methodName; //NAMESPACE + "#" + "mapx" + ":" + methodName;

        SoapObjectEve request = new SoapObjectEve(NAMESPACE, methodName);

        if (args != null) {
            for (Pair<String, ?> arg : args) {
                if (arg.first != null) {
                    request.addProperty(arg.first, arg.second);
                }
            }
        }

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        new MarshalBase64().register(envelope);
        envelope.setOutputSoapObject(request);

        envelope.implicitTypes = true;

        HttpTransportSE httpTransport = new HttpTransportSE(URL, TIMEOUT_SOCKET);
        httpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        try 
        {
            httpTransport.call(SOAP_ACTION, envelope);
            AppLog.e(httpTransport.requestDump+"requestDump");


        }
        catch (ConnectTimeoutException e) {
            AppLog.e(e.getMessage());
            throw new Exception(context.getString(R.string.node_unavailable));
        }
        catch (SocketTimeoutException e) {
            AppLog.e(e.getMessage());
            throw new Exception(context.getString(R.string.timeout));
        }
        catch (Exception e) {
            e.printStackTrace();
            AppLog.e(e.getMessage());

            AppLog.e(httpTransport.requestDump+"requestDump");
            throw new Exception(context.getString(R.string.warning_error_get_data) + e.getMessage() == null ? "" : " " + e.getMessage());
        }

        AppLog.i(httpTransport.requestDump+"requestDump");

        SoapObject soapObj = null;

        try {
            soapObj = (SoapObject) envelope.getResponse();
        }
        catch (Exception e) {

            String response = ((SoapPrimitive) envelope.getResponse()).toString();
            boolean res = Boolean.valueOf(response);

            soapObj = new SoapObject();
            soapObj.addProperty("response", res);
            soapObj.addProperty("msg", "");
            soapObj.addProperty("data", null);

        }
        AppLog.e(httpTransport.responseDump+"responseDump");
        return soapObj;
    }
}

最佳答案

确保您的NAMESPACEMETHODNAMEWSDLSOAP_ACTION 是正确的。

试试这段代码,

private static final String NAMESPACE = "http://www.kltro.com";
private static final String METHODNAME = "getUser";
private static final String WSDL = "http://ap.kashkan.org:55555/tro/ws/kltro";
private static final String SOAP_ACTION = NAMESPACE + "#kltro:" + METHODNAME ;

private static String TAG = "soap";

public static String callWebservice() {
    String responseDump = "";
    try {
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        SoapObject request = new SoapObject(NAMESPACE, METHODNAME);
        request.addProperty("login", login);
        request.addProperty("pass", password);
        request.addProperty("androidID", androidID);
        request.addProperty("ver", version);

        envelope.bodyOut = request;
        HttpTransportSE transport = new HttpTransportSE(WSDL);
        transport.debug = true;
        try {
            transport.call(SOAP_ACTION, envelope);
            String requestDump = transport.requestDump;
            responseDump = transport.responseDump;
            Log.e(TAG, requestDump);
            Log.e(TAG, responseDump);
        } catch (IOException e) {
            e.printStackTrace();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return responseDump;
}

还要确保您在 list 中具有互联网权限,

<uses-permission android:name="android.permission.INTERNET" />

关于java.io.IOException : HTTP request failed, HTTP 状态:500 (ksoap2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638964/

相关文章:

java - 获取图像扩展

java - Java中void方法末尾的 "return;"对性能有任何影响吗?

java - 从 Java 扫描图像采集硬件

java - Junit Test 注释与测试后缀或前缀

android - 服务器检索复杂类型时出现 ksoap2 错误 服务器无法处理请求。 ---> 对象引用未设置为对象的实例

java - 从服务器获取 soap 对象响应。如何在 android 中解析 soap 对象

android - java.lang.ClassCastException : android. widget.LinearLayout 无法转换为 android.widget.ScrollView

java - MVP 模式中的 Mockito 测试

java - 我如何使用改造和recyclerView解析json对象

android - Web 服务 Http 身份验证 - Android 上的 KSOAP2