Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Axis клиент и сложные типы


Автор: smbd 15.2.2006, 10:35
Есть у меня веб-сервис. Живет в JBoss'е. Возвращает сложный тип PersonInfo: несколько полей, в том числе массивы.

Я не могу в клиенте получить (десериализовать) возвращаемое значение. На сервере всё отрабатывает. А на клиенте - нет.

Делаю так:

Код

// ...
        call.registerTypeMapping( PersonInfo.class ,
                                      new QName( "urn:WebServiceSpeedTest" , "PersonInfo" ) ,
                                      org.apache.axis.encoding.ser.BeanSerializerFactory.class ,
                                      org.apache.axis.encoding.ser.BeanDeserializerFactory.class ,
                                      true ) ;
        call.addParameter( new QName( "in0" ) , new QName( "long" ) , ParameterMode.IN );
        call.setReturnType( new QName( "urn:WebServiceSpeedTest" , "PersonInfo" ) ) ;
// ...
        returned = call.invoke( params ) ;


Получается ошибка
- Could not convert org.apache.axis.encoding.ser.ArrayDeserializer$ArrayListExtension to bean field 'documentIDs', type [Lmy.package.DocumentID;
- Exception:
java.lang.ArrayStoreException: java.lang.String

Если убрать registerTypeMapping
- Exception:
org.xml.sax.SAXException: Deserializing parameter 'getFullPersonReturn': could not find deserializer for type {urn:WebServiceSpeedTest}PersonInfo

Если убрать addParameter и setReturnType (или и их, и registerTypeMapping), то будет
- Exception:
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.

Что ещё интересно: .NET клиент всё спокойно отрабатывает.

Ещё я нашёл такую ссылочку http://entirex.forums.softwareag.com/viewtopic.php?p=1534&sid=6a9ca65e976cbf56676457747a5455af
Там похожая проблема, но товарищ просто галочки ставит где-то (см. последний пост). Может, можно и где-то в объекте Call что-то включить??

Надеюсь, кто-нибудь с этим встречался. А то уже smile

Автор: Slanix 15.2.2006, 12:10
А что мешает получить WSDL и сгенерировать stub (WSDL2Java).
И потом обращаться к объекту так, как-будто всё локально?
см. доку по AXIS.

Автор: smbd 15.2.2006, 13:11
Не хочется много классов.

Кстати, сама проблема случайно решилась. WSDL делается не literal, как было, а default.

Интересно, а что подставляется вместо default?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)