forum.bitel.ru http://forum.bitel.ru/ |
|
Механизм реализации custom API - ? http://forum.bitel.ru/viewtopic.php?f=19&t=7254 |
Страница 2 из 3 |
Автор: | 2ray [ 24 сен 2014, 11:14 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
skn писал(а): 2ray писал(а): skn писал(а): на сервере в webroot/WEB-INF/web.xml есть apiexecuter? нету а какие последние обновления стоят? Старые. Я уже подсунул обновленный web.xml. Сервис теперь стал доступным |
Автор: | dimOn [ 13 ноя 2014, 11:30 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
там же всё максимально подробно написано в сообщениях об ошибке |
Автор: | stark [ 13 ноя 2014, 12:10 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
вы файл класса обозвали impl, а не ContractSearchImpl |
Автор: | oldb0y [ 13 ноя 2014, 13:50 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Протупил... Спасибо |
Автор: | boogie [ 27 ноя 2014, 17:38 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Написал класс согласно инструкции. Полное имя класса - "api.net.sparktell.bgbilling.service.impl.BillServiceImpl". В BGBillingServer/data/data.properties внес "api.enable=true". Сервер перезапустил. В BGBillingServer/webroot/WEB-INF/web.xml есть сервлет "apiexecuter", и его маппинг в "/api/*". В ответ на запрос https://-----.---/bgbilling/api/net.spa ... rvice?wsdl получаю 404. Что я делаю не так? |
Автор: | skn [ 27 ноя 2014, 21:52 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
класс написан в дин. коде? скомпилирован без ошибок? |
Автор: | boogie [ 27 ноя 2014, 21:59 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
skn писал(а): класс написан в дин. коде? Да. skn писал(а): скомпилирован без ошибок? Да. |
Автор: | Amir [ 27 ноя 2014, 21:59 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
В логах после попытки открытия страницы нет ошибок? |
Автор: | boogie [ 27 ноя 2014, 22:17 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Проблема оказалась на моей стороне -- косяк в настройке reverse proxy. |
Автор: | boogie [ 28 ноя 2014, 18:55 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Теперь другая проблема: из-за того, что я использую reverse proxy, мне необходимо изменить soap:address location в WSDL. Как я могу это сделать? |
Автор: | skn [ 28 ноя 2014, 20:47 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
wsdl не обязательно использовать вам она точно нужна? (как вариант можете использовать анатации - http://docs.oracle.com/javase/7/docs/ap ... rvice.html) |
Автор: | boogie [ 28 ноя 2014, 20:51 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
skn писал(а): wsdl не обязательно использовать вам она точно нужна? У меня есть подозрение, что на него ориентируется 1С |
Автор: | skn [ 28 ноя 2014, 20:53 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
boogie писал(а): skn писал(а): wsdl не обязательно использовать вам она точно нужна? У меня есть подозрение, что на него ориентируется 1С попробуйте - http://docs.oracle.com/javase/7/docs/ap ... rvice.html или nginx'ом ответ биллинга подкоректируйте |
Автор: | Amir [ 29 ноя 2014, 13:44 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
1. Можно сохранить wsdl и xsd на которые он ссылается, в нем исправить URL и использовать этот wsdl-файл вместе с xsd-файлами. 2. В Web-service-клиентах обычно есть возможность использовать URL не из WSDL. |
Автор: | Phricker [ 27 ноя 2015, 13:18 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Победил 1цэ все же |
Автор: | Phricker [ 05 дек 2015, 02:01 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
С другой стороны, пример описанный по ссылке, в случае с 1цэ приведет к лишним проверкам со стороны 1цэ. Элементы которые вернутся как Код: <ContractComment/> в 1цэ будут писать Код: ContractComment = ОбъектXDTO; Можно @XmlElement описать следующим образом Код: @XmlElement(name = "SubList", nillable = true) protected String subList; @XmlElement(name = "Manager", nillable = true) protected String manager; И тогда в xml будет возвращаться Код: <ns2:Agent1C> <ContractId>38</ContractId> <ContractTitle>101000017</ContractTitle> <ContractComment/> <AgentContractCode>333</AgentContractCode> <SubList xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> <Manager xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> </ns2:Agent1C> с чем 1цэ будет корректно работать и считать что в них пусто. Код: ContractId = 38; ContractTitle = 101000017; ContractComment = ОбъектXDTO; AgentContractCode = 333; SubList = ContractId = 39; ContractTitle = 101000018; ContractComment = Lenovo Inc; AgentContractCode = 444; SubList = Но тогда необходимо и там где будет отдаваться String = "", тоже возвращать NULL. Например так Код: String comment = Utils.maskBlank(rs.getString("c.comment"),null); Тогда будет 1цэ будет работать корректно. Код: ContractId = 36; ContractTitle = 101000015; ContractComment = ООО "Рога и копыта"; AgentContractCode = 111; SubList = 37 ContractId = 38; ContractTitle = 101000017; ContractComment = ; AgentContractCode = 333; SubList = ContractId = 39; ContractTitle = 101000018; ContractComment = Lenovo Inc; AgentContractCode = 444; SubList = Возможно и не только он |
Автор: | Nyan [ 19 окт 2016, 00:49 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Коллеги, прошу прощения за археологию, но в тему. Биллинг 6.1, 6.2 (поддерживаем две версии). Хочу создать свой WEB-сервис и дергать его через JSON-RPC. В качестве эксперимента создал в дин. коде класс api.ru.company.bgbilling.service.impl.KContractServiceImpl. Код скопировал из второго сообщения этой темы. Делаю POST запрос на URL http://x.x.x.x:8080/bgbilling/executer/ ... actService с телом Код: { "method": "updateContractFIO", "user": { "user": "admin", "pswd": "admin" }, "params": { "contactId": 1, "fio": "test" } } Сервер отвечает следующее: Код: { "status": "error", "exception": "ru.bitel.bgbilling.common.BGException", "message": "Не найден сервис: ru.company.bgbilling.service:KContractService", "tag": null, "data": {} } Код: api.enable=true сделал. В чем может быть ошибка? В server.error.log: Код: server 10-18/12:59:34 ERROR [http-bio-0.0.0.0-8080-exec-1] JsonWsHandler - Не найден сервис: ru.company.bgbilling.service:KContractService ru.bitel.bgbilling.common.BGException: Не найден сервис: ru.company.bgbilling.service:KContractService at ru.bitel.bgbilling.kernel.container.ws.server.JsonWsHandler.handle(JsonWsHandler.java:271) at bitel.billing.server.Executer.doPost(SourceFile:158) at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) skn писал(а): на сервере в webroot/WEB-INF/web.xml есть apiexecuter? Этого нет. Файл из дистрибутива биллинга, без изменений. Где можно взять изменения, если дело в этом? В чем может быть проблема? Куда копать? Заранее спасибо за помощь. |
Автор: | Phricker [ 19 окт 2016, 02:53 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Nyan писал(а): Делаю POST запрос на URL http://x.x.x.x:8080/bgbilling/executer/ ... actService с телом skn писал(а): обращание к сервису по адресу:
Код: http://host[:port]/[context/]api/[module]/[service] возвращает soap |
Автор: | skn [ 19 окт 2016, 11:13 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Вы пытается использовать две технологии одновременно, json-rpc и custom api. Да ещё и в старых версиях. Так не работает. |
Автор: | Nyan [ 19 окт 2016, 11:26 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
skn писал(а): Вы пытается использовать две технологии одновременно, json-rpc и custom api. Да ещё и в старых версиях. Так не работает. А разве custom API это не синоним для понятия "свой WEB-сервис" и для него не применим пункт 8.3 из документации (https://bgbilling.ru/v6.1/doc/ch02s08.html)? Phricker писал(а): Nyan писал(а): Делаю POST запрос на URL http://x.x.x.x:8080/bgbilling/executer/ ... actService с телом skn писал(а): обращание к сервису по адресу: Код: http://host[:port]/[context/]api/[module]/[service] возвращает soap Мне показалось весьма логичным, что "json" в URL сообщает обработчику запросов о моем намерении использовать JSON вместо SOAP. Если нет, то возможно ли писать свои классы в биллинге версии 6.1 (или хотя бы 6.2) для реализации механизма JSON-RPC? Если да, то каким образом? |
Автор: | skn [ 19 окт 2016, 17:25 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Nyan писал(а): Мне показалось весьма логичным, что "json" в URL сообщает обработчику запросов о моем намерении использовать JSON вместо SOAP. Если нет, то возможно ли писать свои классы в биллинге версии 6.1 (или хотя бы 6.2) для реализации механизма JSON-RPC? Если да, то каким образом? если внимательно посмотреть то json и custom api используют разные обработчики запросов и совсем не обязательно что ключи от одного обработчика должны подходить к другому. написать можно все что угодно, если знать как. |
Автор: | Nyan [ 19 окт 2016, 23:05 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
skn писал(а): написать можно все что угодно, если знать как. Резонное замечание А можно поподробнее, как? |
Автор: | skn [ 19 окт 2016, 23:11 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Пишите в хелпдеск |
Автор: | iseed [ 13 апр 2017, 09:55 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Извиняюсь что апаю старую тему, но столкнулся с той же проблемой. Имею Сервер: вер. 6.1.1176 / 04.08.2016 11:09:55 Пробую реализовать 8.3. Web - сервис через JSON RPC по доке https://bgbilling.ru/v6.1/doc/ch02s08.html Написал тестовый класс http://joxi.ru/YmE8Klzf0GWGZr скомпилировал без ошибок http://joxi.ru/xAeJLZgSpMBMLr Отписал в конфиге api.enable=true Вызываю его http://joxi.ru/E2pVz7EF9v1v7r получаю ошибку JsonWsHandler - Не найден сервис: ru.bitel.bgbilling.api:Contract Пробовал размещать код в ru.bitel.bgbilling.api.ContractImpl и в ru.bitel.bgbilling.api.Contract Результат тотже. И естественно не забывал после каждого изменения производить перезагрузку сервера. Начал копать в коде (JsonWsHandler) http://joxi.ru/bmokxyEtxOWOOm (JaxWsHandler) http://joxi.ru/D2P4KNzhpwxw62 Насколько я понял берется хвост после /json и пилиться на составляющие ru.bitel.bgbilling.api(модуль) Contract(сервис). Если динкласс не описан то пробует вызывать класс из составляющих e1 = module + ".server." + service + "Impl"; Те вроде все верно, а куда дальше копать ума не приложу. Может у кого есть success story для новичка? |
Автор: | skn [ 13 апр 2017, 11:40 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Custom API и JSON RPC вместе не работают |
Автор: | dimOn [ 13 апр 2017, 12:12 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
вернее: Custom API через JSON RPC не работает. json rpc это способ вызывать обычные сервисы. Custom API это совсем другое, вам оно не нужно в вашей задаче настраивайте как обычные dynservice и всё |
Автор: | iseed [ 13 апр 2017, 13:49 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Я правильно понимаю логику создания dynservice? --- http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%BE%D0%B2 --- 1) Сначала собрать базовый класс отвечающий на вызов сервлета и подгрузить как jar. http://joxi.ru/DrlNvxgFvKEBe2 2) Добавить настройки для вызова сервлета http://joxi.ru/D2P4KNzhpwxP12 3) Создать расширение оборачивающее основную логику класса в динамическом коде http://joxi.ru/52a85Wgf4lnzKm не забыть скомпилировать. 4) Потом отписать в конфиге биллинга вызов dynservice http://joxi.ru/L21v9g6f8wJb6A 5) Перезагрузить биллинг процесс. Вызов серверлета работает (http://joxi.ru/Vrw3VGEIOozPRr), а вот обернуть классом из динамического кода не получается. Вероятно чтото не так делаю. |
Автор: | dimOn [ 13 апр 2017, 15:20 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
а, так вам ещё и свой сервлет нужно? ну тогда причём тут все эти настройки? вам надо там явно вызывать ваш дин.код оттуда и всё самим обрабатывать, очевидно. только поясните зачем вам ещё один сервлет, почему не вызывать текущим executer просто обычный dynservice? в точности как написано на wiki всё сделать и всё. что именно там не хватает для вашей задачи? это всё настройки не для вызова сервлета, а для вызова новых или перегрузки старых вебсервисов биллинга. сервлеты там вообще ни при чём, конечно их не получится обернуть из динкода, тем более через настройку dynservice, которая настройка для веб-сервисов. какая у вас задача то вообще? непонятно, у вас и сервлеты, и api.enabled и дин.сервисы - всё в куче, малосвязанные вещи друг с другом. Цитата: Я правильно понимаю логику создания dynservice? сложно сказать правильно ли понимате, т.к. по ссылке только ваш пункт 4 похож на то, что там описано, остального там даже близко нету же. или я вообще не понимаю ччто вы хотите в итоге получить.
--- http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%BE%D0%B2 |
Автор: | iseed [ 13 апр 2017, 16:35 ] |
Заголовок сообщения: | Re: Механизм реализации custom API - ? |
Вы сказали что Custom API через JSON RPC не работает. Значит мне это не подходит. Я хочу просто вызывать свой написанный дин код через http. Выдавать ответы через json формат. Классы и методы которые нужно вызывать собственнописанные, а не встроенные. И нужно чтобы не приходилось на каждое изменение кода в классе перезапускать биллинг. В сумме за 2 дня я перепробовал все варианты (custom Api, dynservice, servlet) и не один не подходит под описанное мной выше. Поэтому и остался ключ api. Идея с сервлетом нужна, для того чтобы не обращаться через executer и переопределить созданный мной WebClient через dynservice. Через него вызывать уже необходимые мне классы из динкода. И чтобы можно было на лету без перезагрузки сервера. применять изменения в библиотеках. Я правильно понял, что в случае с сервлетом мне все придется подтягивать самостоятельно. Те если мне нужно получать данные из папки с dyn кодом то мне нужно будет придумать собственный загрузчик файлов *.java и тп... А более простой вариант с подтягиванием без перезагрузки биллинга есть? |
Страница 2 из 3 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |