BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 19 мар 2024, 14:09

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




Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 14 апр 2017, 06:05 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Все чаще и чаще возникает вопрос, как же написать что то свое на динкоде
>почему не вызывать текущим executer просто обычный dynservice
Потому что бывают случаи когда экзекутер должен быть закрыт
идея с оберткой своего сервиса в динкоде звучит очень хорошо

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 18 апр 2017, 08:31 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
В идеале должно было быть примерно как:
Собственный сервлет с doPost (В этом случае все обращению будут иметь свой эксекютер и могут быть сформированными аля RESTful, проще дебажить.)
Собственные обертки из дин классов (позволяет точно разделить логику, также расширяемость без трудных изменений в кодах, отсутствие необходимости перезагружать биллинг)
Вывод в собственном формате не привязанном, к какой либо структуре (делаем передачу типа в метод и все дела, хочешь json, хочешь xml)

Но не всегда получается сделать как хочется. =)
Поэтому нашел для себя приемлемый вариант:
dynaction: http://joxi.ru/Vm6v6jZfD3PPem
Конфиг: http://joxi.ru/l2Z1Xz4Twl1dLm
Браузер: http://joxi.ru/82QDZJBIj85Rzm

Пишем класс, перекрываем вызов в конфиге, вызываем с параметрами как обычный Action.
Вроде работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 18 апр 2017, 12:16 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
А можете текстом запилить в вики? нужная весчь, с меня плюсик

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 19 апр 2017, 15:11 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
также нашёлся способ сделать это всё штатно: динамические веб(!)-экшены.
позволяют:
1. как создавать новые так и перекрывать старые
2. делать всё это в дин.коде
3. выход сериализовать можно в том числе в ct=json

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 20 апр 2017, 06:06 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
без примеров такое невежливо писать © скуб

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 20 апр 2017, 11:46 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 21 апр 2017, 11:27 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Ах да, я не заметил что там вызывается экзекутер )

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 14 июл 2017, 12:27 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Подскажите по custom API

Есть сервис
Код:
import ru.bitel.bgbilling.kernel.container.service.server.AbstractService;

import javax.jws.WebService;

@WebService(name = "TestServiceImpl", targetNamespace = "http://test.billing.ru/")
public class TestServiceImpl extends AbstractService {

    public String getTestObject(String a){
        return a;
    }
}


Импортирую его в сторонний проект
Код:
wsimport.exe -Xnocompile -p ru.api.testservice -d ..TestProject\src\ http://127.0.0.1/bgbilling/api/ru.bgbilling.test/TestService?wsdl


В стороннем проекте вызываю так
Код:
import ru.api.testservice.TestServiceImpl;
import ru.api.testservice.TestServiceImplService;

public class Test {
    public static void main(String[] args) {
        TestServiceImplService testServiceImplService = new TestServiceImplService();
        TestServiceImpl testService = testServiceImplService.getTestServiceImplPort();
        String result = testService.getTestObject("Test string");
        System.out.print(result);
    }
}



Переписываю сервис в
Код:
import ru.bitel.bgbilling.kernel.container.service.server.AbstractService;

import javax.jws.WebService;

@WebService(name = "TestServiceImpl", targetNamespace = "http://test.billing.ru/")
public class TestServiceImpl extends AbstractService {

    public TestObject getTestObject(String a, String b) {
        TestObject testObject = new TestObject();
        testObject.setTitle(a);
        testObject.setComment(b);
        return testObject;
    }
}

Добавляю класс TestObject
Код:
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"title", "comment"}, namespace = "http://test.billing.ru/")
@XmlRootElement(name = "TestObject", namespace = "http://test.billing.ru/")

public class TestObject {
    @XmlElement(name = "title")
    protected String title;
    @XmlElement(name = "comment")
    protected String comment;

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String value) {
        this.title = value;
    }

    public String getComment() {
        return this.comment;
    }

    public void setComment(String value) {
        this.comment = value;
    }
}


Делаю wsimport и пишу в стороннем проекте
Код:
import ru.ellcom.api.testservice.GetTestObjectResponse;
import ru.ellcom.api.testservice.TestServiceImpl;
import ru.ellcom.api.testservice.TestServiceImplService;

public class Test {
    public static void main(String[] args) {
        TestServiceImplService testServiceImplService = new TestServiceImplService();
        TestServiceImpl testService = testServiceImplService.getTestServiceImplPort();
        GetTestObjectResponse.Return result = testService.getTestObject("title", "comment");
        System.out.print(result);
    }
}



Собственно вопрос в чем
Как во втором случае сделать так, чтобы тип result был TestObject, а не GetTestObjectResponse.Return?

Можно поменять в импортированном TestServiceImpl
Код:
public ru.api.testservice.GetTestObjectResponse.Return getTestObject(

чтобы оно возвращало TestObject, но интересует можно ли сделать это автоматически?
Тот же ContractService при wsimport и вызове contractGet(int contractId), возвращает корректный Contract, а не GetContractResponse.Return :)

Изображение

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 14 июл 2017, 12:30 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
GetTestObjectResponse.Return полностью повторяет TestObject, т.е. с переменной result можно так же работать и вызывать из нее result.getTitle(); result.getComment();
Вопрос исключительно эстетический

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 14 июл 2017, 13:25 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Вопрос снят.
Не был заполнен параметр name в классе TestObject
Сделал так
Код:
@XmlType(name = "TestObject", propOrder = {"title", "comment"}, namespace = "http://test.billing.ru/")

и все ровненько
Изображение

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 03 мар 2018, 00:50 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Доброго времени суток господа!

Т.к. в ЛК запилили возможность вызывать свои вебсервисы, решил уточнить вопрос который давно зрел.

Есть такой вебсервис
Код:
import org.apache.log4j.Logger;
import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.common.BGMessageException;
import ru.bitel.bgbilling.kernel.container.service.server.AbstractService;
import ru.bitel.bgbilling.kernel.contract.api.common.bean.Contract;
import ru.bitel.bgbilling.kernel.contract.api.server.bean.ContractDao;
import ru.bitel.bgbilling.kernel.module.common.bean.User;
import ru.bitel.bgbilling.server.util.ServerUtils;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import java.sql.Connection;

@WebService(name = "TestService", targetNamespace = "http://test.bgbilling.ru/", serviceName = "TestService")
public class TestServiceImpl extends AbstractService {

    private static final Logger logger = Logger.getLogger(TestServiceImpl.class);
    private Connection con;

    public TestServiceImpl() {
    }

    @PostConstruct
    protected void init() throws BGException {
        logger.info("Init");
        this.con = getConnection();
    }

    @PreDestroy
    private void destroy() {
        logger.info("Destroy");
        if (this.con != null) {
            ServerUtils.commitConnection(this.con);
            ServerUtils.closeConnection(this.con);
        }
    }

    @WebMethod(operationName = "GetContractComment", action = "http://test.bgbilling.ru/GetContractComment")
    @WebResult(name = "GetContractComment", targetNamespace = "http://test.bgbilling.ru/")
    public String getContractComment(@WebParam(name = "contractTitle", targetNamespace = "http://test.bgbilling.ru") String contractTitle) throws BGMessageException {
        try (ContractDao contractDao = new ContractDao(this.con, User.USER_SERVER)) {
            Contract contract = contractDao.getByTitle(contractTitle);
            if (contract == null) {
                throw new BGMessageException("Договор не найден");
            }
            return contract.getComment();
        } catch (BGException e) {
            throw new BGMessageException(e.getMessage());
        }
    }
}




Вопрос собственно в следующем.
Это нормально, что при каждом вызове вебсервиса вызываются @PostConstruct и @PreDestroy ?
Код:
03-02/21:44:24  INFO [http-bio-127.0.0.1-8080-exec-5] TestServiceImpl - Init
03-02/21:44:24  INFO [http-bio-127.0.0.1-8080-exec-5] TestServiceImpl - Destroy
03-02/21:44:28  INFO [http-bio-127.0.0.1-8080-exec-6] TestServiceImpl - Init
03-02/21:44:28  INFO [http-bio-127.0.0.1-8080-exec-6] TestServiceImpl - Destroy
03-02/21:44:52  INFO [http-bio-127.0.0.1-8080-exec-7] TestServiceImpl - Init
03-02/21:44:52  INFO [http-bio-127.0.0.1-8080-exec-7] TestServiceImpl - Destroy
03-02/21:45:10  INFO [http-bio-127.0.0.1-8080-exec-8] TestServiceImpl - Init
03-02/21:45:10  INFO [http-bio-127.0.0.1-8080-exec-8] TestServiceImpl - Destroy


Т.е. там нет инициализации при первом вызове или компиляции (как например для тех же ServiceActivator'ов модуля Inet и т.п.)?
Или я что-то не так пишу, и можно сделать чтобы каждый раз в нем не пересоздавались сервисы, даошки и т.п.
Или лучше так не делать, пускай оно при каждом вызове собирается?

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 06 мар 2018, 21:47 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Up
Интересен тот момент, что если это нормально, то наверное не стоит все сервисы и даошки и прочее, для всех методов инициализировать при вызове сервиса?
Только что-то общее вроде Connection и ServerContext

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 06 мар 2018, 22:26 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Phricker, а где вы взяли документацию на вебсервисы?
В документации только отсылка к не сильно ясной http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA_Web-%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%83


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 06 мар 2018, 23:49 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Честно говоря я не совсем понял ваш вопрос по поводу документации.
Т.к. это собственный веб сервис, и причем тут документация не совсем ясно.
Если вам будет удобнее напишите в телеграм группе биллинга @SinTeZWh1te

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Механизм реализации custom API - ?
СообщениеДобавлено: 31 мар 2018, 01:54 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
фркер пили доку уже))))

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу Пред.  1, 2, 3

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


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

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


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

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