Как правильно обрабатывать anyType() из веб-службы?

Моя служба обычно возвращает что-то вроде:

anyType{Acc1=96628; Code=E; OnArr=false; CanArr=true; Username=ANDERSON;}

который я затем подталкиваю к своему объекту с помощью

details.Username = response.getProperty("Username").toString();

и это работает именно так, как мне нужно, пока я не получу ответ, который не имеет значения для имени пользователя, который возвращается следующим образом:

anyType{Acc1=96628; Code=E; OnArr=false; CanArr=true; Username=anyType{};}

Когда я позже вызываю details.Username, он возвращает «anyType {}» (в виде строки), а не возвращает пустую строку.

Можете ли вы сказать мне, что мне не хватает?

Для ясности, как я попал в response...

SoapObject request = new SoapObject(NAMESPACE, methodName);

PropertyInfo propertyInfo = new PropertyInfo();
propertyInfo.setName("Details");
propertyInfo.setValue(details);
propertyInfo.setType(details.getClass());
request.addProperty(propertyInfo);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

envelope.dotNet = true;
envelope.implicitTypes = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "Details", Details.class);

HttpTransportSE httpTransportSE = new HttpTransportSE(URL);
httpTransportSE.call(NAMESPACE + methodName, envelope);

SoapObject response = (SoapObject) envelope.getResponse();

[РЕДАКТИРОВАТЬ]

Следующее, кажется, сделало свое дело; хотя я не совсем уверен, почему и правильный ли это подход.

details.Username = response.getPrimitivePropertyAsString("Username");

всегда ли говорится anyType{}, когда нет реальной ценности?

isaace 06.03.2019 15:38

Да, даже когда я изменил службу, чтобы она возвращала пустую строку (а не NULL), она все равно возвращается.

Sean 06.03.2019 15:42

Можете ли вы указать, что такое тип класса response

Van_Cleff 06.03.2019 15:45

ответ - это SoapObject (расширил OP, чтобы включить дополнительные сведения о том, как я получаю ответ

Sean 06.03.2019 15:49

@isaace - response.getPrimitivePropertyAsString("Username"), кажется, исправил это

Sean 06.03.2019 16:41
That's great!
isaace 06.03.2019 16:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
6
84
1

Ответы 1

Кажется, это решается с помощью

details.Username = response.getPrimitivePropertyAsString("Username");

Поковырявшись в SoapObject.java, я тоже вижу в этом смысл

/**
 * Get the toString value of a property without chance of throwing an
 * exception. An object can be provided to this method; if the property is
 * not found, this object's string representation will be returned.
 *
 * @param defaultThing
 *            toString of the object to return if the property is not found
 * @return the property toString if it exists; defaultThing toString if the
 *         property does not exist, if the defaultThing is null #EMPTY_STRING
 *         is returned
 */

public String getPropertySafelyAsString(final String namespace,final String name,
                                        final Object defaultThing) {
    Integer i = propertyIndex(namespace,name);
    if (i != null) {
        Object property = getProperty(i.intValue());
        if (property != null) {
            return property.toString();
        } else {
            return EMPTY_STRING;
        }
    } else {
        if (defaultThing != null) {
            return defaultThing.toString();
        } else {
            return EMPTY_STRING;
        }
    }
}

Другие вопросы по теме