![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| x4444 |
|
||||||||||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 7.2.2006 Репутация: 1 Всего: 1 |
Создание Веб-сервиса с помошью Axis2
Axis2 является следующим развитием проeкта Axis, Axis2 стал еще быстрее и что важно у него появилась возможность легко обмениваться сложными типами. Информации не так много, поэтому хочу поделится с Вами своим небольшим опытом. 1.Инсталяция Инсталляция Axis2 включает два файла axis2.war – веб контейнер axis2-std-<version>-bin.zip Важное замечание --------------------------------------------------------------- странно, но файлы представленные на сайте Axis2 под версией 1.0 не вполне работоспособные, при их использовании у меня выдавался эксепшн data binding error. Я попробовал взять последный ночной билд – и с ним все заработало (снапшот от 29 июня 2006г) http://people.apache.org/dist/axis2/nightly/ --------------------------------------------------------------- Необходимо: - Разжать axis2-std-<version>-bin.zip и положить в любую папку (Например C:/libs/axis2) - Добавить эту папку в переменную окружения AXIS2_HOME - Добавить папку axis2/bin в переменную окружения PATH - Положить axis2.war в папку для war файлов на сервере приложения (например $TOMCAT_HOME$/webapps) - Проверить, что приложение работает (http://localhost:8080/axis2). 2. Создание серверной части 2.1 Создание заготовки Для этого необходимо создать заготовку класса на основе которого будет генериться вебсервис для демонстрации возможностей Axis2 будем обмениваться сложными типами (я придумал собственный класс License) для этого надо создать пакет, например "x4444", в нем: создать класс License содержащий два поля int id и String name и геттеры и сеттеры для них. И создать класс LicDB – содержащий массив объектов License и геттер, возвращающий один объект по его индексу. Код: License.java
Код: LicDB.java
откомпилируем классы. 2.2 Создадим WSDL на основе класса LicDB $ Java2WSDL -cn x4444.LicDB -cp . -sn LicDB получим файл LicDB.wsdl следующго содержания
2.3 Создание скелета вебсервиса и другие вспомогательных файлов для этого необходимо выполнить команду $ WSDL2Java -uri LicDB.wsdl -ss -sd -d xmlbeans -o out сгенерированные классы появятся в папке out (там будет папка resources, папка src и файл build.xml) 2.4. Наполнение скелета для того чтобы веб-сервис работал необходимо наполнить скелет вебсервиса файл src/x4444/LicDBSkeleton.java
Создание вебсервиса закончено. 2.5 Сборка и упаковка для этого просто запустим готовый ant сценарий сборки из папки out (там где файл build.xml) $ ant получим папку build, в ней файл lib\LicDB.aar в архив входят - сгенеренные классы пакета x4444 - папка schemaorg_apache_xmlbeans и все ее содержимое - папка META-INF с файлами services.xml и LicDB.wsdl 2.6 Деплоймент Необходимо зайти на страницу http://localhost:8080/axis2 потом в раздел Administration логин: admin пароль: axis2 Выбрать Upload Service – выбрать Service Archive файл LicDB.aar – Upload через несколько секунд архив распакуется и сервис активируется. Проверить что сервис поднялся можно здесь же в разделе Avaliable Services - имя сервиса LicDB wsdl сервиса тоже можнопосмотреть нажав на заглание сервиса LicDB http://localhost:8080/axis2/services/LicDB?wsdl 3. Клиентская часть 3.1 Генерация стаба Для этого необходимо выполнить комманду $ WSDL2Java -uri LicDB.wsdl -d xmlbeans -o client В папке "сlient" появятся сгенерированные папки и файлы (resources, src, build xml); Для теста необходимо создать новый класс Test (можно прям без пакета) чтобы протестировать работоспособность вебсервиса Test.java
Выполнять наверное лучше под какой-либо средой (напрмер Eclipse). т.к. иначе придестся прописывать jar'ы axis2 в CLASSPATH, а в Eclipse можно быстренько создать User Library – Axis2 и включить в нее все jar'ы из папки $AXIS2_HOME$/lib и включить эту User Library в проект 4. Результат выполнения: 0 A ---------------------------------------------------- 1 B ---------------------------------------------------- -1 id is out of range ---------------------------------------------------- * Впринципе наполнение скелета, жарку, создание клиентского кода можно делать в какой-либо среде (Я делал в эклипсе). помимо пользовательской библиотеки Axis2 в проект необходимо включать Class Folder - resourses т.о. чтобы schemaorg_apache_xmlbeans и все что под ним было видно при билде. официальная документация - http://ws.apache.org/axis2/1_0/userguide.html |
||||||||||
|
|||||||||||
| seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
была ошибка (забыл подключить schemaorg_apache_xmlbeans...)
Это сообщение отредактировал(а) seth - 12.12.2006, 17:55 |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Статья добавлена в FAQ.
seth, спасибо. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| seth |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Что то не очень удобно стало использовать axis2 по сравнению с axis - появляется множество ненужных интерфейсов (
Зачем они нужны?? когда в axis
либо
Что как мне кажется намного удобнее и проще.... Но вроде как axis2 быстрее... Может и в axis2 можно так по простому использовать сервисы? |
||||||
|
|||||||
| seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Ладно пока думают над предидущим вопросом спрошу еще 1:
из каких языков можно использовать веб сервисы на axis2?? |
|||
|
||||
| rrrookie |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.6.2006 Где: Rīga Репутация: нет Всего: нет |
ОченЬ толковое описане - супер!
Но когда попробовал повторритЬ и правда при запуске система ругается на schemaorg_apache_xmlbeans Кто нитЬ обяснит что значит "подключить schemaorg_apache_xmlbeans" ? |
|||
|
||||
| seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Ну добавить в проект (я помоему просто скопировал в папку с сырцами) |
|||
|
||||
| rrrookie |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.6.2006 Где: Rīga Репутация: нет Всего: нет |
Хмммм....
seth, ты не мог бы прислатЬ как выглядит твой проект? в каком месте лежит schemaorg_apache_xmlbeans?? у меня -> <project_root>/resources/schemaorg_apache_xmlbeans ??? И при етом вылетает вот такой вот красавец -> Exception in thread main java.lang.ExceptionInInitializerError: java.lang.RuntimeException at lv.mebius.ws.xsd.GetPersonByNameDocument$GetPersonByName$Factory.newInstance(GetPersonByNameDocument.java:85) at lv.mebius.ws.Client.main(Client.java:29) Caused by: java.lang.RuntimeException: Cannot load SchemaTypeSystem. Unable to load class with name schemaorg_apache_xmlbeans.system.s866A7980FB54643CD10F1B371397DA53.TypeSystemHolder. Make sure the generated binary files are on the classpath. at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:783) at lv.mebius.ws.xsd.GetPersonByNameDocument$GetPersonByName.<clinit>(GetPersonByNameDocument.java:44) ... 2 more Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.s866A7980FB54643CD10F1B371397DA53.TypeSystemHolder at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:769) ... 3 more |
|||
|
||||
| seth |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 4.6.2006 Репутация: 1 Всего: 1 |
Ну если использовать идею то он у меня лежит в <project-root>/schemaorg_apache_xmlbeans
|
|||
|
||||
| rrrookie |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.6.2006 Где: Rīga Репутация: нет Всего: нет |
Уверен?
а не под <project-root>/src/schemaorg_apache_xmlbeans ? |
|||
|
||||
| rrrookie |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 21.6.2006 Где: Rīga Репутация: нет Всего: нет |
Мне интересно, у кому нитЬ удалосЬ запуститЬ описанного выше киента?
у меня например вот такой эксепшн в Test.java в етом вот месте ->
Exception in thread main java.lang.ExceptionInInitializerError: java.lang.RuntimeException at x4444.xsd.GetLicenseDocument$GetLicense$Factory.newInstance(GetLicenseDocument.java:85) at Test.main(Test.java:11) Caused by: java.lang.RuntimeException: Cannot load SchemaTypeSystem. Unable to load class with name schemaorg_apache_xmlbeans.system.sE4765D088B0EC9D7783B13B6B493A636.TypeSystemHolder. Make sure the generated binary files are on the classpath. at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:783) at x4444.xsd.GetLicenseDocument$GetLicense.<clinit>(GetLicenseDocument.java:44) ... 2 more Caused by: java.lang.ClassNotFoundException: schemaorg_apache_xmlbeans.system.sE4765D088B0EC9D7783B13B6B493A636.TypeSystemHolder at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.apache.xmlbeans.XmlBeans.typeSystemForClassLoader(XmlBeans.java:769) ... 3 more Помогите плз Это сообщение отредактировал(а) rrrookie - 27.12.2006, 11:58 |
|||
|
||||
| aburkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2007 Репутация: нет Всего: нет |
вот какая проблема.
есть класс (используется axis2 и юзать надо jibx)
при дальнейшей его реализиции в веб-сервис и написание клиента, трабл в следующем: после вызова update(String symbol, Double price) клиентом, затем getPrice(String symbol), никаких изменений нету =( во многих местах написано, что нужно использовать setManageSession(true); у меня так и не получилось =( кто с этим сталкивался, напишите как решили проблему, плз =) |
|||
|
||||
| aburkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2007 Репутация: нет Всего: нет |
||||
|
||||
| aburkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2007 Репутация: нет Всего: нет |
решение проблемы тут:
http://ws.apache.org/axis2/1_2/migration.html#transports Это сообщение отредактировал(а) aburkin - 18.7.2007, 10:49 |
|||
|
||||
| aburkin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 11.7.2007 Репутация: нет Всего: нет |
не, нужно в файле service.xml отредактировать строчку (добивить то, что жирным)
<service name="MathService" scope="application"> |
|||
|
||||
![]()
|
| Правила форума "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. |