Имя: Пароль:
1C
 
1С + Android
0 a_alenkin
 
30.03.16
11:33
Собственно, функционала мобильного приложения оказалось недостаточным для работы.

Поэтому решено написать своего клиента для обращения к существующему веб-сервису с помощью ksoap2-android-assembly-3.4.0-jar-with-dependencies.jar

и так как в jave я не настолько силен - никак не могу вызвать элементарную функцию которая передает с мобильного клиента строку на сервер и ее же возвращает.
Перерыл все поиски.

Мой код:

public class SoapConnection {
    private static final String NAMESPACE = "http://win-2008.auto.local";;
    private static String URL = "http://win-2008.auto.local/alfa_n/ws/auto/";;
    private static final String METHOD_NAME = "test";
    private static final String SOAP_ACTION = "http://win-2008.auto.local/alfa_n/ws/auto/test";;
    SoapObject request;
    SoapSerializationEnvelope envelope;
    HttpTransportSE httpTransportSE;
    List<HeaderProperty> headerList;
    String result;



    public String TestConnection(String arg){
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("arg", arg);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        HttpTransportSE httpTransportSE = new HttpTransportSE(URL);
        httpTransportSE.debug = true;
        List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
        headerList.add(new HeaderProperty("Authorization",
                "Basic " + org.kobjects.base64.Base64.encode("Администратор:123аа".getBytes())));
        try {
            httpTransportSE.call(SOAP_ACTION, envelope, headerList);
        } catch (Exception e) {
            e.printStackTrace();
            return e.getLocalizedMessage();
        }
        SoapObject Sresult = (SoapObject)envelope.bodyIn;
        result = Sresult.getProperty("result").toString();
        return result;
    }
}

выдает мне ошибку:


org.ksoap2.SoapFault cannot be cast to
org.ksoap2.serialization.SoapObject

Может кто поможет с проблемой или хотя бы носом тыкнет.
работаю в Андроид Студио - отладку включить не могу - виртуальная машина не позволяет запустить виртуальный эмулятор
1 UnknownNick
 
30.03.16
11:35
Сообщить() между строк неплохо помогает.
2 UnknownNick
 
30.03.16
11:36
типы объектов не совпадают вроде
3 a_alenkin
 
30.03.16
11:36
(1) Вызывается в отдельном процессе
4 Nuobu
 
30.03.16
11:38
5 1Cancer
 
30.03.16
11:50
(0) ну там ошибка сериализации, судя по ошибке, посмотри от кого наследник и т.д. почему не сереализует, можно добавить свою серилку в ручную, убрать то, что не может сериализоваться, например потоки. они не сериализуемы.
6 Draziw
 
30.03.16
12:08
Ошибка то в какой строке ?
SoapObject Sresult = (SoapObject)envelope.bodyIn;
тут ?
7 Draziw
 
30.03.16
12:16
SoapFault mResult = envelope.bodyIn;
попробуй так,
посмотри какие методы и свойства есть
у mResult
:)
не надо переменные с большой буквы называть :)
префикс "s"Result - для статик переменных.
8 a_alenkin
 
30.03.16
13:00
теперь проблемы с авторизацией нашел 2 варианта:

1)
        request.addProperty("arg", arg);
        request.addProperty("username", username);
        request.addProperty("password", password);

выдает 401 ошибку - т.е. авторизация

2)
        List<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
        headerList.add(new HeaderProperty("Authorization",
                "Basic " + org.kobjects.base64.Base64.encode("Администратор:123аа".getBytes())));
        try {
            httpTransportSE.call(SOAP_ACTION, envelope, headerList);
        } catch (Exception e) {
            e.printStackTrace();
            return e.getLocalizedMessage();
        }
        if (envelope.bodyIn instanceof SoapFault) {
            final SoapFault sf = (SoapFault) envelope.bodyIn;
            result = sf.getMessage(); // result = sf.faultstring;

        }


Как то ничего не возвращает
9 arsik
 
гуру
30.03.16
13:16
"функционала мобильного приложения оказалось недостаточным для работы." - чего там может не хватать?
10 zladenuw
 
30.03.16
13:43
(9) хотят что то скрыть. или что бы не украли решение :)
11 Masquerade
 
30.03.16
13:43
(9)+

Тоже интересно.
12 Masquerade
 
30.03.16
13:44
(10)

"функцию которая передает с мобильного клиента строку на сервер и ее же возвращает."

Это? Ну... Тут шифровать надо серьезно.
13 UnknownNick
 
30.03.16
13:45
(9) тормознутое десктопное гуано....устроит?
14 Masquerade
 
30.03.16
13:48
(13)
Не хватает тормозного десктопного гуана??
15 zladenuw
 
30.03.16
13:51
(12) Мда уж :)
16 a_alenkin
 
30.03.16
14:00
(9) передаются фото на сервер - а мобильное приложение не может нормально сфотографировать со вспышкой и автофокусом - и не только
17 a_alenkin
 
30.03.16
14:01
//Заголовки авторизации
        PropertyInfo Auth = new PropertyInfo();
        Auth.setName("Authorization");
        Auth.setValue(buffer.toString());//"Basic " + org.kobjects.base64.Base64.encode("User:220757".getBytes()));
        request.addProperty(Auth);
        PropertyInfo p3 = new PropertyInfo();
        p3.setName("arg");
        p3.setValue("Соединение успешно".toString());
        request.addProperty(p3);

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


попытался вот так вот сделать авторизацию - все равно ошибка 401
18 zladenuw
 
30.03.16
14:09
19 MaXpaT
 
30.03.16
14:11
(0) вечером если не забуду, до дома доберусь - пришлю кусок рабочего кода из Android-Studio
20 Masquerade
 
30.03.16
14:13
(16)
Мммм...

Ты уверен??
21 a_alenkin
 
30.03.16
15:25
(18)
"Для удобства работы с веб-сервисом создадим класс HttpTransportBasicAuthSE, который будет работать подобно объекту WSОпределения в 1С - определять подключение к сервису с указанием пути к веб-сервису, имени пользователя, пароля и таймаутом подключения. Также в кллассе определен заголовок XML с указанием версии и кодировки. Данный класс я нашел на просторах интернета"

а вот где бы найти этот класс((((
22 arsik
 
гуру
31.03.16
11:14
(16) Вообще то в 8.3.8 появился новый метод ЗапускПриложенияМобильногоУстройства. Он позволяет пользоваться штатным приложением для фото.
http://catalog.mista.ru/public/301851/
23 arsik
 
гуру
31.03.16
11:17
(22) Вру. Этот метод был и раньше.