Получение ошибки soapfault - PullRequest
1 голос
/ 19 ноября 2011

Я соединяю свой код Android с Webservice для извлечения данных. и я всегда получаю:

 SoapFault - faultcode: 'a:InternalServiceFault' faultstring: 'Error in deserializing body of request message for operation
 'insertAuditData'. OperationFormatter encountered an invalid Message
 body. Expected to find node type 'Element' with name 'insertAuditData'
 and namespace 'http://tempuri.org/'. Found node type 'Element' with
 name 'insertAuditData' and namespace 'http://tempuri.org'' faultactor:
 'null' detail: org.kxml2.kdom.Node@44f6a4e8

мой код

private static final String SOAP_ACTION3 = "http://tempuri.org/IService/GetSpecificAuditData";
private static final String SOAP_ACTION2 = "http://tempuri.org/IService/insertAuditData" ;
private static final String SOAP_ACTION = "http://tempuri.org/IService/GetAllAuditData";
private static final String METHOD_NAME = "GetAllAuditData";
private static final String METHOD_NAME2 = "insertAuditData";
private static final String METHOD_NAME3 = "GetSpecificAuditData";
private static final String NAMESPACE = "http://tempuri.org//";
private static final String URL = "http://70.33.215.18/PortalService.svc?wsdl";
private boolean isResultVector = false;

public Audit CallGetALL()
  {
    final String sGetSingle = METHOD_NAME;
    // Create the outgoing message
    final SoapObject requestObject = new SoapObject(NAMESPACE, sGetSingle);
    // Create soap envelop .use version 1.1 of soap
    final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    // add the outgoing object as the request
    envelope.setOutputSoapObject(requestObject);
    envelope.addMapping(NAMESPACE,Audit.Audit_CLASS.getSimpleName(),Audit.Audit_CLASS);
    // call and Parse Result.
    final Object response = this.call(SOAP_ACTION, envelope);
    Audit result = null;
    if (response != null)
        {
            result = new Audit((SoapObject) response);
        }

        return result;
    }
 protected Object call(String soapAction,SoapSerializationEnvelope envelope)
        {
            Object result = null;
            final HttpTransportSE transportSE = new HttpTransportSE(URL);
            transportSE.debug = false;
            // call and Parse Result.
            try
            {
                transportSE.call(soapAction, envelope);
                if (!isResultVector)
                {
                    result = envelope.getResponse();
                } else
                {
                    result = envelope.bodyIn;
                }
            } catch (final IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (final XmlPullParserException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (final Exception e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
        }

1 Ответ

4 голосов
/ 21 ноября 2011

Одна вещь, которая выделяется, это то, что вы не устанавливаете какие-либо свойства в requestObject.

Сериализованный SOAP XML для GetSpecificAuditData, вероятно, выглядит примерно так ... <k:GetSpecificAuditData xmlns:k="http://tempuri.org//"></k:GetSpecificAuditData>

Веб-сервис, вероятно, ожидает, что GetSpecificAuditData будет иметь некоторые данные, связанные с ним. Может быть, идентификатор записи? Это всего лишь предположение с моей стороны, так как я понятия не имею, как выглядит спецификация веб-сервиса.

Посмотрите на метод addProperty SoapObject.

Кроме того, дважды проверьте свое пространство имен. Конечная косая черта на конце может также вызвать проблемы с сервисом.

Если вам интересно, я написал учебник по ksoap2-android, который можно найти по адресу ...

http://www.shanekirk.com/2011/11/speaking-soap-with-android/

...