forum.bitel.ru
http://forum.bitel.ru/

Механизм реализации custom API - ?
http://forum.bitel.ru/viewtopic.php?f=19&t=7254
Страница 3 из 3

Автор:  skyb [ 14 апр 2017, 06:05 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Все чаще и чаще возникает вопрос, как же написать что то свое на динкоде
>почему не вызывать текущим executer просто обычный dynservice
Потому что бывают случаи когда экзекутер должен быть закрыт
идея с оберткой своего сервиса в динкоде звучит очень хорошо

Автор:  iseed [ 18 апр 2017, 08:31 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

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

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

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

Автор:  skyb [ 18 апр 2017, 12:16 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

А можете текстом запилить в вики? нужная весчь, с меня плюсик

Автор:  dimOn [ 19 апр 2017, 15:11 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

также нашёлся способ сделать это всё штатно: динамические веб(!)-экшены.
позволяют:
1. как создавать новые так и перекрывать старые
2. делать всё это в дин.коде
3. выход сериализовать можно в том числе в ct=json

Автор:  skyb [ 20 апр 2017, 06:06 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

без примеров такое невежливо писать © скуб

Автор:  dimOn [ 20 апр 2017, 11:46 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

примеры на вики есть, какие ещё надо

Автор:  skyb [ 21 апр 2017, 11:27 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Ах да, я не заметил что там вызывается экзекутер )

Автор:  Phricker [ 14 июл 2017, 12:27 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Подскажите по 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 :)

Изображение

Автор:  Phricker [ 14 июл 2017, 12:30 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

GetTestObjectResponse.Return полностью повторяет TestObject, т.е. с переменной result можно так же работать и вызывать из нее result.getTitle(); result.getComment();
Вопрос исключительно эстетический

Автор:  Phricker [ 14 июл 2017, 13:25 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

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

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

Автор:  Phricker [ 03 мар 2018, 00:50 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Доброго времени суток господа!

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

Есть такой вебсервис
Код:
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 и т.п.)?
Или я что-то не так пишу, и можно сделать чтобы каждый раз в нем не пересоздавались сервисы, даошки и т.п.
Или лучше так не делать, пускай оно при каждом вызове собирается?

Автор:  Phricker [ 06 мар 2018, 21:47 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Up
Интересен тот момент, что если это нормально, то наверное не стоит все сервисы и даошки и прочее, для всех методов инициализировать при вызове сервиса?
Только что-то общее вроде Connection и ServerContext

Автор:  borisk [ 06 мар 2018, 22:26 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

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

Автор:  Phricker [ 06 мар 2018, 23:49 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

Честно говоря я не совсем понял ваш вопрос по поводу документации.
Т.к. это собственный веб сервис, и причем тут документация не совсем ясно.
Если вам будет удобнее напишите в телеграм группе биллинга @SinTeZWh1te

Автор:  skyb [ 31 мар 2018, 01:54 ]
Заголовок сообщения:  Re: Механизм реализации custom API - ?

фркер пили доку уже))))

Страница 3 из 3 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/