|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Доброго дня! Кто-нибудь использовал сервис получения курса валют от нашего родного Центробанка? Само описание сервиса здесь http://www.cbr.ru/scripts/Root.asp?PrtId=DWS WSDL здесь http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL При попытке импорта через wsimport валится ошибка [ERROR] undefined element declaration ’s:schema’ поскольку на wildcard элементы any в wsdl указано <s:sequence> <s:element ref="s:schema"/> <s:any/> </s:sequence> Поиски по сети особо ни к чему не привели. Все пишут, что с генерацией клиента для SOAP сервиса центробанка средствами java проблемы, однако решений никто не дает. Есть такая вот записка на эту тему http://nikcode.blogspot.ru/2011/08/microsoft.html Однако, самая суть - что в биндингах xjb там отсутствует (( Общение с автором тоже ничего не дало - статья старая, он уже ничего не помнит (( Возможно, кто-нибудь все же решил проблему генерации клиента с помощью JAX-WS или AXIS и готов поделиться, за что я бы был ему весьма благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 09:51 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeev, Их wsdl создан в Visual Studio, как и сам сервис, а у Microsoft как водится всегда свои понятия о стандартах. Надо локальную копию этого wsdl вручную привести к понимаемому axis виду и потом сгенерить по нему web service consumer. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:05 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeev, Ищите по форуму. Тут уже 3 или больше тем было с тем же вопросов. В одной из них я объяснял что нужно руками поменять в WSDL. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:06 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
GarrickИх wsdl создан в Visual Studio, как и сам сервис, а у Microsoft как водится всегда свои понятия о стандартах. Последнее время они, кстати, исправляются. Но вот с валидацией у них слабенько и юзвери могут в WSDL любую галиматью накликать. GarrickНадо локальную копию этого wsdl вручную привести к понимаемому axis виду и потом сгенерить по нему web service consumer. Axis тут вообще не при чем. Надо скачать WSDL, сначала прогнать валидатором, исправить ошибки, а затем уже wsimport пробовать и править ошибки, которые он показывает. В большинстве случаев можно просто <s:element ref="s:schema"/> удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:08 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
И. кстати, только что попробовал AXIS 1.4 немного поругался "schema already exists", но классы сгенерил. А вот wsimport генерить отказывается - говорит "кривой у вас wsdl". :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:35 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, Axis 1.4 что-то генерить умеет? Мне казалось Axis 1.x сугубо на строках работает. Ему пофигу что там вообще в WSDL. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 10:52 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
BlazkowiczGarrick, Axis 1.4 что-то генерить умеет? Мне казалось Axis 1.x сугубо на строках работает. Ему пофигу что там вообще в WSDL. WSDL2Java: Building stubs, skeletons, and data types from WSDL ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 11:09 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Спасибо всем за советы! В общем импортировал я все это добро утилитой wsimport, добавив биндинг Код: java 1.
customization.xjb сделал вот таким Код: 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.
так же набросал небольшое приложение https://github.com/rgordeev/cbr Однако, весьма печалит, что вызов метода сервиса Код: java 1.
возвращет объект GetCursOnDateXMLResult в котором метод getContent() возвращает список с единственным элементом ElementNSImpl, в котором можно получить узлы getElementsByTagName и в цикле все это добро обрабатывать. Хочется же преобразовать все это в source scala и разбирать партером Scala Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2015, 23:03 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, доброго дня! А при генерации клинта Аксисом методы доспупа тоже будут возвращать уже разобранный ответ сервера? То есть опять будет структура из ElementNSImpl элементов, по которую нужно бегать, или ответ будет в какой-то другой форме? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 12:18 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeevGarrick, доброго дня! А при генерации клинта Аксисом методы доспупа тоже будут возвращать уже разобранный ответ сервера? То есть опять будет структура из ElementNSImpl элементов, по которую нужно бегать, или ответ будет в какой-то другой форме? Ну, так у них же написано: Методы веб - сервиса, названия которых оканчиваются на XML, возвращают данные в формате "простых" XML документов без использования схем и предназначены для систем построенных не на платформе .NET Framework. Может стоит попробовать метод без XML? По описанию getCursOnDate(java.util.Calendar on_date) возвращает GetCursOnDateResponseGetCursOnDateResult , а не XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 16:49 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
GarrickМожет стоит попробовать метод без XML? По описанию getCursOnDate(java.util.Calendar on_date) возвращает GetCursOnDateResponseGetCursOnDateResult , а не XML.Эти методы для .NET предназначены. Там они возвращают таблицы. И код там соответственно очень простой... Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 17:02 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Dim666, Ну, есть же известные способы борьбы с этим злом. Погуглите что-нибудь тип "parsing .NET dataset from java" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 17:36 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, возможно я открою Вам секрет, но методы без XML в конверте получают тоже, сюрприз, XML Вот такой ответ приходит Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
просто как и говорится в сообщении, выделенном курсивом, этот ответ содержит еще и схему, позволяющую клиенту на dot net его более эффективно разбирать. Для клиента на java эти вкропления схемы в каждый атрибут будут только мешать )) Меня же интересует вот такой момент. При вызове метода сгенерированного клиента я получаю уже разобранный ответ, то есть набор элементов ElementNSImpl при чем оно не плоское в том смысле, что приходится делать как обход по узлам-тегам, так и по узлам-атрибутам, что порождает вложенные неприятные циклы. А хочется все делать по феншую так сказать, вот чего я хочу добиться )) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 18:21 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, на самом деле можно заморочиться и самому формировать SOAP запросы и разбирать ответы как-нибудь вот так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
но блин, неужели в 21 веке нужно еще нужно писать кучу г на простую задачу получения плоской таблички (( ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 18:30 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeev, У вас есть два простых способа: 1. там где в wsdl написано Код: xml 1. 2. 3. 4. 5. 6.
Опишите тип возвращаемого значения как положено по стандарту. Тогда wsdl2java или wsimport сгенерят вам правильный набор классов и вы будете получать в ответ не длинную XML строку, а набор объектов Java. 2. Отредактируйте сгенерённые классы таким образом, чтобы при возврате запроса эта XML строка парсилась и возвращался вместо неё какой-нибудь List, а лучше Map если вам потом из этой кучи надо отобрать какие-то типы валют. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 22:16 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeev, ... ну и сами понимаете кого надо благодарить за весь этот геморрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 22:18 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, а что тут положено по стандарту? Какой тип нужно вешать на wildcard? Код: xml 1. 2. 3. 4. 5. 6.
Мне кажется элемент schama тут исключительно для .net клиентов, которые используют при разборе еще и схему. Вот генерированный объект ответа для клиентов .net https://github.com/rgordeev/cbr/blob/master/src/main/java/cbr/client/GetCursDynamicResponse.java Ну и кроме того, вызов соответствующего метода клиента вовсе не возвращает строку, как я и писал выше, ответ разбирается ксерксом в набор связанных ElementImpl. Собственно генерированный объект ответа для всех остальных клиентов, отличных от .net, вот https://github.com/rgordeev/cbr/blob/master/src/main/java/cbr/client/GetCursOnDateXMLResponse.java Только как его можно поправить, чтобы иметь возможность получить какую-либо другую структуру данный в ответ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2015, 23:15 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
rgordeevGarrick, а что тут положено по стандарту? Какой тип нужно вешать на wildcard? У вас же есть схема с описанием, вы сами её привели в своём сообщении SOAP сервис от Центробанка РФ . Последняя строка состоит из описания схемы и следующим за ней набором данных. И это два разных элемента, что упрощает разбор. Попробуйте пропустить её через JAXB/XJC оно вам ещё и Java классы нагенерит для этой структуры. rgordeevМне кажется элемент schama тут исключительно для .net клиентов, которые используют при разборе еще и схему. Ну, да. И что в этом страшного? Оно же не в каком-то неизвестном бинарном файле данные возвращает, а в XML. Вполне читаемо. Через ж... конечно и не соответствует стандарту, но с M$ всегда так. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 11:19 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
там в any лежит элемент вида Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
можно в принципе по описаниям ответов на сайте наделать классов и для нужных функций заменить any на эти классы, чтобы сразу разбиралось ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 12:36 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
ivanraтам в any лежит элемент вида Это уже данные, а перед ними схема должна быть Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 14:01 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
Garrick, то, что схема передается в ответе, нам не поможет. Все эти классы надо сформировать заранее. Например: ValuteData Код: 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.
теперь в класс GetCursOnDateResult можно внести следующие изменения GetCursOnDateResult Код: 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.
после этого можно работать непосредственно со списком: Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 15:48 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
ivanraGarrick, то, что схема передается в ответе, нам не поможет. Все эти классы надо сформировать заранее. Да, конечно. Вопрос был, как я понял, "где взять описание этих классов", поэтому я указал на схему, которая передаётся в заголовке DataSet. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 16:07 |
|
SOAP сервис от Центробанка РФ
|
|||
---|---|---|---|
#18+
...хотя XJC может и классы сгенерить по схеме, надо только скопилить их и подсунуть своей программе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2015, 16:09 |
|
|
start [/forum/topic.php?fid=59&msg=39117092&tid=2120544]: |
0ms |
get settings: |
23ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
25ms |
get forum data: |
3ms |
get page messages: |
697ms |
get tp. blocked users: |
2ms |
others: | 311ms |
total: | 1155ms |
0 / 0 |