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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Веб сервис на Java 
:(
    Опции темы
Domestic Cat
Дата 11.2.2005, 20:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



 Веб сервис на Java

Многие книжки по .NET, особенно для начинающих, содержат главу по веб сервисам. Автор с многозначительным видом рассказывает как это хорошо; и далее с ловкостью фокусника создает веб сервис в течение одной минуты - мол, выбираем асп.нет веб сервис, добавляем метод с аттрибутом и вуаля ! Круто! Микрософть рулез!
Некоторое время Java отставала. Был создал Apache SOAP, штука не очень удобная, так сказать. Недавно я так и не смог установить Xerces в Tomcat 5, необходимый для работы с апачевским SOAP. Вроде как tomcat должен пользовать именно xerces, а не свой парсер, потому он должен грузиться первее; как это проделать в tomcat 3 я вроде знаю, а вот с 5 непонятно. Пытался я недолго.
Да неважно. Т.к. есть еще наш ответ .NET - Apache Axis. Вот о нем пойдет разговор.
Мы, буквально за 1 минуту создадим веб сервис, но первоначально поговорим о том, что для этого нужно.

 Инсталляция

Все инструкции по инсталяции даны для UNIX (bsh шелл).

1. Нам нужен Томкет. У меня стоит 5.0.19. Скачать можно здесь:
http://jakarta.apache.org/site/binindex.cgi#tomcat

2. Инсталлируем Томкет.
а. Разархивируем архив, скажем, в папку tomcat5.
б. Устанавливаем привилегии 777 для файлов startup.sh, shutdown.sh.
в. Прописываем пути
$> export CATALINA_HOME=/Users/cat/tomcat5/
$> export JAVA_HOME=/Library/Java/Home
Естественно, что пути должны быть свои.

3. Тянем Axis.
http://ws.apache.org/axis/releases.html
Я использую 1.2RC2.

4. Устанавливаем его: переносим папку axis-1_2RC2/webapps/axis в tomcat5/webapps

5. Тянем xerces:
http://xml.apache.org/xerces2-j/download.cgi
У меня Xerces-J-bin.1.4.4

6. Переносим файл Xerces-J-bin.1.4.4/xerces.jar в tomcat5/webapps/axis/WEB-INF/lib

7. Прописываем CLASSPATH:
$> export C=/Users/cat/tomcat5/webapps/axis/WEB-INF/lib
$> export CLASSPATH=$C/axis.jar:$C/commons-logging.jar:$C/axis-ant.jar:$C/commons-discovery.jar:
$C/jaxrpc.jar:$C/log4j-1.2.8.jar:$C/saaj.jar:$C/wsdl4j.jar:$C/xerces.jar

8. Запускаем Томкет:
$> $CATALINA_HOME/bin/startup.sh

9. Если все работает правильно, появится следующее:
Using CATALINA_BASE: /Users/cat/tomcat5
Using CATALINA_HOME: /Users/cat/tomcat5
Using CATALINA_TMPDIR: /Users/cat/tomcat5/temp
Using JAVA_HOME: /Library/Java/Home/

10. Проверяем Axis: заходим по ссылке
http://localhost:8080/axis/
Мы увидим следующее:
Цитата
Hello! Welcome to Apache-Axis.
What do you want to do today?
.....


 Web Service!

Теперь мы готовы - замеряем время !
Напишем простой сервис, которых будет возвращать разность двух чисел.

1. Создаем класс SubtractionService.java
Код
 
public class SubtractionService
{
   public double subtract(double a, double b)
   {
       return (a - b);
   }
}

Можно его скомпилить - для проверки; а можно и не компилить.

2. Переименовываем его в SubtractionService.jws

3. Кладем файл в tomcat5/webapps/axis/

4. Направляем броузер (желательно IE) на
http://localhost:8080/axis/SubtractionService.jws?wsdl
и видим wsdl:

Код

<?xml version="1.0" encoding="UTF-8" ?>
- <wsdl:definitions targetNamespace="http://localhost:8080/axis/SubtractionService.jws" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/SubtractionService.jws" xmlns:intf="http://localhost:8080/axis/SubtractionService.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <!-- WSDL created by Apache Axis version: 1.2RC2
Built on Nov 16, 2004 (12:19:44 EST)   -->
- <wsdl:message name="SubtractResponse">
 <wsdl:part name="SubtractReturn" type="xsd:double" />
 </wsdl:message>

- <wsdl:message name="SubtractRequest">
 <wsdl:part name="a" type="xsd:double" />
 <wsdl:part name="b" type="xsd:double" />
 </wsdl:message>

- <wsdl:portType name="SubtractionService">
- <wsdl:operation name="Subtract" parameterOrder="a b">
 <wsdl:input message="impl:SubtractRequest" name="SubtractRequest" />
 <wsdl:output message="impl:SubtractResponse" name="SubtractResponse" />
 </wsdl:operation>

 </wsdl:portType>

- <wsdl:binding name="SubtractionServiceSoapBinding" type="impl:SubtractionService">
 <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="Subtract">
 <wsdlsoap:operation soapAction="" />
- <wsdl:input name="SubtractRequest">
 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" />
 </wsdl:input>

- <wsdl:output name="SubtractResponse">
 <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/SubtractionService.jws" use="encoded" />
 </wsdl:output>

 </wsdl:operation>

 </wsdl:binding>

- <wsdl:service name="SubtractionServiceService">
- <wsdl:port binding="impl:SubtractionServiceSoapBinding" name="SubtractionService">
 <wsdlsoap:address location="http://localhost:8080/axis/SubtractionService.jws" />
 </wsdl:port>

 </wsdl:service>

 </wsdl:definitions>

&nbsp;Создаем клиента
Куда ж веб сервис без клиента? На wsdl пускай любуется Билли; а мы напишем комманд лайн приложение. Но прежде всего нужно создать прокси для веб сервиса. Потому как без прокси работать с ним будет не очень приятное занятие.

1. Делаем прокси:
$> java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/SubtractionService.jws?wsdl
В текущей папке появится папка localhost/axis/SubtractionService_jws/
содержащая 4 файла.


2. Прокси готов, создаем клиента.
Код

package localhost.axis.SubtractionService_jws;

public class SClient
{
   public static void main(String[] args) throws Exception
   {
       double result;
       SubtractionServiceServiceLocator sssl = new SubtractionServiceServiceLocator();
       SubtractionService ss = sssl.getSubtractionService();
       result = ss.subtract(45.6, 22.8);
       System.out.println("Result = " + result);
   }
}


SubtractionServiceServiceLocator, SubtractionService -файлы прокси, сгенерированные WSDL2Java.
Заметьте, что клиента для простоты я поместил в пакет localhost.axis.SubtractionService_jws, то есть поместить его надо в localhost/axis/SubtractionService_jws/

3. Компилим клиента и файлы прокси:

$> javac localhost/axis/SubtractionService_jws/*.java

4. Запускаем клиента.
Цитата
Result is 22.8


Последнее замечание: по большому счету, для полного счастья axisу нужны также JAF и javamail.
У меня он ругался пару раз вот так:

Цитата
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.


У нас аттачментов нет, потому без разницы, и так работать будет.


--------------------

PM   Вверх
simanyay
Дата 19.5.2005, 16:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: 2
Всего: 36



Веб сервис, с помощью Burlap, на Java меньше чем за минуту:

Необходимо:
1. Любой application server (Tomcat, Resin, etc.)
2. Библиотека Burlap

Делаем:
// Сторона сервера

1. Создаём интерфейс:
Код

package service;

public interface Basic {
    public String sayHello();
}


2. Создаём сервис:
Код

package service;

import com.caucho.burlap.server.BurlapServlet;

public class Hello extends BurlapServlet implements Basic {
    public String sayHello() {
        return "Hello";
    }
}


3. Деплоим сервис (в моём случае находится тут: http://localhost:8084/hello/Hello)

// Сторона клиента

4. Переносим созданный в 1 интерфейс

5. Создаём клиента:

Код

package org.simanyay.simsql;

import java.net.URL;
import com.caucho.burlap.client.BurlapProxyFactory;

public class Client {
    public static void main(String args[]) throws Exception {
        URL url = new URL("http://localhost:8084/Hello");
        
        BurlapProxyFactory factory = new BurlapProxyFactory();
        Basic basic = (Basic) factory.create(Basic.class, "http://localhost:8084/hello/Hello");
        
        System.out.println("Response: " + basic.sayHello());
    }
}


6. Компилируем, запускаем и получаем:
Код

Response: Hello


P.S. Burlap это базированный на XML протокол. Можно также использовать Hessian - бинарный протокол с тем же API

Это сообщение отредактировал(а) simanyay - 19.5.2005, 17:07


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
Stampede
Дата 19.5.2005, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



У меня по поводу веб сервисов есть один БОЛЬШОЙ-ПРЕБОЛЬШОЙ вопрос.

Дело в том, что сама идея SOAP и вызова методов как сервисов по HTTP в текстовом формате очень даже понятна, и даже можно запросто сваять демку "хелло ворлд", и вроде бы все пучком. До тех пор, пока не возникнет задача обмениваться данными, чуть более сложными чем строки и примитивы. Вот тут-то и начинается гемор.

Например, если у вас есть какой-то класс, который надо пересылать в качестве параметра/результата (скажем, простой Bean), Axis создаст для него прокси, который можно будет использовать на клиенте. Но это-то будет уже не оригинальный класс! Скажете, ничего страшного? Хорошо, тогда вот реальный пример из жизни.

У нас есть древнее серверное приложение на Java, написанное еще на сокетах. Я его сейчас переделываю в J2EE. Клиент к нему - толстый, на Swing'е. Для обмена данными используется паттерн Value Objects, а для доступа к серверной функциональности - Session Facade.

Так вот, объекты Value Objects у меня не простые бины, а целая иерархия классов, идущая от интерфейсов и пр. - со всякими удобными методами, со своей логикой наследования и пр. Так, чтобы их было удобно обрабатывать на сервере, и отображать и манипулировать на клиенте. "And he saw that they were good" smile

Но тут возникло требование обеспечить доступ к серверу через веб сервисы, чтобы:
  • иметь возможность использовать толстого клиента из любого места;
  • иметь интероперабельный API

И я просто сел на попу, потому что преобразование моих Value Objects в прокси сразу же ломало весь мой клиентский код. Я несколько дней рыл инет, пытаясь найти решение. В прниципе вопрос, насколько я понял, решается написанием собственных сериализаторов-десериализаторов. Но почему-то мне это решение мне не понравилось, уж не помню почему. По-моему, я очень не полюбил идею автогенерации всей этой SOAP чухни и страшный вид WDSL файла.

И вот когда я в отчаянии стал рыть все подряд, я наткнулся на обсуждении разницы в подходах Java и .Net к вопросу создания веб сервисов. И оттуда я узнал, что есть две принципально разных парадигмы SOAP: document-style и RPC-style. По каким-то историческим причинам в Java получил развитие только второй, тогда как .Net последовали рекомендации консорциума по интероперабельности WS-I и выбрали document-style.

И хоть я не люблю MS, но когда я узнал об этом, я готов был расцеловать Билла Гейца. После этой маленькой подсказки я просто тупо сел и за день приделал веб-сервисный интерфейс к моему серверу приложения.

В Axis я объявил один единственный метод, который принимает строку и возвращает строку. Кроме того, я написал тоненький wrapper, который маршализует параметры и возвращаемые результаты. Для XML сериализации воспользовался простой до ужаса библиотечкой XStream.

Потом я сделал фабрику, которая скрывает детали получения серверных Session Beans, и теперь при запуске клиента достаточно указать тип соединения, RMI или SOAP, и теперь клиенту это вообще по барабану - он просто общается с бинами (вернее с их стабами), не задумываясь, откуда они берутся.

Может, конечно, я просто изобрел велосипед, но лично мне на нем ездить в четыреста пятьдесят раз удобнее smile

И все-таки меня мучает вопрос: а может, есть более простой путь?

PM WWW   Вверх
simanyay
Дата 19.5.2005, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Антон Ковалёв
****


Профиль
Группа: Участник
Сообщений: 2053
Регистрация: 22.8.2002

Репутация: 2
Всего: 36



Честно говоря, с такими проблемами не сталкивался, т.к. такими вещами пока не занимался. Однако же быстрая пробежка по инету выдала аналогичный, но неотвеченный вопрос на форумах Sun, а это всегда плохой знак. Хотя я нашёл вот это:

http://www.oracle.com/technology/sample_co...msws/index.html

гммм... почему-то для этого УРЛа [URL] не работает

Это сообщение отредактировал(а) simanyay - 19.5.2005, 22:32


--------------------
«It's better to be a pirate than to join the Navy» — Steve Jobs.
PM MAIL WWW   Вверх
maximb
Дата 23.5.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Awaiting Authorisation
Сообщений: 48
Регистрация: 23.5.2005
Где: Украина, г.Симфер ополь

Репутация: 2
Всего: 6



Цитата(Stampede @ 19.5.2005, 20:41)
Дело в том, что сама идея SOAP и вызова методов как сервисов по HTTP в текстовом формате очень даже понятна, и даже можно запросто сваять демку "хелло ворлд", и вроде бы все пучком. До тех пор, пока не возникнет задача обмениваться данными, чуть более сложными чем строки и примитивы. Вот тут-то и начинается гемор.

Возможно я немного непонял в чем заключается твоя проблема.

Но обмениваться сложными структурами достаточно просто, а чтобы не писать своих
сериалайзеров и десереалайзеров достаточно следовать одному из ограничений аксиса - не использовать абстрактные типы (abstract, interface) т.е. в методах и объектах, которые будут использоваться ВЕБ - сервисом их не использовать.

Насчет RMI + WEB-сервис: тоже все достаточно просто, т.е. достаточно правильно оформить wsdd Axis'а и легким движением EJB интерфейс превращается в WEB - сервис, ни одной строчки кода писать не требуется.

Теперь клиент: (моя реализация)
Клиент конектится по local EJB, если не получается то коннектится по remote EJB,
если не получается конектится к WEB - сервису.
Все интерфейсы EJB и WEB - сервис реализуют один интерфейс.
В качестве клиентского класса выполняющего запросы к WEB-сервису используется класс реализующий интерфейс InvocationHandler - чтобы не дублировать все методы, обработка выполняется в одном небольшом методе, конструирующем запросы.

Вообщем если я не понял проблему, сообщи - подумаем smile









PM ICQ   Вверх
Souljah
Дата 12.7.2005, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: 3
Всего: 7



Domestic Cat - спасибо за статью, очень пригодилась

жаль плюс не могу влепить :)
PM MAIL   Вверх
Stampede
Дата 12.7.2005, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(Souljah @ 12.7.2005, 19:37)
жаль плюс не могу влепить smile


Ну я влеплю - не вопрос. Вот только скажите мне, а зачем вам веб сервисы?

Дело в том, что проблема, которую я описал чуть выше в этом же топике, с использованием Axis'а не решается (или решается, но очень нетривиальным образом). В этом отношении Burlap оказывается в сорок раз проще и прозрачнее. Но он подходит только для взаимодействия Java-to-Java. Если же нужна интероперабельность, то Burlap отпадает, во всяком случае, пока для него не напишут .Net адаптер. Но прикол в том, что в случае сложных объектов и SOAP в том виде, как это делается в Axis, для интероперабельного доступа тоже не прокатывает!

Именно поэтому я еще раз спрашиваю: зачем вам веб сервисы?


PM WWW   Вверх
Souljah
Дата 12.7.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: 3
Всего: 7



вот вы даете

а чем вам не нравится идея кросплатформенных объектных интерфейсов к серверу, да еще и по хттп?

а вообще -то да, кто ж без греха
PM MAIL   Вверх
Domestic Cat
Дата 12.7.2005, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Спасиб smile


--------------------

PM   Вверх
DounUnload
Дата 13.7.2005, 07:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Бросьте! Кому он нужен - этот ваш чахлый Веб сервис вместе с Ахисом в придачу.
Преимущества SOAP бесспорны, но! Для этого необходимо решить ряд проблем
1 Наконец узаконить XML Schema - тогда описания XML стандартов станут меньше
2 Отработать систему SOAP расширений на предмет совместимости с XML Schema.

А то впечатление, что все бредут непонятно куда, а потом кто-то свистнет и все побежали за мячиком. Просто непонятно, зачем иной раз в проект включается та или иная библиотека поддержки. Софта много, а толку никакого, сделать что необходимо - не можешь! Вот сейчас уже Томкат 55 вышел, а чем он по существу от тройки отличается? Или, с другой стороны - а много ли интернет браузеров поддерживают XML, XML Schema, трансформацию XML? Mozila - да, но большинство как пользовались IE 5.5 так и сидят под ним. smile

  Вверх
Souljah
Дата 13.7.2005, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: 3
Всего: 7



Веб-сервисы пишуться не для браузеров :)

софта много, но вам принимать решение, когда его использоать.

я не вижу повода для недовольства, почему ws - эт плохо? ряд задач успешно решаются. я видел тяжелые проекты с API по http протоколу, в которых успешно мог быть применен ws.

согласен, что ряд задач не решается с помощью axis ws, но то же самое можно сказать о любой библиотеке :)
PM MAIL   Вверх
DUnload
  Дата 14.7.2005, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.7.2005

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



Речь только шла о конкретном примере, чт касается WS как проблемы в целом - то я этим занимаюсь с 2002 года. smile
Очень неплохая книга вышла
Java SOAP для профессионалов, автор Генри Бекет ISBN 5-85582-223-0 издат. Лори 2004 год

Это сообщение отредактировал(а) DUnload - 14.7.2005, 06:01
PM MAIL   Вверх
Се ля ви
Дата 12.9.2005, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Не пойму, что такое. smile

делаю всё как Котъ описал, разве что Axis 1.2.1 и Tomcat 5.5. Всё нормально до момента:

Цитата(Domestic @ 11.2.2005, 20:56)
4. Направляем броузер (желательно IE) на
http://localhost:8080/axis/SubtractionService.jws?wsdl


Тут происходит нечто, выходящее из ряда вон - Tomcat требует авторизоваться и посылает сообщение "XDB". Я копался в аксисе - никаких паролей в конфигах не обнаружил (был, правда, странный файл "users.lst", пороли и пользователи из которого, впрочем, не подошли). Не подошёл так же и админовый пароль от самого томката, который я задавал при установке.

Но затыкается и выдаёт ошибку 401 при неудачной авторизации не просто адрес http://localhost:8080/axis/SubtractionService.jws?wsdl и даже не просто все, что связано с аксисом - сдыхает весь томкат и даже при его перезапуске это "XDB", непонятно чего от меня хотящее, не пропадает. Только полная перезагрузка системы позволяет снова работать с томкатом до той поры, пока я снова не попытаюсь залезть на http://localhost:8080/axis/SubtractionService.jws?wsdl - тогда всё повторяется.

Попробовал пропустить эту стадию и пойти дальше, но понял, что всё бесполезно, когда не смог сделать проксю - выдаёт
Цитата
java.net.ProtocolException: Server redirected too many  times (20)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
        at java.net.URL.openStream(Unknown Source)
        at org.apache.xerces.readers.DefaultReaderFactory.createReader(DefaultReaderFactory.java:149)
        at org.apache.xerces.readers.DefaultEntityHandler.startReadingFromDocument(DefaultEntityHandler.java:493)
        at org.apache.xerces.framework.XMLParser.parseSomeSetup(XMLParser.java:314)
        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1097)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:195)
        at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:369)
        at org.apache.axis.utils.XMLUtils.newDocument(XMLUtils.java:420)
        at org.apache.axis.wsdl.symbolTable.SymbolTable.populate(SymbolTable.java:482)
        at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:361)
        at java.lang.Thread.run(Unknown Source)

Понятно - сам уже не может к сервису доступиться, так как сделает проксю?

P.S. Кстати, в моей более новой комплектации вот это:
Цитата(Domestic @ 11.2.2005, 20:56)
Последнее замечание: по большому счету, для полного счастья axisу нужны также JAF и javamail.
У меня он ругался пару раз вот так:

Цитата
- Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.


У нас аттачментов нет, потому без разницы, и так работать будет.

Происходит во всех 100% случаев. По-этому придётся качать и тоже класть в либу аксиса и прописывать в CLASSPATH:
1) JAF отсюда: http://java.sun.com/products/javabeans/glasgow/jaf.html
2) JavaMail отсюда: http://java.sun.com/products/javamail/downloads/index.html
3) Java XMLSecurity отсюда: http://xml.apache.org/security/download.html

Это сообщение отредактировал(а) Се ля ви - 24.10.2005, 16:15


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
tux
Дата 15.9.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(Stampede @ 13.7.2005, 02:07)
зачем вам веб сервисы?

Работаю сейчас над проектом, в котором серверы будут размещены в территориально распределенной сети (в перспективе очень большая территория, причем не везде сеть можем контролировать), причем программные компоненты на серверах должны между собой взаимодействовать. Возможно, что где-то будет открыт только трафик по HTTP. В таких условиях веб-сервисы мне кажутся наиболее естественным решением, обеспечивающим работу системы.
PM MAIL Skype GTalk Jabber YIM   Вверх
Stampede
Дата 15.9.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



tux

Ага, отлично! Я как раз и ждал чего-то подобного. В таком случае у меня есть одна маленькая поправка:

Цитата(tux @ 15.9.2005, 14:28)
В таких условиях веб-сервисы мне кажутся наиболее естественным решением, обеспечивающим работу системы.


А я считаю, что если отталкиваться от специфики задачи, то существует еще более общий общий делитель: Java remoting over HTTP. Частными реализациями какового могут быть веб-сервисы, а могут быть и другие технологии, например Burlap/Hessian.

Это сообщение отредактировал(а) Stampede - 15.9.2005, 17:59


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Souljah
Дата 15.9.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: 3
Всего: 7



Burlap - разве не поверх HTTP работает?
в таком случае какой смысл его использовать? все-таки soap - это стандарт
PM MAIL   Вверх
Stampede
Дата 15.9.2005, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Цитата(Souljah @ 15.9.2005, 18:36)
Burlap - разве не поверх HTTP работает?


Именно так, поверх.

Цитата(Souljah @ 15.9.2005, 18:36)
в таком случае какой смысл его использовать?


Простите, не уловил логики. Потому и использовать, что он позволяет решить заданную задачу: организовать взаимодействие серверов в ситуации, когда единственным имеющимся в наличии транспортом является HTTP.

Цитата(Souljah @ 15.9.2005, 18:36)
все-таки soap - это стандарт


Ну почему все так зациклены на этих стандартах? Главная выгода от использования стандарта - в возможности взаимодействия внешних компонентов, написанных под этот же стандарт. В каких-то случаях - да, это оправданное решение. В случае же полностью доморощенных (home-grown) комонентов выгоды от использования более "легкой" технологии ремоутинга вполне могут перевесить гипотетические выгоды от "стандартности".




--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Souljah
Дата 15.9.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.12.2004

Репутация: 3
Всего: 7



на мой взгляд, стандартный сервис который поддерживается любой (!) платформой - слишком весомый аргумент, чтобы запросто от него отказаться в пользу пусть более удобных и легких но зависящих от среды решений
PM MAIL   Вверх
tux
Дата 16.9.2005, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(Stampede @ 15.9.2005, 22:58)
А я считаю, что если отталкиваться от специфики задачи, то существует еще более общий общий делитель: Java remoting over HTTP. Частными реализациями какового могут быть веб-сервисы, а могут быть и другие технологии, например Burlap/Hessian.

Burlap/Hessian и были первыми кандидатами на роль используемого протокола, только система будет интегрироваться с другими (с одной сразу, но написана она на Java), возможно клиенты системы будут написаны не на Java. Согласен, что на данный момент можно было все реализовать просто на чем-нибудь Java-зависимом и дорабатывать потом по мере необходимости, просто сразу захотелось универсальности, на всякий случай.
PM MAIL Skype GTalk Jabber YIM   Вверх
tux
Дата 16.9.2005, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Чем дольше думаю, тем больше склоняюсь к идее применить все сразу. Если с сервером взаимодействует клиентское приложение, то приходится обмениваться довольно сложными структурами данных. Правда, вероятность того, что клиентские приложения будут написаны только на Java - 99%.

Во взаимодействии с другими системами фигурируют достаточно простые категории типа статистики, которые можно легко реализовать веб-сервисами без применения каких-либо сериализаторов/десериализаторов.

Stampede, спасибо. Заставил задуматься. smile
PM MAIL Skype GTalk Jabber YIM   Вверх
tux
Дата 16.9.2005, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата с http://www.caucho.com/:
Цитата
Hessian now includes Java, PHP, Python, C++, and C# implementations.

Так что и проблема кроссплатформенности в какой-то степени решается.
PM MAIL Skype GTalk Jabber YIM   Вверх
Се ля ви
Дата 16.9.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Stampede, мне кажется, что ты недооцениваешь роль веб-сервисов. Изначально основное их преимущество заключается в том, что они позволяют использовать в программировании приёмы интеграции Информационных Систем - и именно это является архитектурным ядром SOA.
В вопросе веб-сервисов достигнута совместимость ПО, которое можно писать на практически всех известных языках и платформах, главным образом - систем, написанных на .NET и J2EE между собой, чего ранее не было сделано в отношении CORBA.

Старые решения на допотопных и малораспространённых сейчас языках типа COBOL`а, Фортрана, можно обернуть в веб-сервис и тем самым удобно вплести в современную систему, работая с ним из любого языка.

Мы, на основе стандартов получили великолепный универсальный механизм для построения систем из всего, что имеется под рукой - старых решений, программистов на любых языках и т.д. В идеале ты можешь вообще оставить на откуп каждому конкретному человеку - на каком языке ему удобнее программировать, лишь бы он веб-сервисы писал - и включить его в команду разработки на равне с другой разношорстной публикой, только оговорив интерфейсы веб-сервисов, с помощью которых они будут взаимодействовать. Неудивительно что теперь постепенно всё более остро встаёт вопрос уже не о том, какой язык программирования лучше, а о том, какой из них удобнее для написания веб-сервисов.

Я убеждён, что у SOA огромный экономический потенциал и большое будущее.

С твоими же рассуждениями о том, что
Цитата(Stampede @ 15.9.2005, 18:59)
Ну почему все так зациклены на этих стандартах? Главная выгода от использования стандарта - в возможности взаимодействия внешних компонентов, написанных под этот же стандарт. В каких-то случаях - да, это оправданное решение. В случае же полностью доморощенных (home-grown) комонентов выгоды от использования более "легкой" технологии ремоутинга вполне могут перевесить гипотетические выгоды от "стандартности".

я тоже не согласен - мы должны писать и распространять многофункциональные библиотеки для многоразового использования - это следует стремиться делать в любых ситуациях, иначе твой личный прогресс остановится. Современный программист - это уже не столько человек, который умеет здорово кодить, сколько человек, имеющий груду наработанных, накопленных собственных библиотек на все случаи жизни и хорошо изучивший, может даже улучшивший другие распространённые библиотеки. Причём, что бы не изобретать велосипедов, акцент лучше делать на втором.

Иногда, когда бюджет очень маленький и задача очень специфическая, приходится писать что-то совершенно бесполезное для других целей - но по возможности этого следует как можно сильнее избегать, ИМХО, ибо стратегического толку от этого мало. Если мне приходится это делать часто - я начинаю подумывать о смене работы, ибо это - бесперспективняк, топтание на месте в плане профессионального роста.


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Stampede
Дата 16.9.2005, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Се ля ви, я тебе скажу как родному. Ты знаешь, как я тебя уважаю, но я тебе скажу, Шура, ты - ...

Нет, не так... Понимаешь... Про то, какая крутая штука эти веб-сервисы я могу прочитать во всяких гламурных журналах для ИТ-начальников, где все изложено на уровне, доступном для понимания именно этой публики. Но мы-то здесь - как раз те самые ребята, которые все это делают своими руками! Зачем же нас-то кормить дешевыми декларациями.

Почему декларациями? Потому что ну не работает, не работает SOAP-интероперабельность в жизни. Пока дело касается плоских типов и простейших структур - да, работает, но дальше - нет. Но ведь для интеграции разнородных приложений SOAP - не единственный выход. Люди испокон веков обменивались данными в форматах XML; фактически в любой прикладной области уже сложились свои стандарты этих форматов. И все прекрасно работает.

Что нового приносит поверх этого технология веб сервисов? Пшик она приносит. Пустышку. Ложное чувство синхронности RPC и псевдо-удобство автогенерации интерфейсного кода.

Вот ты говоришь типа система на фортране. А у тебя система на Java со сложными объектами. Ну и как ты смапишь свои объекты на фортрановские типы? Никак не смапишь, будешь все приводить к уровню наибольшей общей понимаемости - то есть обратно к строкам и примитивам. Вот в этом и есть весь SOAP.

А "резинщики", всесто того чтобы разглагольствовать об интерабельности, просто молча взяли и сделали в этом направлении практический шаг: написали реализации для других языков (tux, спасибо за информацию - это действительно грандиозная новость). И вот это истинная интероперабельность.

(обращаясь ко всем) Товарищи, я вас очень прошу, не путайте теплое с мягким. Есть задача ремоутинга, и есть задача интеграции, и это две разные вещи. Вы пытаетесь для обеих задач использовать один механизм, веб сервисы, а он на самом деле не является наилучшим выбором ни для одного, ни для другого.

И еще: не молитесь на стандарты, ибо сказно "не сотвори себе кумира". Помните, что стандарты создаются теоретиками!

У меня пока все smile



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Се ля ви
Дата 16.9.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

Репутация: 3
Всего: 127



Stampede, хм... Ну что ж, заставил усомниться.
Я сейчас только начинаю разбираться с веб-сервисами, посмотрю... возможно, действительно фигня, хотя на теоретическом уровне концепция кажется здравой. В любом случае маркетинг там явно опережает функциональность, чуваки денег хотят бессовестно срубить.

Но точно так же раньше говорили и про Java - типа маркетинг, мода! Не майтесь дурью, учите С++, он быстрее, надёжнее, а с вас просто денег хотят поиметь хитрые Sun`овцы.

Кароче ладно, я пока в сомнениях... Когда определюсь - напишу smile

Это сообщение отредактировал(а) Се ля ви - 17.9.2005, 02:02


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Stampede
Дата 17.9.2005, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 66
Всего: 144



Се ля ви, я тебе предлагаю в порядке отрезвляющего эксперимента проделать простую вещь:

1. Возьми любой распределенный компонент, который у тебя есть (из реального приложения, чтобы долго не страдать), и сделай его доступным через Axis. Вернее нет, не любой, а такой, который бы принимал/возвращал сложные типы: чтобы там были коллекции, графы зависимых объектов и пр.

2. Попробуй написать к нему простейшего .Net клиента.

3. Расскажи, что получилось.

Я тебе на полном серьезе говорю, вот просто поезжайте в Киев сделай - и всё. А потом продолжим разговор об интероперабельности smile



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
x4444
Дата 26.6.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.2.2006

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



Цитата(Stampede @ 19.5.2005,  20:41)
И вот когда я в отчаянии стал рыть все подряд, я наткнулся на обсуждении разницы в подходах Java и .Net к вопросу создания веб сервисов. И оттуда я узнал, что есть две принципально разных парадигмы SOAP: document-style и RPC-style. По каким-то историческим причинам в Java получил развитие только второй, тогда как .Net последовали рекомендации консорциума по интероперабельности WS-I и выбрали document-style.

The Axis2 core supports both RPC-style and message-style interactions based on the one-way messaging model.

http://www.jaxmag.com/itr/online_artikel/p...nodeid,147.html


В общем я тут покопался с Axis2 - вроде то что тебе надо. - тут написал как делать - http://forum.vingrad.ru/index.php?showtopic=102294  

Это сообщение отредактировал(а) x4444 - 29.6.2006, 20:00
PM MAIL   Вверх
JSpark
Дата 22.10.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.10.2006

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



Цитата(Stampede @ 19.5.2005,  20:41)
...
У нас есть древнее серверное приложение на Java, написанное еще на сокетах. Я его сейчас переделываю в J2EE. Клиент к нему - толстый, на Swing'е. Для обмена данными используется паттерн Value Objects, а для доступа к серверной функциональности - Session Facade.

Так вот, объекты Value Objects у меня не простые бины, а целая иерархия классов, идущая от интерфейсов и пр. - со всякими удобными методами, со своей логикой наследования и пр. Так, чтобы их было удобно обрабатывать на сервере, и отображать и манипулировать на клиенте
...

Скажи пожалуйста какие функции сервера в данном проекте.
PM MAIL   Вверх
seth
Дата 20.12.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

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



Цитата(simanyay @ 19.5.2005,  16:42)
2. Библиотека Burlap

чегойто не открывается страничка... smile


--------------------
PM MAIL   Вверх
batigoal
Дата 21.12.2006, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



seth, подойди к этой проблеме творчески smile
http://www.caucho.com/resin-3.0/protocols/burlap.xtp


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
seth
Дата 25.12.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 4.6.2006

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



Цитата(batigoal @ 21.12.2006,  15:37)
seth, подойди к этой проблеме творчески smile
http://www.caucho.com/resin-3.0/protocols/burlap.xtp

я так понимаю что бурлап входит в резин? т.е. отдельно от резина его низзя использовать? (например в томкате)


--------------------
PM MAIL   Вверх
tux
Дата 25.12.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Цитата(seth @  25.12.2006,  16:21 Найти цитируемый пост)
я так понимаю что бурлап входит в резин? т.е. отдельно от резина его низзя использовать? (например в томкате) 

Можно использовать где угодно и без Resin. 
PM MAIL Skype GTalk Jabber YIM   Вверх
y3u
Дата 25.12.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



кстати, кто-нить возьмется накатать простенький примерчИг с использованием стандартного боевого комплекта для вебсервисов из мустанга? Собственно нужно показать как с помощью аннтотации сделать сервис, как с помощью батника сгенерить WSDL-ник и как клиента сделать...


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
Samotnik
Дата 5.9.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Хотелось бы узнать, может у кого нить, есть ссылки на электронные книги по  WEB  программированию на Java (Servlet , jsp, .......)    Подкиньте плз, кто знает....

PM MAIL   Вверх
Maksym
Дата 5.9.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Samotnik
Глянь в Литературу по Java.
PM MAIL   Вверх
Samotnik
Дата 6.9.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



Maksym,  ok
PM MAIL   Вверх
Alenka_
Дата 20.9.2007, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.6.2007

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



Что же получается? Есть два (а может больше?) способов передать данные между сервисом и клиентом поверх http. 
Это веб-сервисы, с wsdl, SOAP-оболочкой и стабами.
И Burlap/Hessian без всего перечисленного.

Оба способа требуют application server, причем в случае с burlap/hessian не обязательно Resin. А  в случае с веб- сервисом происходит автоматическая генерация и wsdl, и SOAP-пакетов и стабов.
Оба способа требуют написания собственной сериализации/ десериализации сложных структур даных. Оба работают на разных платформах ( Java, PHP, Python, C++, and C# implementations ).

Чем же так хорош чудо-burlap/hessian протокол? Простотой? 

Когда лучше применять тот или другой протокол?

PM MAIL   Вверх
Maksym
Дата 20.9.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(Alenka_ @  20.9.2007,  16:48 Найти цитируемый пост)
Чем же так хорош чудо-burlap/hessian протокол? Простотой? 

Угу. Они и позиционируют себя как легковесное решение. Плюс hessian изначально заточен под передачу бинарных данных безо всяких attachments. Но, имхо, если нет автогенерации из/в wsdl то нет web-сервиса в его идеологическом смысле. 
Зато применять burlap/hessian просто и удобно, не сравнить с монстроидальным axis2.
PM MAIL   Вверх
Alenka_
Дата 20.9.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.6.2007

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



Мне все-таки интересно, не страдает ли функциональность от такой "легковесности". Может есть какие-то преимущества у веб-сервисов на Axis, ради которых пренебрегают простотой исполнения?.. 
PM MAIL   Вверх
Maksym
Дата 21.9.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(Alenka_ @  20.9.2007,  21:03 Найти цитируемый пост)
Мне все-таки интересно, не страдает ли функциональность от такой "легковесности". Может есть какие-то преимущества у веб-сервисов на Axis, ради которых пренебрегают простотой исполнения?..  

Есть, та же автогенерация.

Мое имхо: 
если вызвать сервис (хотя бы теоретически в будущем) будеш не ты (не код вышей команды), то используй axis2 -- стандарты надо уважать; если же это решение сугубо внутри вашей системы, то hessian -- простота залог успеха.  smile 
PM MAIL   Вверх
Alenka_
Дата 21.9.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 18.6.2007

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



Т.е если сервис написан на hessian, то некто сторонний ) не будет знать, что за служба ему доступна? А у сервиса написанного с помощью Axis2- будет преимущество в виде описания wsdl?
PM MAIL   Вверх
Maksym
  Дата 21.9.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

Репутация: 24
Всего: 62



Цитата(Alenka_ @  21.9.2007,  21:08 Найти цитируемый пост)
Т.е если сервис написан на hessian, то некто сторонний ) не будет знать, что за служба ему доступна? А у сервиса написанного с помощью Axis2- будет преимущество в виде описания wsdl? 

Ну если он вообще не в курсе дела, есть ли там сервисы, то да  smile 

Но проблема несколько глубже. "Некто сторонний" будет нуждаться в том, чтобы ему каким-то образом передали пакет с интерфейсами, которые предоставляет сервис на hessian. Более того, если что то там, в этих интерфейсах, поменяется, то ему надо будет предоставить обновленный пакет. То есть на лицо проблема синхронизации версий сервиса и клиента.

В axis все можно мгновенно перегенерировать из wsdl. То есть разработчику сервисов не нужно думать о клиентах, они в состоянии сами о себе позаботиться.

Кроме того, клиент из другого языка (технологии) программирования может использовать любую реализацию для работы с wsdl отличную от axis (правда я не знаю есть ли такие, но должны быть раз уж wsdl это стандарт). А в случае с hessian -- выбор ограничивается только hessian'овской реализацией клиента (поскольку это не стандарт и никто кроме hessian его протокол не поддерживает).



Это сообщение отредактировал(а) Maksym - 21.9.2007, 22:00
PM MAIL   Вверх
stup
Дата 13.11.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.4.2007

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



axis2 - полный отстой. Когда сгенерировался скелет на 70 000 строк, да еще и на русском языке, то тут уже никаких удовств этих стабов не видно и в помине. Java API для него извращенное и документировано плохо. На сайте апач лежат туториалы, который ограничиваются написанием хелловорлдов, поэтому приходится перелопачивать джавадоки :( Возможно, со временем что то выкристаллизируется, но пока - очень сыро.
PM MAIL   Вверх
Foo
Дата 27.11.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 20.10.2006

Репутация: 1
Всего: 3



Возможно ктото использовал в своих проектах XFire или Web Methods Glue для работы с SOAP и может поделиться впечатлениями?
--------------------
qip
PM MAIL   Вверх
sarjsheff
Дата 9.1.2008, 13:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 6.7.2006
Где: Moscow

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



Пример веб сервиса на Spring Web Services.

Требуемое ПО:
1)Tomcat 6.0.14 (по идее можно и более ранние версии я пробовал под 6.0.14)
2)Spring Web Services 1.5

WebService.
Структура приложения:
simple-ws/
    WEB-INF/
        lib/
            activation-1.1.jar
            antlr-2.7.6rc1.jar
            aopalliance-1.0.jar
            asm-2.2.3.jar
            asm-commons-2.2.3.jar
            bsh-2.0b1.jar
            commons-codec-1.3.jar
            commons-fileupload-1.1.1.jar
            commons-httpclient-3.0.1.jar
            commons-io-1.1.jar
            commons-logging-1.1.jar
            groovy-1.0.jar
            jruby.jar
            jsr173_1.0_api.jar
            jstl.jar
            log4j-1.2.13.jar
            log4j.jar
            mail-1.4.jar
            pe_api.jar
            qname.jar
            resolver.jar
            saaj-api-1.3.jar
            saaj-impl-1.3.jar
            simple-ws.jar - наш сервис.
            spring-beans-2.0.6.jar
            spring-context-2.0.6.jar
            spring-core-2.0.6.jar
            spring.jar
            spring-oxm-1.0.0.jar
            spring-oxm-tiger-1.0.0.jar
            spring-web-2.0.6.jar
            spring-webmvc-2.0.6.jar
            spring-ws-core-1.0.0.jar
            spring-ws-core-tiger-1.0.0.jar
            spring-ws-security-1.0.0.jar
            spring-xml-1.0.0.jar
            standard.jar
            stax-api-1.0.1.jar
            uwi_api.jar
            wsdl4j-1.6.1.jar
            xalan-2.7.0.jar
            xercesImpl-2.8.1.jar
            xml-apis-1.3.04.jar
            xmlbeans-qname.jar
            xmlpublic.jar
            xws-security-2.0-FCS.jar
        web.xml
        spring-ws-servlet.xml

Исходный код:

Конфигурационный файл приложения web.xml
Код

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <display-name>
        Simple WebService
    </display-name>
    <description>-</description>

    <servlet>
        <servlet-name>spring-ws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
        <init-param>
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-ws</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

</web-app>


Конфиг спрингов spring-ws-servlet.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <description>Simple WS</description>


    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
        <property name="defaultEndpoint" ref="EchoEndpoint" />
        <property name="mappings">
            <props>
                <prop key="{http://www.example.org/simple-ws/}Echo">EchoEndpoint</prop>
            </props>
        </property>        
        <property name="interceptors">
            <list>
                <ref local="validatingInterceptor" />
                <ref local="loggingInterceptor" />
            </list>
        </property>
    </bean>
    
    <bean id="validatingInterceptor" class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="schema" value="classpath:simple-ws.xsd" />
        <property name="validateRequest" value="true" />
        <property name="validateResponse" value="true" />
    </bean>

    <bean id="loggingInterceptor" class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
        <property name="logRequest" value="true" />
        <property name="logResponse" value="true" />
    </bean>

    <bean id="EchoEndpoint" class="ru.sarjsheff.simplews.EchoEndpoint">
    </bean>
    
    <bean id="simple-ws" class="org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition">
        <description>http://localhost:8080/simple-ws/simple-ws.wsdl</description>
        <property name="builder">
            <bean class="org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder">
                <property name="schema" value="classpath:simple-ws.xsd" />
                <property name="portTypeName" value="SimpleWs" />
                <property name="locationUri" value="http://localhost:8080/simple-ws/services" />
            </bean>
        </property>
    </bean>
    
</beans>



Схема сообщений simple-ws.xsd
Код


<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:tns="http://www.example.org/simple-ws/" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/simple-ws/">
    <element name="Echo" type="string"></element>

    <element name="EchoResponse" type="string"></element>
</schema>


Сам сервис ru/sarjsheff/simplews/EchoEndpoint.java
Код


package ru.sarjsheff.simplews;

import org.springframework.ws.server.endpoint.AbstractDomPayloadEndpoint;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class EchoEndpoint extends AbstractDomPayloadEndpoint {

    protected Element invokeInternal(Element request, Document doc) throws Exception {
        String requestText = request.getTextContent();
        Element responseElement = doc.createElementNS("http://www.example.org/simple-ws/","EchoResponse");
        responseElement.setTextContent("request is : " + requestText);
        return responseElement;
    }

}



Клиент ru/sarjsheff/simplews/Client.java

Код


package ru.sarjsheff.simplews;

import java.io.ByteArrayInputStream;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.springframework.ws.client.core.WebServiceTemplate;

public class Client {

    public static void main(String[] args) {
        try {
            WebServiceTemplate wsc = new WebServiceTemplate();
            StreamSource source = new StreamSource(new ByteArrayInputStream("<Echo xmlns=\"http://www.example.org/simple-ws/\">test</Echo>".getBytes()));
            StreamResult result = new StreamResult(System.out);
         wsc.sendSourceAndReceiveToResult("http://localhost:8080/simple-ws/services", source, result);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}



WSDL доступен по http://localhost:8080/simple-ws/simple-ws.wsdl .

Это сообщение отредактировал(а) sarjsheff - 9.1.2008, 13:33
PM MAIL WWW   Вверх
sarjsheff
Дата 10.1.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 6.7.2006
Где: Moscow

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



Реализация SOAP сервера на Groovy проще не бывает.

http://ubuntu.cica.es/mirrors/maven2/groov...l-jsr06-0.1.jar

Создаем сервис который обрабатывает входную страку и выплевывает ее обратно.

EchoService.groovy

Код

public class EchoService {

String echo(instr) { return "["+instr+"]" }

}


Код запускающий SOAP сервер.

SoapServer.groovy

Код

import groovy.net.soap.SoapServer

def server = new SoapServer("localhost", 6980)

server.setNode("EchoService")

server.start()




Клиент к нашему SOAP сервису.

SoapClient.groovy

Код

import groovy.net.soap.SoapClient

def proxy = new SoapClient("http://localhost:6980/EchoServiceInterface?wsdl")

def result = proxy.echo("kuku") println result



Запуск.

Код

groovy SoapServer.groovy &
[1] 18418
groovy SoapClient.groovy 
[kuku]

PM MAIL WWW   Вверх
kkorsakoff
Дата 21.4.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Цитата(Stampede @ 19.5.2005,  20:41)
У меня по поводу веб сервисов есть один БОЛЬШОЙ-ПРЕБОЛЬШОЙ вопрос.

Дело в том, что сама идея SOAP и вызова методов как сервисов по HTTP в текстовом формате очень даже понятна, и даже можно запросто сваять демку "хелло ворлд", и вроде бы все пучком. До тех пор, пока не возникнет задача обмениваться данными, чуть более сложными чем строки и примитивы. Вот тут-то и начинается гемор.

Например, если у вас есть какой-то класс, который надо пересылать в качестве параметра/результата (скажем, простой Bean), Axis создаст для него прокси, который можно будет использовать на клиенте. Но это-то будет уже не оригинальный класс! Скажете, ничего страшного? Хорошо, тогда вот реальный пример из жизни.

У нас есть древнее серверное приложение на Java, написанное еще на сокетах. Я его сейчас переделываю в J2EE. Клиент к нему - толстый, на Swing'е. Для обмена данными используется паттерн Value Objects, а для доступа к серверной функциональности - Session Facade.

Так вот, объекты Value Objects у меня не простые бины, а целая иерархия классов, идущая от интерфейсов и пр. - со всякими удобными методами, со своей логикой наследования и пр. Так, чтобы их было удобно обрабатывать на сервере, и отображать и манипулировать на клиенте. "And he saw that they were good" smile

Но тут возникло требование обеспечить доступ к серверу через веб сервисы, чтобы:


  • иметь возможность использовать толстого клиента из любого места;

  • иметь интероперабельный API


И я просто сел на попу, потому что преобразование моих Value Objects в прокси сразу же ломало весь мой клиентский код. Я несколько дней рыл инет, пытаясь найти решение. В прниципе вопрос, насколько я понял, решается написанием собственных сериализаторов-десериализаторов. Но почему-то мне это решение мне не понравилось, уж не помню почему. По-моему, я очень не полюбил идею автогенерации всей этой SOAP чухни и страшный вид WDSL файла.

И вот когда я в отчаянии стал рыть все подряд, я наткнулся на обсуждении разницы в подходах Java и .Net к вопросу создания веб сервисов. И оттуда я узнал, что есть две принципально разных парадигмы SOAP: document-style и RPC-style. По каким-то историческим причинам в Java получил развитие только второй, тогда как .Net последовали рекомендации консорциума по интероперабельности WS-I и выбрали document-style.

И хоть я не люблю MS, но когда я узнал об этом, я готов был расцеловать Билла Гейца. После этой маленькой подсказки я просто тупо сел и за день приделал веб-сервисный интерфейс к моему серверу приложения.

В Axis я объявил один единственный метод, который принимает строку и возвращает строку. Кроме того, я написал тоненький wrapper, который маршализует параметры и возвращаемые результаты. Для XML сериализации воспользовался простой до ужаса библиотечкой XStream.

Потом я сделал фабрику, которая скрывает детали получения серверных Session Beans, и теперь при запуске клиента достаточно указать тип соединения, RMI или SOAP, и теперь клиенту это вообще по барабану - он просто общается с бинами (вернее с их стабами), не задумываясь, откуда они берутся.

Может, конечно, я просто изобрел велосипед, но лично мне на нем ездить в четыреста пятьдесят раз удобнее smile

И все-таки меня мучает вопрос: а может, есть более простой путь?

Да простят меня за оверквотинг, скопировал целиком сообщение Stampede т.к. оно было давно и полностью отражает мои мысли в последнее время smile 

Столкнулся с такой же проблемой: да все круто, написал аннотацию WebService (кстати неужели сложно было сделать чтобы имя параметров автоматически передавались в генерируемые файлы без добавок типа @WebParam(name = "id")long id), запустил пару команд, бац и готов клиент.

Но было очень обидно увидеть вместо своих родных VO, обтесанных напильником, увидеть страшные сгенерированные подобия smile 
Нафиг тогда оно нужно?

Вопрос: не нашлось ли какого решения за это время?


Предложу свой ход мыслей. Вроде выкрутился, но не известно какие тут еще подводные камни.

Сначала попытался копировать проперти при помощи BeanUtils из apache commons beans, оно позволяет скопировать одноименные проперти из одного объекта в другой - с простыми VO можно и так работать, получится что-то вроде
Код

Port .... // коннектимся к веб-сервису как обычно
Customer gen=port.findById(980l); // сгенерированный VO

Customer our = new Customer(); // создаем пустой "наш" VO
BeanUtils.copyProperties(our,gen); // магия!:)



Но если VO содержит не только простые типы, такой фокус не прокатит. BeanUtils ругнется что-то про несоответствие классов.

Понятно, что прийдется самому сериализовать объект на стороне веб службы и доставать из строки, как это уже сделал Stampede. Разница лишь в том, что я воспользовался не библиотекой, а стандартными средствами, а именно - JAXB.

Тогда сериализация будет выглядеть как
Код

            JAXBContext ctx = JAXBContext.newInstance(Customer.class);
            Marshaller m = ctx.createMarshaller();
            wr = new StringWriter();
            m.marshal(c, wr);
            return wr.toString();


А десериализация
Код

            Port .... // коннектимся к веб-сервису как обычно
            String s=port.findByIdXML (980l);
            JAXBContext ctx= JAXBContext.newInstance(Customer.class);
            Unmarshaller m=ctx.createUnmarshaller();
            Customer c= (Customer) m.unmarshal(new StringReader(s));


Ничего принципиально нового по сути я конечно не предложил, но мало ли кому интересно, да и апнуть тему smile

Добавлено через 1 минуту и 47 секунд
P.S. Сам VO надо аннотировать @XmlRootElement. Все параметры, связи и прочее аннотировать не обязательно, он их сам подхватит.
PM MAIL WWW ICQ   Вверх
kkorsakoff
Дата 22.4.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Ура, проблема кажется решена. Выбросить стандартный генератор клиентского кода smile 

Не уверен, может что-то лишнее сделано, но точно знаю, что именно так работает smile 

Имеем веб-сервис с методом 
Код

    @WebMethod()
    public Customer findById(long id) throws DatabaseException {
        Customer c = ...;
        return c;
    }


Customer - обычный VO.

Далее создаем клиентский код как обычно при помощи wsimport.
Можно конечно создать все необходимые классы вручную, но так удобнее.
Из всего сгенерированного хлама нам нужно:

Собственно клиент (аннотированный @WebServiceClient).
Он будет иметь метод
Код

    /**
     * 
     * @return
     *     returns CustomerWS
     */
    @WebEndpoint(name = "CustomerWSPort")
    public CustomerWS getCustomerWSPort() {
        return super.getPort(new QName("http://ws.webapp.core.billing.baltline.ru/", "CustomerWSPort"), CustomerWS.class);
    }


Смотрим в CustomerWS - он нам тоже нужен. На основе его во время рантайм генерируется прокси.
Видим, что он имеет метод
Код

    @WebMethod
    @WebResult(targetNamespace = "")
    @RequestWrapper(localName = "findById", targetNamespace = "http://ws.webapp.core.billing.baltline.ru/", className = "ru.baltline.billing.core.client.FindById")
    @ResponseWrapper(localName = "findByIdResponse", targetNamespace = "http://ws.webapp.core.billing.baltline.ru/", className = "ru.baltline.billing.core.client.FindByIdResponse")
    public Customer findById(
        @WebParam(name = "id", targetNamespace = "")
        long id)
        throws DatabaseException_Exception
    ;


Ага, видим, что className указывают на парочку сгенерированных классов. Как вы уже догадались, это и есть то, во что сериализатор/десериализатор превращает запросы и ответы. Это обычные классы, аннотированные @XmlType.
Запрос оставляем как есть, у нас там VO не используются, так что вполне сойдет сгенерированный.
Открываем ответ, т.е. FindByIdResponse.
Код

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "findByIdResponse", propOrder = {
    "_return"
})
public class FindByIdResponse {

    @XmlElement(name = "return")
    protected Customer _return;



}

Т.е. ответ это простой класс, содержащий в себе <return></return>, в котором и лежит интересующий нас VO
wsimport хочет мапить его на сгенерированный им Customer, но мы меняем на наш

Код

    @XmlElement(name = "return")
    protected !!!!! указываем наш VO !!!!!Customer _return;


Удаляем ненужные нам VO (главное не удалить по запаре снегерированные Request и Response объекты), удаляем ObjectFactory (не очень понял пока зачем она нужна) и клиент готов к работе smile 

Код

    CustomerWS port = new CustomerWSService().getCustomerWSPort();
        //invoke business method
      try {
          Customer c=port.findById (980l);
          System.out.println(c); // ура, наш toString работает:)
      } catch (DatabaseException_Exception e) {
          e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
      }


Кстати Exception я не стал мапить, а надо бы. Пока что на клиенте получаю сгенерированный класс

Это сообщение отредактировал(а) kkorsakoff - 22.4.2008, 19:59
PM MAIL WWW ICQ   Вверх
Restavrator
Дата 14.5.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.6.2007

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




Что-то я читаю ветку перечтываю и все никак не могу понять как мне решить следующую проблему:

Есть приложение которое взаимодействует с внешней системой. Взаимодействие сейчас происходит либо через EJB либо через веб сервисы.
В будущем возможно появится что-то еще.
Похожую ситуацию когда то описывал maximb:
"Теперь клиент: (моя реализация)
Клиент конектится по local EJB, если не получается то коннектится по remote EJB,
если не получается конектится к WEB - сервису.
Все интерфейсы EJB и WEB - сервис реализуют один интерфейс."

При взаимодействии через EJB используются JabaBean объекты внешней системы. 
При взаимодействии черех веб-сервисы Axis генерирует собственные бины, но так как эти бины уже существуют их приходится переносить в другой пакет. Из-за чего соответсвенно очень сильно разрастается объем кода. Да и не самое приятное занятие работать с параллельными бинами в разных местах. 

Вообщем вопрос, можно ли его заставить использовать бины внешней системы, при условии что они всегда будут нам доступны? 
Или может есть какой нибудь вариант для оптимизации этого процесса?

Внешнюю систему изменять нет возможности, т.о. вариант с сериализацией в строку и обратно не поможет.
PM MAIL   Вверх
kkorsakoff
Дата 3.6.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Через Axis неизвестно, но при генерировании клиентских классов при помощи wsimport можно.
PM MAIL WWW ICQ   Вверх
christy
Дата 17.7.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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;
    }
}

PM MAIL   Вверх
chief39
Дата 22.7.2008, 15:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 11
Всего: 77



Цитата(Се ля ви @  16.9.2005,  11:05 Найти цитируемый пост)
Старые решения на допотопных и малораспространённых сейчас языках типа COBOL`а, Фортрана, можно обернуть в веб-сервис и тем самым удобно вплести в современную систему, работая с ним из любого языка.

Мы, на основе стандартов получили великолепный универсальный механизм для построения систем из всего, что имеется под рукой - старых решений, программистов на любых языках и т.д. В идеале ты можешь вообще оставить на откуп каждому конкретному человеку - на каком языке ему удобнее программировать, лишь бы он веб-сервисы писал - и включить его в команду разработки на равне с другой разношорстной публикой, только оговорив интерфейсы веб-сервисов, с помощью которых они будут взаимодействовать. Неудивительно что теперь постепенно всё более остро встаёт вопрос уже не о том, какой язык программирования лучше, а о том, какой из них удобнее для написания веб-сервисов.

Я убеждён, что у SOA огромный экономический потенциал и большое будущее.

Помню книжечку 1994 года(кажется) в которой подробно описывалось как, почему и когда корба заполонит мир. Уже сейчас мы должны были юзать только объектные браузеры, всё было бы обёрнуто корбой и мы наслаждались бы кобольными движками 80-х, хитро сныканными под толстым слоем корбы.
Прям один в один:
Цитата

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


И что? smile
И ничё. Вживую работал только с одной системой, представляющей из себя сипипи реализацию и корба-связки.
Саоме интересное - корба связывала только сипипи с сипипи.
Светлой мысли прикрутить туда фортран или кобол не возникло.
Наверное потому что очень мало универсального кода. Его практически нету.
Давеча переписали старую мейнфреймовскую систему на жаве. Даже в мыслях "а вот интегрировать бы...".
Самые простые, универсальные и вечные штуки - это косинус/синус/калькулятор/календарь.
Но их переписывают в первую очередь smile)
Все остальные проще написать заново, чем трахаться, интегрируя.

Надеюсь все давно поняли что "вам не надо знать на чём и как написано, вам только вот так надо сделать - и сразу всё закрутится" - звиздёж и провокация? smile
Что когда интегрируешь две большие "чего-то там", надо не одну неделю провести "заглядывая к соседям".

А если представить себе систему кобол+дотнет+джава+пхп.... специалистов, необходимых для этого... ужас эйчара и ПМа...
провалы в понимании между разными людьми которые в разных мирах живут... smile))
Лучше уж пяток взаимозаменяемых джавистов, минус несколько тезхнологий, минус интеграцию, минус провалы типа "кобольщик закончился..."

Подразумеваю что все давно убедились что слабосвзяанных систем действительно мало. Очень мало. 


ЗЫ: Коту спасибо за пример, полистал.

Это сообщение отредактировал(а) chief39 - 22.7.2008, 16:07


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Akvel
  Дата 12.9.2008, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.8.2007

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



Разбираюсь тут с вс, использую Eclipce+axis2. И возникла такая проблема, что простые типы приходят к клиенту нормально, а когда начинаю передавать свой класс то он не доходит до клиента.
Может кто подскажет. 

Передаваемый класс
Код

public class MyOwnClass {
    
    
    public int Pole1;
    public String Pole2;
    
    
    public MyOwnClass(){
        Pole1 = 12345;
        Pole2 = "12345";
    }

}


Класс веб-сервиса
Код

public class MyWSOwn {
    public MyOwnClass Polushit(){
        return new MyOwnClass();
    }
}


Класс клиента
Код

import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import wtp.MyWSOwnStub.MyOwnClass;

public class StartMyOwn {
    public static void main (String[] args){
            MyWSOwnStub stub = new MyWSOwnStub();
            MyOwnClass result = stub.Polushit().get_return();
            System.out.println(result.getPole1() + " " + result.getPole2());
    }
}


MyWSOwnStub.MyOwnClass и MyWSOwnStub автосгенеренные Eclipceой классы
PM ICQ   Вверх
Akvel
Дата 16.9.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.8.2007

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



Кто пробовал подключаться к веб сервисам из апплетов? 
Выдает ошибку connection refuse
PM ICQ   Вверх
batigoal
Дата 16.9.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



возможно, дело в том, что апплет не подписан - в этом случае он не имеет прав на коннект куда-нибудь, кроме как к тому хосту, откуда он был загружен.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Akvel
Дата 18.9.2008, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.8.2007

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



Цитата(batigoal @ 16.9.2008,  12:24)
возможно, дело в том, что апплет не подписан - в этом случае он не имеет прав на коннект куда-нибудь, кроме как к тому хосту, откуда он был загружен.

Ага, спасибо помогло. Подписанным апплетом варварски снес SecurityManager и все заработало  smile 

Это сообщение отредактировал(а) Akvel - 18.9.2008, 06:42
PM ICQ   Вверх
mullih
Дата 18.9.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 19.12.2006

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



Цитата(simanyay @ 19.5.2005,  16:42)
Веб сервис, с помощью Burlap, на Java меньше чем за минуту:

Необходимо:
1. Любой application server (Tomcat, Resin, etc.)
2. Библиотека Burlap

Делаем:
// Сторона сервера

1. Создаём интерфейс:
Код

package service;

public interface Basic {
    public String sayHello();
}


2. Создаём сервис:
Код

package service;

import com.caucho.burlap.server.BurlapServlet;

public class Hello extends BurlapServlet implements Basic {
    public String sayHello() {
        return "Hello";
    }
}


3. Деплоим сервис (в моём случае находится тут: http://localhost:8084/hello/Hello)

Доброго времени суток 
С вебом никогда отношения не имел. Может кто по подробнее объяснит 3-ий пункт  -- Деплоим сервис (используя Tomcat, если sever к этому пункту относится). Что это такое и как делается.
Заранее спасибо

Это сообщение отредактировал(а) mullih - 18.9.2008, 12:58
PM MAIL WWW Skype   Вверх
Akvel
  Дата 27.9.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 28.8.2007

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



Кто делал веб-сервиси с помощью Axis2? 
Все генерю утилитами для Eclipse   - Axis2 Codegen Wizard Plug-in и Axis2 Service Maker
Проблемы с пересылкой своих Exception при ошибках в методах
Клиенту приходит не мой Exception, а следующее

Код


org.apache.axis2.AxisFault: Мое сообщение
    at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:512)
    at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:370)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
    at mypac.MyServiceStub.getExcept(MyServiceStub.java:201)
    at mypac.StartCli.main(StartCli.java:22)



уже дней 5 копаю  smile 

PM ICQ   Вверх
Nikola661
Дата 15.10.2008, 11:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 14.5.2007

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



Вычитал, что можно использовать JAXB2.0. Но не могу понять как его установить и юзать.
PM MAIL   Вверх
SerialKiller9
Дата 9.12.2008, 12:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.2.2008

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



Здравствуйте!
Мне вэб-сервисы уже весь мозг расплавили, помогите проблему решить.
Сделал вэб-сервис на яве через связку Eclipse + JAX WS 2.1.5, там в принципе тривиально все создаешь только класс вэб-службы с аннотациями, опубликовал и все- вэб-служба работает. Сделал маленькое приложение в Visual Studio на С# абсолютно без проблем подключился к вэб-службе которую написал указав только URL где wsdl-ка лежит, потестил методы все классно. Начал делать клиентское приложение на яве и не получается... собственно в этом и проблема, привидите пожалста кусок кода в котором подключаетесь к вэб-службе только без всяких серверов приложений, а используя именно связку Eclipse с Jax WS )) надеюсь ктонить понял мой сумбурный пост , вообещм жду помощи  smile 
PM MAIL   Вверх
Maverick
  Дата 9.2.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



Господа, прошу знающего человека раписать каким образом можно рабоать со сложным пользовательским параметром в вебметоде вебсервиса... 
Использую JAXWS...

Проблема в следующем...  Имю вот тако метод на сервере...
Код

    @WebMethod(operationName = "enroll")
    public int enroll(
            @WebParam(name = "loginURI")            
            String loginURI, 
            @WebParam(name = "secretKey")            
            String secretKey, 
            @WebParam(name = "fields")            
            CertFields fields, 
            @WebParam(name = "username")            
            String username, 
            @WebParam(name = "CSR")            
            String CSR,
            @WebParam(name = "accessCode")            
            String accessCode) {
        return 0;
    }


Сложность представляет собой параметр fields... Это обычный pojo класс, где все поля - банальные стринги...

При попытке восопльзоваться им на клиенте имею следующее
Код

    public void enroll(){
        try {
            String loginURI = "";
            CertFields fields = new CertFields();
[font=verdana]            fields.setCountryName(new JAXBElement(new QName("com.comodo.webservice"), String.class, "value"));[/font]
            String username = "";
            String csr = "";
            String accessCode = "";
            Integer result = port.enroll(loginURI, secretKey, fields, username, csr, accessCode);
            System.out.println("enroll().result = "+result);
        } catch (Exception ex) {
            System.out.println("enroll().error" + ex.getMessage());
        }
    }


То есть заглушка вместо нормальных строных стрингов мутит какие то жаксб элементы... как от этого избавится толково??
Дело в аннотациях данного класса? Или вебсервиса??


--------------------
smile
PM ICQ GTalk   Вверх
Maverick
Дата 10.2.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1307
Регистрация: 22.9.2003
Где: Odessa, Ukraine

Репутация: 2
Всего: 10



разобрался... wsgen я делал, wsimport нет... а применять нужно в паре ))...


--------------------
smile
PM ICQ GTalk   Вверх
SectoR
Дата 17.2.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.10.2005

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



колдуны...

p.s.: Девид Блэйн со своей уличной магией отдыхает
p.s.s.: сорри за офтоп

Это сообщение отредактировал(а) SectoR - 18.2.2009, 00:44
PM   Вверх
Galaran
Дата 17.9.2009, 14:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 25.5.2009

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



Нашёл то, что долго искал: Веб сервис на Tomcat с использованием JAX-WS(без Axis). Может кому поможет:
http://www.coderanch.com/t/223670/Web-Serv...-Tomcat#1052758

Попробовал передать список своих типов

Код

public class HEntity {
      public String str;
      public long lng;
}
...
@WebService
public class Hello {
      
      @WebMethod (operationName = "method1")
      public List<HEntity> setGet(@WebParam(name = "list") List<HEntity> list) {
            return list;
      }
}


Клиент:
Код

public class Client {
      public static void main(String[] args) {
            HelloService s = new HelloService();
            Hello port = s.getHelloPort();

            HEntity en = new HEntity();
            en.str = "hello";
            en.lng = 666;
            HEntity en1 = new HEntity();
            en1.str = "hello1";
            en1.lng = 6665;
            ArrayList<HEntity> list = new ArrayList<HEntity>();
            list.add(en);
            list.add(en1);

            System.out.printf("%d, %s", port.setGet(list).get(0).lng,
                    port.setGet(list).get(1).str);
      }
}


Работает, как надо

Это сообщение отредактировал(а) Galaran - 13.10.2009, 23:21
PM MAIL   Вверх
dementiev
Дата 3.11.2009, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.2.2008
Где: Минск

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



Цитата(Galaran @  17.9.2009,  14:36 Найти цитируемый пост)
Работает, как надо

Получается, на клиенте есть такие же энтити-классы, как и на сервере? 

PM MAIL   Вверх
batigoal
Дата 7.11.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 16
Всего: 151



dementiev, да.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
akopium
Дата 10.11.2009, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 31.8.2009

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



Клева smile 
Читал на днях статью, оч просто и быстро
Надо будет попробоать по-серьезнее заюзать джакс-вс

Это сообщение отредактировал(а) akopium - 11.11.2009, 01:04
PM MAIL   Вверх
Galaran
Дата 10.11.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 25.5.2009

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



Цитата(dementiev @  3.11.2009,  19:29 Найти цитируемый пост)
Получается, на клиенте есть такие же энтити-классы, как и на сервере?


wsimport сгенерирует эти классы из WSDL файла

PM MAIL   Вверх
priam220
Дата 15.9.2011, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 1
Всего: 8



Хорошая тема, но она почему то закончилась в 2009 году... smile   
А что можно добавить к 2011 году? 

Это сообщение отредактировал(а) priam220 - 15.9.2011, 21:37
PM MAIL   Вверх
En_t_end
Дата 16.9.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

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



Цитата(priam220 @  16.9.2011,  01:37 Найти цитируемый пост)
А что можно добавить к 2011 году? 

http://ru.wikipedia.org/wiki/REST
http://en.wikipedia.org/wiki/Java_API_for_...ul_Web_Services
PM MAIL ICQ Skype GTalk Jabber   Вверх
priam220
Дата 16.9.2011, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 1
Всего: 8



А можно освежить пример простого вебсервиса с учетом соврменных тенденций. А то в начале пример за 2005 год....
Как минимум вышел axis2. Наверное еще что то... 
Хочется разобраться как создаются и с использованием чего вебсервисы сейчас. 
Спасибо.
ну хорошо, тогда просто скажите что такое jax-ws и чем оно отличается от axis. Что происходит сейчас с RMI, используется ли эта технология где то сейчас? 

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

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

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


 




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


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

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