Blackberry-не получается мыло ответ xml

Я пытаюсь использовать XML-ответ SOAP, передавая XML-запрос в строке, используя подключаемый модуль BlackBerry Java для Eclipse. Я был поражен этим в течение последних двух дней, ища способ решить эту проблему.

Я прикрепил образец кода ниже.

public String CheckXml()
{
     final String requestXml="<SOAP:Envelope xmlns:SOAP=\"http://schemas.xmlsoap.org/soap/envelope/\"><header xmlns=\"http://schemas.cordys.com/General/1.0/\"></header><SOAP:Body><authenticateAgainstOID xmlns=\"http://schemas.cordys.com/OIDAuthentication\"><stringParam>HEMANTS_MUM013</stringParam><stringParam1>TATA2012</stringParam1></authenticateAgainstOID></SOAP:Body></SOAP:Envelope>";

     final String HOST_ADDRESS = "http://xyz.com/cordys/com.eibus.web.soap.Gateway.wcp?organization=o=B2C,cn=cordys,cn=cbop,o=tatamotors.com&SAMLart=MDFn+8e5dRDaRMRIwMY7nI84eEccbx+lIiV0VhsOQ7u+SKG6n5+WNB58"; 
     String result="";
     try {
         HttpConnection url=(HttpConnection)Connector.open(HOST_ADDRESS);
         url.setRequestProperty("Content-Type", "text/xml");
         url.setRequestMethod(HttpConnection.GET);
         OutputStreamWriter writer=new OutputStreamWriter(url.openOutputStream());

         writer.write(requestXml);
         writer.flush();
         writer.close();
         StringBuffer buffer1=new StringBuffer();

         InputStreamReader reader=new InputStreamReader(url.openInputStream());
         StringBuffer buffer=new StringBuffer();
         char[] cbuf=new char[2048];
         int num;

         while (-1 != (num = reader.read(cbuf))) {
            buffer.append(cbuf, 0, num);
         }

         String result1 = buffer.toString();
    } catch (Exception e) {
        System.out.println(e);
    }
    return result;
}

person Pramodhini    schedule 05.09.2012    source источник


Ответы (2)


Думаю, главная проблема, о которой вы не спрашиваете http. getResponseCode(). Я думаю, BB не взаимодействует, пока вы не позвоните.

Я бы также был осторожен с этим кодом на реальных устройствах. Найдите правильное открытие соединения на BlackBerries.

person Eugen Martynov    schedule 05.09.2012
comment
Я пробовал это также для проверки HTTP-соединения, я разместил здесь код if (url.getResponseCode () == HttpConnection.HTTP_OK) {InputStream inputStream = url.openInputStream (); buffer.append (IOUtilities.streamToBytes (inputStream)); результат = buffer.toString (); } но это не работает для меня - person Pramodhini; 05.09.2012
comment
Что ты получил? Какое-то исключение? Возможно, вам нужно установить некоторые заголовки принятия. Не могли бы вы обнюхать настольный клиент и проверить заголовки, которые он отправляет на сервер / Возможно, вам нужно изменить метод с GET на POST. - person Eugen Martynov; 05.09.2012
comment
Привет, после изменения и полной проверки, но теперь я получаю ту же ошибку, что и класс, не найденный рядом со строкой inputstreamreader. - person Pramodhini; 05.09.2012
comment
Думаю, что InputStreamReader доступен с ОС 5.0. Какое устройство / сим вы используете для тестирования? - person Eugen Martynov; 05.09.2012
comment
Привет, я использую 4.2.06 simulator. Только что проверил, сразу попробую в 5.0. - person Pramodhini; 05.09.2012

Я заметил, что вы не включаете в запрос заголовок SoapAction.

Веб-службы SOAP обычно имеют фиксированный URL-адрес, а различные методы выбираются с помощью заголовка SoapAction. Вы можете проверить заголовок, открыв WSDL в браузере и проверив формат для метода, который вы хотите вызвать.

Как только вы узнаете, какое действие выбрать, установите его как обычный заголовок http:

url.setRequestProperty("SOAPAction", <your action here>);

Другой источник проблем в вашем коде заключается в том, что вы используете старый класс HttpConnection, который требует добавления суффикса к URL-адресу в зависимости от типа транспорта (MDS, BIS, Wi-Fi и т. Д.). Вам не нужно использовать этот устаревший класс, если вы не ориентируетесь на OS 4.5 и ниже. Так что взгляните на класс ConnectionFactory, который намного проще в использовании. Доступен, начиная с OS 5.0.

person Mister Smith    schedule 05.09.2012
comment
Привет, я перепробовал все факторы и даже не получаю положительного результата, чтобы сделать следующий шаг. а также это не формат службы wsdl. передавая запрос xml, ответ xml должен быть в строковом формате - person Pramodhini; 06.09.2012
comment
В какой строке не работает? Какой тип исключения выбрасывается? - person Mister Smith; 06.09.2012
comment
через точку останова, которую я проверяю, он попадает в inputstreamreader после того, как он выбрасывает симулятор source not found.wat для использования в версии 5 ОС. - person Pramodhini; 06.09.2012
comment
Исходный код не найден обычно отображается, когда вы пытаетесь войти в класс RIM при отладке, или возникает исключение, и отладчик хочет разместить его в строке сбоя внутри класса RIM. Просто нажмите кнопку «Продолжить» в отладчике и позвольте приложению записать ошибку. Кстати, InputStreamReader также доступен в OS 4.2, нет необходимости переходить на OS 5.0. - person Mister Smith; 07.09.2012