настройка конверта ksoap2-android

1

У меня проблема с конвертом, созданным с использованием SoapSerializationEnvelope из ksoap2-android lib. Что мне нужно получить (что ожидает сервер):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soa="http://agh.edu.pl/soa">
   <soapenv:Header/>
   <soapenv:Body>
      <soa:getCompanyById>
         <id>1</id>
      </soa:getCompanyById>
   </soapenv:Body>
</soapenv:Envelope>

Я действительно получаю то, что:

<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>
    <n0:getCompanyById id="o0" c:root="1" xmlns:n0="http://agh.edu.pl/soa">
        <id i:type="d:int">5</id>
    </n0:getCompanyById>
</v:Body>
</v:Envelope>

Мой код Java:

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        PropertyInfo id = new PropertyInfo();
        id.setName("id");
        id.setValue(5);
        id.setType(int.class);
        request.addProperty(id);

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

        HttpTransportSE httpTransport = new HttpTransportSE(URL);
        httpTransport.debug = true;

        try {
            httpTransport.call(request.getNamespace() + "/" + request.getName(), envelope);
        } catch (Exception e)
        {
            System.out.println(httpTransport.requestDump);
            System.out.println(httpTransport.responseDump);
            System.out.println(e.getMessage());
        }

Мне нужно изменить каждый v: что-то в soapenv: что-то и n0: getCompanyById в soa: getCompanyById. Есть идеи? Заранее спасибо. Cya

Теги:
soap
android-ksoap2

1 ответ

1
Лучший ответ

Эти конверты в основном одинаковые - они просто используют разные префиксы. Я бы предложил использовать что-то вроде SoapUI: шаг за шагом, изменить рабочий конверт на то, что вы получаете от кода. В тот момент, когда все идет плохо, вы узнаете, что вызывает проблему.

По моему опыту i: type = "d: int" также может вызвать проблему.

  • 3
    Как вы сказали, проблема была в i: type = "d: int". Решением является преобразование значения в long: «id.setValue ((long) value)». Мыло настолько отсталое. Я надеюсь, что люди, которые его создали, сгорят в аду. Спасибо мой бог

Ещё вопросы

Сообщество Overcoder
Наверх
Меню