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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RPC клиент и NetBeans 
:(
    Опции темы
korob2001
Дата 18.6.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Привет всем!

Мне необходимо написать клиента на Java для SOAP сервиса. Желательно сделать это в NetBeans, так как на изучение другой IDE вмремени нет, по крайней мере пока. 

Пытался погуглить, но что-то ничего вразумительного так и не нашёл.

Опишу пошагово мои действия:

1. Устанавливаю в NetBeans 6.5 плугин JAX-RPC.
2. Создаю новый проект.
3. Жму правок кнопкой по узлу проекта -> New -> Web Service Client
     3.1 В открывшемся диалоге, выбираю WSDL url и указываю его, если кому интересно вот он: http://www.kapaza.com/soap/webservice_1_0.cfc?wsdl
     3.2 В Client style выбираю JAX-RPC Style.
     3.3 В Package указываю пакет com.kapaza
     3.4 Жму кнопку Finish.

После добавляю в проект класс KapazaService импортирую в него пакет com.kapaza.*, во время разработки мне видны открытые члены сервиса и казалось бы жизнь наладилась, но как говорится: хорошее не длится долго. :( Когда запускаю программу то получаю такой OUTPUT:
Цитата

run:
18-jun-2009 12:15:17 ServiceKapaza getCats
SEVERE: null
java.rmi.RemoteException: Runtime exception; nested exception is: 
        deserialization error: unexpected XML reader state. expected: END but found: START: ResultMeta
        at com.sun.xml.rpc.client.StreamingSender._handleRuntimeExceptionInSend(StreamingSender.java:331)
        at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:313)
        at com.kapaza.PortTypes_Stub.getCategories(PortTypes_Stub.java:906)
        at ServiceKapaza.getCats(ServiceKapaza.java:31)
        at ServiceKapaza.main(ServiceKapaza.java:15)
Caused by: deserialization error: unexpected XML reader state. expected: END but found: START: ResultMeta
        at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:233)
        at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:155)
        at com.kapaza.PortTypes_GetCategories_ResponseStruct2_SOAPSerializer.doDeserialize(PortTypes_GetCategories_ResponseStruct2_SOAPSerializer.java:43)
        at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:192)
        at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:155)
        at com.kapaza.PortTypes_Stub._deserialize_GetCategories(PortTypes_Stub.java:2564)
        at com.kapaza.PortTypes_Stub._readFirstBodyElement(PortTypes_Stub.java:2303)
        at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:228)
        ... 3 more
BUILD SUCCESSFUL (total time: 2 seconds)

Собственно в файле ServiceKapaza я из метода main вызываю метод getCats(), который уже непосредственно вызывает метод getCategories(com.kapaza.ContentSupplier supplier, com.kapaza.Category category), т.е. для начала я хочу хотя бы получить список имеющихся категорий этого сервиса.

Вот код:
Код

import com.kapaza.*;
import javax.xml.rpc.*;

public class ServiceKapaza {
    public static void main(String[] args) {
        ServiceKapaza kapaza = new ServiceKapaza();

        ContentSupplier supplier = new ContentSupplier();
        supplier.setUsername("login");
        supplier.setPassword("password");

        Category[] cats = kapaza.getCats(supplier, "nl", "be");
        if (cats != null) {
            for (Category cat : cats) {
                System.out.println("Category: " + cat.getCategory());
            }
        }
    }

    public Category[] getCats(ContentSupplier supplier, String lang, String country) {
        Category cat = new Category();
        cat.setCountryCode(country);
        cat.setLanguageCode(lang);

        try {
            KapazaWebservice kapazaWebservice = new KapazaWebservice_Impl();
            PortTypes servicePort = kapazaWebservice.getServicePort();
            GetCategoriesRespond respond = servicePort.getCategories(supplier, cat);
            ResultMeta meta = respond.getResultMeta();
            if (meta.getResult().equals("0")) { // "0" - Error       "1" - Success
                System.err.println("Error found:\n" + meta.getErrormessage() + "\n\nError details: " + meta.getErrordetail());
                System.exit(0);
            } else {
                return respond.getCategories();
            }
        } catch(javax.xml.rpc.ServiceException ex) {
            java.util.logging.Logger.getLogger(KapazaWebservice.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch(java.rmi.RemoteException ex) {
            java.util.logging.Logger.getLogger(KapazaWebservice.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch(Exception ex) {
            java.util.logging.Logger.getLogger(KapazaWebservice.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        return null;
    }
}

Можно было бы всё списать на сервис, но около года назад мне нужно было написать, для этого же сервиса, такого же клиента и нужно было это сделать на C#, что я собственно и сделал, тот клиент работает и по сей день (WSDL тот же). Теперь мне нужно сделать тоже самое, но на Java, да бы всё это работало под линуксом.

Вобщем я примерно по StackTrace понимаю в чём проблема, но не знаю, как её решить.  smile  Может кто сталкивался с подобным?

Заранее благодарен.

Это сообщение отредактировал(а) korob2001 - 19.6.2009, 05:48


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 22.6.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Задачу всё же решил, правда в IDE Eclipse J2EE, в ней без проблем всё заработало. Теперь правда возникли вопросы по Eclipse, но это в другом топике.


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

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

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


 




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


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

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