Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
1

Написание на java Клиента к уже готовому (wsdl) web сервису

18.10.2015, 16:24. Показов 9468. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе времяни суток, уважаемые форумчани подскажите пожалуйста как написать клиентское приложение к уже готовому web сервису.
Я знаю по какому адресу находится wsdl сервис. И знаю путь до самой схемы.
Схема выглядит следующим образом.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!-- Published by JAX-WS RI ([url]http://jax-ws.java.net[/url]). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. 
-->
<!-- Generated by JAX-WS RI ([url]http://jax-ws.java.net[/url]). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. 
-->
<definitions targetNamespace="http://Server/" name="ServerService">
    <types/>
    <message name="Query">
        <part name="arg0" type="xsd:string"/>
    </message>
    <message name="QueryResponse">
        <part name="return" type="xsd:string"/>
    </message>
    <portType name="ServerImpl">
        <operation name="Query">
            <input wsam:Action="http://Server/ServerImpl/QueryRequest" message="tns:Query"/>
            <output wsam:Action="http://Server/ServerImpl/QueryResponse" message="tns:QueryResponse"/>
        </operation>
    </portType>
    <binding name="ServerPortBinding" type="tns:ServerImpl">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
        <operation name="Query">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal" namespace="http://Server/"/>
            </input>
            <output>
                <soap:body use="literal" namespace="http://Server/"/>
            </output>
        </operation>
    </binding>
    <service name="ServerService">
        <port name="ServerPort" binding="tns:ServerPortBinding">
            <soap:address location="http://localhost:19999/gateway/query"/>
        </port>
    </service>
</definitions>
Подскажите как можно написать клиентское приложение.
Заранее благодарю за ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2015, 16:24
Ответы с готовыми решениями:

Доступ к web-сервису
Всем привет! Похожая тема в форуме есть, но немного не то. Собственно в чем вопрос. Есть...

Добавить web форму к готовому не web проекту
Здравствуйте. Есть задание, реализовать приложение, которое будет иметь 4 графических...

Не могу подключиться к web сервису
Всем привет. ) Нашел в интернете пару примеров по работе с веб-сервисами в 1С. Нажимаю в...

WSDL-Web Service Consumer
Втянул wsdl через Web Service Consumer. Как теперь подключить эту библиотеку в java-агент? Можно...

22
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 17:05 2
Programer, можно сгенерировать классы плагином эклипса http://sourceforge.net/projects/wsdl2javawizard/

Так же можно встроенным джава тулом http://www.mkyong.com/webservi... l-example/
0
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
18.10.2015, 17:08 3
Programer, в нетбинсе например, файл->новый->клиент_веб_службы, и пишите url
0
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 17:28  [ТС] 4
ребята меня интересует возможно ли написать клиент полностью с нуля знаю только wsdl документ и адрес сервиса?
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 17:44 5
Programer, да.
0
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 17:47  [ТС] 6
KEKCoGEN, Поскажи пожалуйста пример.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 17:48 7
Programer, вы по ссылкам выше ходили и все прочитали и попробовали? Судя по скорости ответа вряд ли. Там именно пример и есть.
0
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 18:20  [ТС] 8
KEKCoGEN, Дело в том что когда я пишу сервис сам, то в клиент я вставляю откомпеленый пакет в котором у меня логика самого приложения. А вот как мне сделать так что бы, имея только wsdl схему и адрес мне написать подобного рода клиент пока не пойму.
так как клиенты я планирую написать на java а так же на c++.
Но сейчас бы хотелось понять концепцию. работы. Вообще схемы в целом.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 18:24 9
Programer, насчет С++ это не тут. Адрес вы сами сказали что у вас есть. Все методы описаны в всдл. Больше для клиента ничего не требуется.
0
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 19:26  [ТС] 10
KEKCoGEN, ну вот к примеру я когда пишу клиент это у меня выглядит вот так.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package ClientWeb;
 
// нужно, чтобы получить wsdl описание и через него
// дотянуться до самого веб-сервиса
import java.net.URL;
// такой эксепшн возникнет при работе с объектом URL
import java.net.MalformedURLException;
 
// классы, чтобы пропарсить xml-ку c wsdl описанием
// и дотянуться до тега service в нем
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
 
// интерфейс нашего веб-сервиса (нам больше и нужно)
import Server.Server;
 
public class ClientWeb {
    public static void main(String[] args) throws MalformedURLException {
        String ip = "localhost";
        // создаем ссылку на wsdl описание
        URL url = new URL("http://"+ip+":19999/gateway/query?wsdl");
 
        // Параметры следующего конструктора смотрим в самом первом теге WSDL описания - definitions
        // 1-ый аргумент смотрим в атрибуте targetNamespace
        // 2-ой аргумент смотрим в атрибуте name
        QName qname = new QName("http://Server/", "ServerImplService");
 
        // Теперь мы можем дотянуться до тега service в wsdl описании,
        Service service = Service.create(url, qname);
        // а далее и до вложенного в него тега port, чтобы
        // получить ссылку на удаленный от нас объект веб-сервиса
        Server hello = service.getPort(Server.class);
 
        // Ура! Теперь можно вызывать удаленный метод
        System.out.println(hello.Query("SELECT * FROM MON$ATTACHMENTS;"));
    }
}

мне приходится портировать

import Server.Server;

он у меня есть.
А вот если я пишу клиент к какому то внешнему источнику где доступа к исходному коду у меня нет.
Как быть в этом случае.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 20:29 11
Цитата Сообщение от Programer Посмотреть сообщение
мне приходится портировать
import Server.Server;
а если пишите сами, то надо сгенерировать этот класс на основе WSDL. Вы удивитесь, но это тоже написанно по приведенной мной ссылке.
0
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 21:27  [ТС] 12
KEKCoGEN, я посмотрел, Так же когда погружался в эту тему то видел что есть такие возможности. Но если честно ни разу не пробовал. Наверное стоит попробовать. Можешь еще раз ссылку привести прям на подобное решение буду очень благодарен.
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
18.10.2015, 21:31 13
Цитата Сообщение от Programer Посмотреть сообщение
Можешь еще раз ссылку привести
зачем два раза приводить одну и ту же ссылку? Пролистайте выше несколько постов, вы её найдете
1
0 / 0 / 0
Регистрация: 29.08.2014
Сообщений: 214
18.10.2015, 22:21  [ТС] 14
KEKCoGEN, ок. Буду разбираться.
0
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 11
13.04.2018, 23:37 15
Доброго дня. Хочу поднять данную тему.
Есть классы созданные wsimport-ом, есть схема, короче есть всё, что нужно.
Не знаю с чего начать писать программу.
Не приходилось еще работать с wsdl и soap.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
14.04.2018, 12:07 16
Цитата Сообщение от ilya_weber Посмотреть сообщение
Не знаю с чего начать писать программу.
Начните с установки JDK и IDE.
Или вы другой ответ ожидаете получить?
1
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 11
14.04.2018, 12:23 17
Цитата Сообщение от reisal78 Посмотреть сообщение
Начните с установки JDK и IDE.
Или вы другой ответ ожидаете получить?
Спасибо, совет действительно дельный.
Но я указал, что выполнил импорт классов при помощи wsimport, значит, логично предположить что jdk у меня уже стоит. IDE вопрос такой, на любителя. Может быть мне по кайфу в Notepad++ писать и компилить в командной строке?
Ладно, шутки шутками.
Честно говоря, я уже частично разобрался. Меня тут более приземленный конкретный пример интересует.
Есть сервис налоговой http://npchk.nalog.ru/. И есть возможность доступа к нему при помощи SOAP.
Описание здесь http://npchk.nalog.ru/ws2.doc.
В пакете импортированных классов, есть некий класс NdsRequest2.java. Вот не могу понять механизм, как с ним работать.
По идее, нужно создать экземпляр этого класса, передать его в качестве параметра, и получить ответ типа NdsResponse2.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
14.04.2018, 13:26 18
че те от форума то надо?
0
0 / 0 / 0
Регистрация: 08.02.2018
Сообщений: 11
14.04.2018, 16:57 19
Цитата Сообщение от xoraxax Посмотреть сообщение
че те от форума то надо?
Уже ничего. Дождёшься тут помощи... сам в итоге во всём разобрался.
У кого будут подобные вопросы, стучите в личку, постараюсь ответить.
0
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
14.04.2018, 21:42 20
Цитата Сообщение от ilya_weber Посмотреть сообщение
Дождёшься тут помощи...
Что бы получить ответ - нужно задать вопрос.
Цитата Сообщение от ilya_weber Посмотреть сообщение
Честно говоря, я уже частично разобрался. Меня тут более приземленный конкретный пример интересует.
Есть сервис налоговой http://npchk.nalog.ru/. И есть возможность доступа к нему при помощи SOAP.
Описание здесь http://npchk.nalog.ru/ws2.doc.
В пакете импортированных классов, есть некий класс NdsRequest2.java. Вот не могу понять механизм, как с ним работать.
По идее, нужно создать экземпляр этого класса, передать его в качестве параметра, и получить ответ типа NdsResponse2.
Вопроса то не видно. Одно дело разжевать что то человеку, который три дня назад раскрыл книгу по java. И совершенно другое отношение к тому кто лезет в ЕЕ технологии. Если человек не способен нагулить один из примеров, коих в сети 100500 штук, то на него и время тратить не стоит все равно мимо пройдет. А вот если человек застрял на чем то конкретном, то можно и помочь...
0
14.04.2018, 21:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2018, 21:42
Помогаю со студенческими работами здесь

Как организовать доступ к web-сервису?
Создал простениький веб-сервис на Delphi. Есть xml-файл описания функций. Могу создать ActiveX -...

Передача массива Web-сервису (Пояснить код)
Добрый день! Возникла необходимость передать массив в качестве параметра в одной из функций...

Http запрос к Web-сервису после успешной авторизации
Привет всем! Нуждаюсь в помощи при создании правильного запроса. У меня клиент-приложение посылает...

WSDL to Java
Погенерил библиотеки с WSDL файлов с помощью maven cxf-codegen-plugin. Есть вопрос по этому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru