BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 16 июн 2025, 18:33

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: [решено] Web-сервисы и json [6.2.872]
СообщениеДобавлено: 26 май 2015, 13:38 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Перевожу внешний скрипт с экшнов на web-сервисы. В модуле Inet при добавлении (редактировании) сервиса случился затык.
Все параметры для составления JSON-запроса получил из дебаг-лога биллинга и добавив нужный сервис.
Обращаюсь к серверу так:
Код:
http://bgbilling:8080/bgbilling/executer/json/ru.bitel.bgbilling.modules.inet.api/12/InetServService

Отправляю данные:
Код:
{"method" : "inetServUpdate",
"user" :{ "user" : "bguser", "pswd" : "bgpass" },
   "params" : { 
            "inetServ" : {
         "accessCode": 0,
         "addrFrom": "CgEEkw==",
         "addrTo":"CgEEkw==",
         "cid": "50000",
         "coid":"0",
         "dateFrom": "2015-05-26T00:00:00+12:00",
         "devState": "0",
         "deviceTitle":"Папка: PPPoE",
         "did": "2",
         "id": "0",
         "ifaceId": "-1",
         "ipResId":"0",
         "ipResSubsriptionId": "0",
         "parentId":"0",
         "passw":"clientpswd",
         "scid":"0",
         "sessCntLimit":"1",
         "status":"0",
         "typeId":"1",
         "uname":"clientlogin",
         "vlan":"-1",
         "comment": "",
         "config": "",
         "identifierList": [],
         "macList": ""         
         },
      "generateLogin":"false",
      "generatePassword":"false",
      "saWaitTimeout":"0"
      }
}

В ответе получаю:
Код:
{
    "status": "error",
    "exception": "java.lang.NullPointerException",
    "message": null,
    "data": {}
}

В логе сервера:
Цитата:
java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor161.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at ru.bitel.bgbilling.kernel.container.service.server.ServiceInfo.invoke(ServiceInfo.java:101)
at ru.bitel.bgbilling.kernel.container.ws.server.JsonWsHandler.handle(JsonWsHandler.java:255)
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)
Caused by: java.lang.NullPointerException
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.checkLoginSymbols(InetServServiceImpl.java:784)
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.setAndCheckLoginPassword(InetServServiceImpl.java:340)
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.inetServUpdateInternal(InetServServiceImpl.java:256)
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.inetServUpdate(InetServServiceImpl.java:233)
... 25 more

Куда копать? Как исправить?


Последний раз редактировалось TrUsTeR 29 май 2015, 14:09, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 26 май 2015, 13:46 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
поле логин надо заполнить пустой строкой. Хотя это надо исправить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 26 май 2015, 14:01 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Спасибо! Т.е. параметры в логе биллинга и для web-сервисов через json отличаются? В запросе выше добавил (с пустой строкой биллинг не захотел, отвечал такой логин уже есть)
Код:
"login":"clientlogin"

теперь хоть биллинг понятные ошибки выдает - пишет, что якобы пароль не указан, хотя поле passw указано. Подбором получилось указать пароль так, не знаю верно ли:
Код:
"password":"clientpswd"

теперь пишет "Не указан IP адрес", хотя опять же - параметры addrFrom и addrTo забиты.
Что я делаю не так? Или где можно глянуть тогда актуальные параметры?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 27 май 2015, 11:16 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Добавил в параметры выше следующее:
Код:
"login":"clientlogin",
"password":"clientpswd",
"addressFrom":"CgEEkw==",
"addressTo":"CgEEkw=="

Теперь опять NullPointerException. В логе сервера:
Цитата:
Caused by: ru.bitel.bgbilling.common.BGException: java.lang.NullPointerException
at ru.bitel.bgbilling.modules.inet.api.server.bean.InetServOptionDao.update(InetServOptionDao.java:70)
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.inetServUpdateInternal(InetServServiceImpl.java:289)
at ru.bitel.bgbilling.modules.inet.api.server.service.InetServServiceImpl.inetServUpdate(InetServServiceImpl.java:233)
... 25 more
Caused by: java.lang.NullPointerException
at ru.bitel.bgbilling.modules.inet.api.server.bean.InetServOptionDao.update(InetServOptionDao.java:57)
... 27 more

Может есть рабочий пример, как добавить сервис в модуль inet через json?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 27 май 2015, 11:51 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
переданный список из InetServOption является null

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 28 май 2015, 12:43 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Непонятно только почему он null, если фича документирована, все параметры переданы. А оно вместо айди созданного сервиса возвращает исключение.
Если это толком не работает, то зачем нужно было убирать http-экшны?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 28 май 2015, 12:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
TrUsTeR писал(а):
Непонятно только почему он null, если фича документирована, все параметры переданы. А оно вместо айди созданного сервиса возвращает исключение.
Если это толком не работает, то зачем нужно было убирать http-экшны?


вот тут же описано

что есть параметр optionList. В том запросе, который вы написали выше, его нет. Покажите что вы сейчас отправляете .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 28 май 2015, 13:08 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Если это толком не работает, то зачем нужно было убирать http-экшны?
Для модуля Inet их и не было, сразу делали через web-сервисы. Работает, клиент биллинга общается с сервером через эти же web-сервисы. Возможность работать c этими же сервисами через JSON прикрутили как дополнительную. Как вариант, Вы можете посмотреть что передается при сохранении сервиса через клиент биллинга и на основе этого сделать запрос через JSON.

Попробуйте добавить optionList:
Код:
{"method" : "inetServUpdate",
"user" :{ "user" : "bguser", "pswd" : "bgpass" },
   "params" : { 
            "inetServ" : {
         "accessCode": 0,
         "addrFrom": "CgEEkw==",
         "addrTo":"CgEEkw==",
         "cid": "50000",
         "coid":"0",
         "dateFrom": "2015-05-26T00:00:00+12:00",
         "devState": "0",
         "deviceTitle":"Папка: PPPoE",
         "did": "2",
         "id": "0",
         "ifaceId": "-1",
         "ipResId":"0",
         "ipResSubsriptionId": "0",
         "parentId":"0",
         "passw":"clientpswd",
         "scid":"0",
         "sessCntLimit":"1",
         "status":"0",
         "typeId":"1",
         "uname":"clientlogin",
         "vlan":"-1",
         "comment": "",
         "config": "",
         "identifierList": [],
         "macList": "",
          "login":"clientlogin",
          "password":"clientpswd"
         },
      "optionList": [],
      "generateLogin":"false",
      "generatePassword":"false",
      "saWaitTimeout":"0"
      }
}


http-экшн бы точно также ругался "Ошибка параметров запроса" или "Ошибка сервера". Поэтому в обоих случаях стоит смотреть, что отправляет клиент биллинга.
Веб-сервисы удобней чем http-экшены, если не пытаться делать http-запрос самому, а использовать один из многочисленных клиентов, например, как здесь: http://wiki.bitel.ru/index.php/PHP_soapClient


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 29 май 2015, 13:19 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Amir писал(а):
Возможность работать c этими же сервисами через JSON прикрутили как дополнительную. Как вариант, Вы можете посмотреть что передается при сохранении сервиса через клиент биллинга и на основе этого сделать запрос через JSON.

Значит реализация сервисов через JSON сделана иначе. Я выше привел пример, когда клиент биллинга, общаясь через soap xml при создании сервиса задаёт пароль через параметр "passw" - при обращении к сервису через json этот параметр не подхватывается, пишет
Цитата:
{"status":"error","exception":"ru.bitel.bgbilling.common.BGMessageException","message":"Минимальная длина пароля 1 символов.","data":{}}

Опытным путём подобрал, что пароль задается посредством json через параметр "password". По крайней мере тогда ошибка не появляется, что пароль слишком короткий, а появляется следующая, что ip-адрес не указан...
Т.е. посмотреть что передается при сохранении сервиса через клиент биллинга и потом это использовать, как рекомендуете вы - не получится.
В этом то и основная проблема, неизвестно какие параметры под какими именами в json rpc. Изначально я полагал, что они не будут отличаться от тех, что передает клиент биллинга.

А что касательно того, что не надо делать запрос самому, а отправлять через soapClient: запросы, отправляемые через JSON посредством плагина браузера проще и быстрее править на этапе отладки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 29 май 2015, 13:35 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
TrUsTeR писал(а):
Amir писал(а):
Возможность работать c этими же сервисами через JSON прикрутили как дополнительную. Как вариант, Вы можете посмотреть что передается при сохранении сервиса через клиент биллинга и на основе этого сделать запрос через JSON.

Значит реализация сервисов через JSON сделана иначе. Я выше привел пример, когда клиент биллинга, общаясь через soap xml при создании сервиса задаёт пароль через параметр "passw" - при обращении к сервису через json этот параметр не подхватывается, пишет
Цитата:
{"status":"error","exception":"ru.bitel.bgbilling.common.BGMessageException","message":"Минимальная длина пароля 1 символов.","data":{}}

Опытным путём подобрал, что пароль задается посредством json через параметр "password". По крайней мере тогда ошибка не появляется, что пароль слишком короткий, а появляется следующая, что ip-адрес не указан...


Странно, давайте разберемся с этим вопросом .. Вообще , если смотреть тут, то там
Код:
java.lang.String   getPassword()

Код:
byte[]   getAddressFrom()

Код:
byte[]   getAddressTo()


Но у нас в коде они указаны так

Код:
@XmlAttribute(name = "passw")
   public String getPassword()
   {
      return password;
   }


Код:
@XmlAttribute(name = "addrFrom")
   public byte[] getAddressFrom()
   {
      return addressFrom;
   }



Код:
@XmlAttribute(name = "addrTo")
   public byte[] getAddressTo()
   {
      return addressTo;
   }


Попробуйте найти соответствующий объект в нашем javadoc, у него взять у него метод "getSomething" и использовать "something"( c маленькой быквы). Мы указываем короткие имена для клиента типа "passw", видимо для json они не применяются. Возможно мы сможем это исправить, а пока попробуйте искать имена по нашему javadoc.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 29 май 2015, 14:01 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Ура! Большое спасибо, stark! Воспользовался javadoc, и далеко идти по нему не пришлось.
Заменил "cid" на "contractId" (заметил кстати, что в базе тоже много где стали использовать именование contractId) и сработало.
Но нервов оно потрепало. Хорошо бы в документации в 8.3 подправить, что имена параметров нужно смотреть в javadoc. Ибо в подобном случае я всегда руководствуюсь мануалом.
Привожу запрос с минимальным набором параметров (ибо другие ещё не проверил на верное именование), с которым можно создать сервис в модуле Inet:
Код:
{"method" : "inetServUpdate",
"user" :{ "user" : "bguser", "pswd" : "bgpass" },
   "params" : { 
      "inetServ" : {
         "addressFrom": "CgEEkw==",
         "addressTo":"CgEEkw==",
         "contractId": "50000",
         "dateFrom": "2015-05-29T00:00:00+12:00",
         "typeId":"1",
         "login":"clientlogin",
         "password":"clientpswd"
         },
     "optionList": [],
      "generateLogin":false,
      "generatePassword":false,
      "saWaitTimeout":0
      }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Web-сервисы и json [6.2.872]
СообщениеДобавлено: 29 май 2015, 14:50 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
TrUsTeR писал(а):
" (заметил кстати, что в базе тоже много где стали использовать именование contractId) и сработало.
Но нервов оно потрепало. Хорошо бы в документации в 8.3 подправить, что имена параметров нужно смотреть в javadoc. Ибо в подобном случае я всегда руководствуюсь мануалом.


Ну там есть общая фраза про это.
Цитата:
Для работы с сервисом необходимо найти его класс в JavaDoc, например: ContractService. Далее определить имена и типы передаваемых параметров, переходя к JavaDoc описаниям других классов, если понадобится.


Т.е. для определения параметров нужно использовать javadoc, а не лог клиента. Написал дополнительное примечание вот тут .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [решено] Web-сервисы и json [6.2.872]
СообщениеДобавлено: 01 июн 2015, 22:24 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Кстати, в каком формате передается ip-адрес вебсервисом?
Цитата:
"addressTo":"CgEEkw=="

Не глядя казалось, что в хэксе, как и в бд, а когда начал нужные параметры в текст переводить, то непонятно как. :facepalm:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [решено] Web-сервисы и json [6.2.872]
СообщениеДобавлено: 01 июн 2015, 22:32 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Base64 вроде бы. Там байтовый массив byte[4], веб-сервисы их в Base64 кодируют.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [решено] Web-сервисы и json [6.2.872]
СообщениеДобавлено: 02 июн 2015, 00:15 
Не в сети

Зарегистрирован: 22 мар 2013, 11:06
Сообщения: 19
Карма: 0
Да, спасибо. Первым делом подумал про base64, но ввело в заблуждение то, что закодированная строка слишком короткая для текстового параметра.
А с массивом байт всё сходится: расшифровкой CgEEkw== будет 0a010001


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.053s | 45 Queries | GZIP : On ]