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/ |