Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача массива посредством SOAP 
V
    Опции темы
nornad
Дата 16.3.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



В общем, есть SOAP-сервис (мой). До сих пор его функции были достаточно простыми и использовали только встроенные типы. Теперь же появилась задача сделать функцию, которой будет передаваться одним из параметров массив строк. С горем пополам я всё же нашёл, как объявить тип "массив строк". А вот как его из жабы передать или в жабе принять - ума не приложу.  smile 
Кто знает, поделитесь крупицей мудрости. smile 

P.S. Извращения типа конвертирования массива во что-то страшное с последующей конвертацией обратно не предлагать - требуется, чтобы SOAP-сервис сам оперировал параметром как массивом. Типа, дали ему как-то массив, он его сам как-то пихнул в сообщение, а потом (на другой стороне) сам же вытащил и выдал в качестве нормального массива.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
nornad
Дата 16.3.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



Я тут подумал, что не помешает код, с помощью которого я сейчас из жабы отправляю запрос и получаю ответ. Вот он:
Код

    public static Node getXmlFromServer( String serverURL, String serverMethod, String[] parameters ) {
        try {
            SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
            SOAPMessage message = MessageFactory.newInstance().createMessage();
            SOAPBody body = message.getSOAPPart().getEnvelope().getBody();
            SOAPFactory sf = SOAPFactory.newInstance();

            Name bodyName = sf.createName( serverMethod );
            SOAPBodyElement bodyElement = body.addBodyElement( bodyName );

            for ( int i = 0; i < parameters.length; i += 2 ) {
                String parameter = parameters[i];
                String value = parameters[i + 1];
                Name name = sf.createName( parameter );
                SOAPElement isbn = bodyElement.addChildElement( name );
                isbn.addTextNode( value );
            }

            URL endpoint = new URL( serverURL );
            SOAPMessage response = connection.call( message, endpoint );
            connection.close();

            Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
            return doc.getDocumentElement().getFirstChild();
        }
        catch ( Exception e ) {
            System.out.println( "URL => " + serverURL );
            System.out.println( "method => " + serverMethod );
            for( int i = 0; i < parameters.length; i += 2 ) {
                System.out.println("param '" + parameters[i] + "' => " + parameters[i+1]);
            }
            e.printStackTrace();
            if ( e.getMessage() != null )
                System.out.println( e.getMessage() );
            return null;
        }
    }

В parameters по чётным индексам лежат имена параметров, а по нечётным - их значения.
Вытаскивать массив, понятное дело, придётся в этом случае из хмла (кстати, может, кто в курсе, как мне получать штатными средствами не хмл на выходе, а сразу строку, которую передаёт сервер?). А вот в каком виде этот массив ему в сообщение запихнуть?..


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
nornad
Дата 26.4.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: нет
Всего: 31



Как в жабе принять - до сих пор нормально не выяснил (основную задачу решил, а на исследования времени не хватает).
А вот как массив из жабы передать - это оказалось совсем несложно.
Нужно лишь при построении отправляемого ХМЛа в параметр-массив не просто записать значение, а сделать так:
создав элемент параметра-массива, создаём внутри него для каждого значения массива элемент "item", который внутри содержит значение (TextNode).


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.