|
Модераторы: LSD, AntonSaburov |
|
kkorsakoff |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 6 Всего: 14 |
Да простят меня за оверквотинг, скопировал целиком сообщение Stampede т.к. оно было давно и полностью отражает мои мысли в последнее время Столкнулся с такой же проблемой: да все круто, написал аннотацию WebService (кстати неужели сложно было сделать чтобы имя параметров автоматически передавались в генерируемые файлы без добавок типа @WebParam(name = "id")long id), запустил пару команд, бац и готов клиент. Но было очень обидно увидеть вместо своих родных VO, обтесанных напильником, увидеть страшные сгенерированные подобия Нафиг тогда оно нужно? Вопрос: не нашлось ли какого решения за это время? Предложу свой ход мыслей. Вроде выкрутился, но не известно какие тут еще подводные камни. Сначала попытался копировать проперти при помощи BeanUtils из apache commons beans, оно позволяет скопировать одноименные проперти из одного объекта в другой - с простыми VO можно и так работать, получится что-то вроде
Но если VO содержит не только простые типы, такой фокус не прокатит. BeanUtils ругнется что-то про несоответствие классов. Понятно, что прийдется самому сериализовать объект на стороне веб службы и доставать из строки, как это уже сделал Stampede. Разница лишь в том, что я воспользовался не библиотекой, а стандартными средствами, а именно - JAXB. Тогда сериализация будет выглядеть как
А десериализация
Ничего принципиально нового по сути я конечно не предложил, но мало ли кому интересно, да и апнуть тему Добавлено через 1 минуту и 47 секунд P.S. Сам VO надо аннотировать @XmlRootElement. Все параметры, связи и прочее аннотировать не обязательно, он их сам подхватит. |
||||||||
|
|||||||||
kkorsakoff |
|
||||||||||||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 6 Всего: 14 |
Ура, проблема кажется решена. Выбросить стандартный генератор клиентского кода
Не уверен, может что-то лишнее сделано, но точно знаю, что именно так работает Имеем веб-сервис с методом
Customer - обычный VO. Далее создаем клиентский код как обычно при помощи wsimport. Можно конечно создать все необходимые классы вручную, но так удобнее. Из всего сгенерированного хлама нам нужно: Собственно клиент (аннотированный @WebServiceClient). Он будет иметь метод
Смотрим в CustomerWS - он нам тоже нужен. На основе его во время рантайм генерируется прокси. Видим, что он имеет метод
Ага, видим, что className указывают на парочку сгенерированных классов. Как вы уже догадались, это и есть то, во что сериализатор/десериализатор превращает запросы и ответы. Это обычные классы, аннотированные @XmlType. Запрос оставляем как есть, у нас там VO не используются, так что вполне сойдет сгенерированный. Открываем ответ, т.е. FindByIdResponse.
Т.е. ответ это простой класс, содержащий в себе <return></return>, в котором и лежит интересующий нас VO wsimport хочет мапить его на сгенерированный им Customer, но мы меняем на наш
Удаляем ненужные нам VO (главное не удалить по запаре снегерированные Request и Response объекты), удаляем ObjectFactory (не очень понял пока зачем она нужна) и клиент готов к работе
Кстати Exception я не стал мапить, а надо бы. Пока что на клиенте получаю сгенерированный класс Это сообщение отредактировал(а) kkorsakoff - 22.4.2008, 19:59 |
||||||||||||
|
|||||||||||||
Restavrator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2007 Репутация: 1 Всего: 1 |
Что-то я читаю ветку перечтываю и все никак не могу понять как мне решить следующую проблему: Есть приложение которое взаимодействует с внешней системой. Взаимодействие сейчас происходит либо через EJB либо через веб сервисы. В будущем возможно появится что-то еще. Похожую ситуацию когда то описывал maximb: "Теперь клиент: (моя реализация) Клиент конектится по local EJB, если не получается то коннектится по remote EJB, если не получается конектится к WEB - сервису. Все интерфейсы EJB и WEB - сервис реализуют один интерфейс." При взаимодействии через EJB используются JabaBean объекты внешней системы. При взаимодействии черех веб-сервисы Axis генерирует собственные бины, но так как эти бины уже существуют их приходится переносить в другой пакет. Из-за чего соответсвенно очень сильно разрастается объем кода. Да и не самое приятное занятие работать с параллельными бинами в разных местах. Вообщем вопрос, можно ли его заставить использовать бины внешней системы, при условии что они всегда будут нам доступны? Или может есть какой нибудь вариант для оптимизации этого процесса? Внешнюю систему изменять нет возможности, т.о. вариант с сериализацией в строку и обратно не поможет. |
|||
|
||||
kkorsakoff |
|
|||
Опытный Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 6 Всего: 14 |
Через Axis неизвестно, но при генерировании клиентских классов при помощи wsimport можно.
|
|||
|
||||
christy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 16.7.2008 Репутация: нет Всего: нет |
Не знаю, актуально это еще или нет, но хочу предложить еще одно решение проблемы, описанной kkorsakoff.
Допустим надо, чтобы вс вернул тип List (здесб может быть любой ваш тип). Создаем вс: import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.WebParam; import javax.jws.soap.SOAPBinding; import javax.xml.ws.Holder; @WebService @SOAPBinding(style = SOAPBinding.Style.DOCUMENT) public class TestDiffFormats { @WebMethod public void getList(@WebParam(name="result", mode=WebParam.Mode.INOUT)Holder<java.util.List<String>> result){ result.value.add("SS"); } } генерим стандартные заглушки как обычно с помощью wsimport. Пишем клиента: public class FormatsTester { public String getRes() { String res = ""; TestDiffFormatsService testDiffFormatsService = new TestDiffFormatsService(); TestDiffFormats port = testDiffFormatsService.getTestDiffFormatsPort(); javax.xml.ws.Holder<java.util.List<String>> h = new javax.xml.ws.Holder<java.util.List<String>>(new ArrayList<String>()); port.getList(h); System.out.println(" = " + h.value.size()); // return res; } } |
|||
|
||||
chief39 |
|
|||
карманная тигра Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 11 Всего: 77 |
Помню книжечку 1994 года(кажется) в которой подробно описывалось как, почему и когда корба заполонит мир. Уже сейчас мы должны были юзать только объектные браузеры, всё было бы обёрнуто корбой и мы наслаждались бы кобольными движками 80-х, хитро сныканными под толстым слоем корбы. Прям один в один:
И что? И ничё. Вживую работал только с одной системой, представляющей из себя сипипи реализацию и корба-связки. Саоме интересное - корба связывала только сипипи с сипипи. Светлой мысли прикрутить туда фортран или кобол не возникло. Наверное потому что очень мало универсального кода. Его практически нету. Давеча переписали старую мейнфреймовскую систему на жаве. Даже в мыслях "а вот интегрировать бы...". Самые простые, универсальные и вечные штуки - это косинус/синус/калькулятор/календарь. Но их переписывают в первую очередь ) Все остальные проще написать заново, чем трахаться, интегрируя. Надеюсь все давно поняли что "вам не надо знать на чём и как написано, вам только вот так надо сделать - и сразу всё закрутится" - звиздёж и провокация? Что когда интегрируешь две большие "чего-то там", надо не одну неделю провести "заглядывая к соседям". А если представить себе систему кобол+дотнет+джава+пхп.... специалистов, необходимых для этого... ужас эйчара и ПМа... провалы в понимании между разными людьми которые в разных мирах живут... )) Лучше уж пяток взаимозаменяемых джавистов, минус несколько тезхнологий, минус интеграцию, минус провалы типа "кобольщик закончился..." Подразумеваю что все давно убедились что слабосвзяанных систем действительно мало. Очень мало. ЗЫ: Коту спасибо за пример, полистал. Это сообщение отредактировал(а) chief39 - 22.7.2008, 16:07 -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
Akvel |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Разбираюсь тут с вс, использую Eclipce+axis2. И возникла такая проблема, что простые типы приходят к клиенту нормально, а когда начинаю передавать свой класс то он не доходит до клиента.
Может кто подскажет. Передаваемый класс
Класс веб-сервиса
Класс клиента
MyWSOwnStub.MyOwnClass и MyWSOwnStub автосгенеренные Eclipceой классы |
||||||
|
|||||||
Akvel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Кто пробовал подключаться к веб сервисам из апплетов?
Выдает ошибку connection refuse |
|||
|
||||
batigoal |
|
|||
Нелетучий Мыш Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
возможно, дело в том, что апплет не подписан - в этом случае он не имеет прав на коннект куда-нибудь, кроме как к тому хосту, откуда он был загружен.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
Akvel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Ага, спасибо помогло. Подписанным апплетом варварски снес SecurityManager и все заработало Это сообщение отредактировал(а) Akvel - 18.9.2008, 06:42 |
|||
|
||||
mullih |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 75 Регистрация: 19.12.2006 Репутация: нет Всего: 2 |
Доброго времени суток С вебом никогда отношения не имел. Может кто по подробнее объяснит 3-ий пункт -- Деплоим сервис (используя Tomcat, если sever к этому пункту относится). Что это такое и как делается. Заранее спасибо Это сообщение отредактировал(а) mullih - 18.9.2008, 12:58 |
||||||
|
|||||||
Akvel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 28.8.2007 Репутация: нет Всего: нет |
Кто делал веб-сервиси с помощью Axis2?
Все генерю утилитами для Eclipse - Axis2 Codegen Wizard Plug-in и Axis2 Service Maker Проблемы с пересылкой своих Exception при ошибках в методах Клиенту приходит не мой Exception, а следующее
уже дней 5 копаю |
|||
|
||||
Nikola661 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 82 Регистрация: 14.5.2007 Репутация: 1 Всего: 1 |
Вычитал, что можно использовать JAXB2.0. Но не могу понять как его установить и юзать.
|
|||
|
||||
SerialKiller9 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
Здравствуйте!
Мне вэб-сервисы уже весь мозг расплавили, помогите проблему решить. Сделал вэб-сервис на яве через связку Eclipse + JAX WS 2.1.5, там в принципе тривиально все создаешь только класс вэб-службы с аннотациями, опубликовал и все- вэб-служба работает. Сделал маленькое приложение в Visual Studio на С# абсолютно без проблем подключился к вэб-службе которую написал указав только URL где wsdl-ка лежит, потестил методы все классно. Начал делать клиентское приложение на яве и не получается... собственно в этом и проблема, привидите пожалста кусок кода в котором подключаетесь к вэб-службе только без всяких серверов приложений, а используя именно связку Eclipse с Jax WS )) надеюсь ктонить понял мой сумбурный пост , вообещм жду помощи |
|||
|
||||
Maverick |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: 2 Всего: 10 |
Господа, прошу знающего человека раписать каким образом можно рабоать со сложным пользовательским параметром в вебметоде вебсервиса...
Использую JAXWS... Проблема в следующем... Имю вот тако метод на сервере...
Сложность представляет собой параметр fields... Это обычный pojo класс, где все поля - банальные стринги... При попытке восопльзоваться им на клиенте имею следующее
То есть заглушка вместо нормальных строных стрингов мутит какие то жаксб элементы... как от этого избавится толково?? Дело в аннотациях данного класса? Или вебсервиса?? |
||||
|
|||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |