Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > SOAP + JAVA


Автор: ruFog 5.5.2008, 12:40
Здравствуйте!

Подскажите пожалуйста начинающему Java-программисту! Необходимо реализовать связь клиента с удаленной базой данных через SOAP. Нужно реализовать как сервер (на Java), так и клиент (Swing + Java). Подскажите куда копать?

Читаю AXIS на офф сайте - достаточно сложно для новичка, имхо. Люди еще что-то о JBoss говорят. Подскажите какие инструменты более оптимальны и просты в эксплуатации? Может быть у Вас есть на примете какие-нибудь хорошие статьи по SOAP.

Большое спасибо!

PS: REST не подходит - нужны бинарные атачи.

Автор: Се ля ви 5.5.2008, 12:55
Какой бюджет проекта? В BEA Weblogic Workshop это реализовано довольно удобно, да и в IBM Rational Application Developer много чего для этого удобного есть, но за это нужно заплатить нехилую денежку, а вручную это писать действительно удобного инструментария я не знаю - в том числе и от JBoss`а, хотя если где его и искать, то, действительно, только у них. Правда они от поддержки Axis`а отказались и сейчас Web-сервисы реализуют в рамках собственного проекта http://www.jboss.org/jbossws/. Попробуй поискать соответствующие плагины под eclipse, потому что для IDEA плагин довольно неудобный, IMHO.

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

Автор: sysprog 15.5.2008, 17:47
Добрый день.

Столкнулся с подобной задачей, сервер-фасад JBoss, а клиент - PHP5 php_soap.dll

Подключиться к фасаду получается, но затем при вызове методов возникают ошибка авторизации:
SecurityException; nested exception is: 
    javax.security.auth.login.LoginException: Login Failure: all modules ignored

Исходя из того как ребята делали это на С# понял, что при вызове методов еще необходимо передавать sessionId в заголовке, и в этом вся загвоздка.

Код

    RemoteFacade.SessionHeaderValue = new SessionHeader();
    RemoteFacade.SessionHeaderValue.sessionId = 
                              RemoteFacade.login(lf.Login, lf.Password);


Вот несколько вариантов попытки вызова метода фасада на PHP через Soap. (Пишу в этой теме, т.к. ПХП программисты могут не знать JBoss)

1 Вариант. При создании объекта сразу передается логин и пароль:
Код

$client = new SoapClient($wsdl, array(
    "login"      => "superuser",
    "password"   => "",
    "trace"      => 1,
    "exceptions" => 0));

$curr = $client->__call("getCurrency", array("UAH"));
// выдается указанная выше ошибка



2 Вариант. Используем объект SoapHeader:
Код

$client = new SoapClient($wsdl,     
    "trace"          => 1,
    "exceptions" => 0);

$header = new SoapHeader("Authorization",
                           "sessionId",
                           $client->__call("login", array("superuser", ""))); // Получаем sessionId и пытаемся присвоить переменной из Namespace=Authorization (первый параметр)

$curr = $client->__call("getCurrency", array("UAH"), null, $header);
// выдается указанная выше ошибка


Подозреваю, что в этом случае может быть ошибка с установкой Namespace=Authorization, т.к. не исключено, что в Jboss Namespace будет другой. (Использовал по аналогии с другими форумами)

3 Вариант. Используем недокументированную функцию __setSoapHeaders
Код

$client = new SoapClient($wsdl,     
    "trace"          => 1,
    "exceptions" => 0);

$header = new SoapHeader( "Authorization", "sessionId", (string) $client->__call("login", array("superuser", "")));
$client->__setSoapHeaders(array($header)); // нормально устанавлива

$curr = $client->__call("getCurrency", array("UAH"));
// выдается указанная выше ошибка



Помогите, пожалуйста, нахожусь в полном замешательстве.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)