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. Сервис теперь стал доступным

Автор:  oldb0y [ 13 ноя 2014, 09:19 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Не компелирует классы. Что я упускаю
Код:
Сервер: вер. 6.0 сборка 1798 от 08.10.2014 11:47:26
    os: FreeBSD; java: OpenJDK Client VM, v.1.6.0_32
    ВНИМАНИЕ: Виртуальная машина OpenJDK Client VM не рекомендуется


Вложения:
Screenshot.png
Screenshot.png [ 70.39 КБ | Просмотров: 17623 ]

Автор:  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?
---
http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%BE%D0%B2
сложно сказать правильно ли понимате, т.к. по ссылке только ваш пункт 4 похож на то, что там описано, остального там даже близко нету же. или я вообще не понимаю ччто вы хотите в итоге получить.

Автор:  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/