forum.bitel.ru http://forum.bitel.ru/ |
|
Вывод print error http://forum.bitel.ru/viewtopic.php?f=19&t=12368 |
Страница 1 из 1 |
Автор: | mhollow [ 07 апр 2017, 12:54 ] |
Заголовок сообщения: | Вывод print error |
Я конечно дико извиняюсь, а где смотреть вывод методов print и error из EventScriptBase при "обычной работе" (не в окне "вывод" после запуска")? В какой лог они попадают или куда? Спасибо. |
Автор: | skn [ 07 апр 2017, 13:47 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): Я конечно дико извиняюсь, а где смотреть вывод методов print и error из EventScriptBase при "обычной работе" (не в окне "вывод" после запуска")? В какой лог они попадают или куда? Спасибо. если скрипт на договоре, то в договоре есть в разделе Скрипты поведения, закладка Логи выполнения |
Автор: | mhollow [ 09 апр 2017, 21:37 ] |
Заголовок сообщения: | Re: Вывод print error |
А почему print работает только из execute (в глобальном скрипте)? Из всех остальных методов того же класса - java.lang.NullPointerException at ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase.print(GlobalScriptBase.java:31) |
Автор: | dimOn [ 10 апр 2017, 13:29 ] |
Заголовок сообщения: | Re: Вывод print error |
полный стек дайте |
Автор: | mhollow [ 10 апр 2017, 13:42 ] |
Заголовок сообщения: | Re: Вывод print error |
GENERATE_TIME: 10.04.17 10:38:55 EXECUTION_STOP_TIME: 10.04.17 10:38:55 PROCESS_TIME: 0 OUT: print from execute EXCEPTIONS: java.lang.NullPointerException at ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase.print(GlobalScriptBase.java:31) at ru.xxx.bgbilling.kernel.TestGlobal.testMethod(TestGlobal.java:31) at ru.xxx.bgbilling.kernel.TestGlobal.execute(TestGlobal.java:21) at ru.bitel.bgbilling.kernel.script.server.bean.GlobalScriptInvoker.invoke(GlobalScriptInvoker.java:38) at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScriptParams(GlobalScriptServiceImpl.java:83) at ru.bitel.bgbilling.kernel.script.server.GlobalScriptServiceImpl.executeGlobalScript(GlobalScriptServiceImpl.java:59) at sun.reflect.GeneratedMethodAccessor480.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at ru.bitel.bgbilling.kernel.container.service.server.ServiceInfo.invoke(ServiceInfo.java:101) at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.invoke0(AbstractJaxWsHandler.java:229) at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.access$000(AbstractJaxWsHandler.java:47) at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler$1.run(AbstractJaxWsHandler.java:276) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler.invoke(AbstractJaxWsHandler.java:270) at ru.bitel.bgbilling.kernel.container.ws.server.JaxWsHandler.invoke(JaxWsHandler.java:315) at ru.bitel.bgbilling.kernel.container.ws.server.AbstractJaxWsHandler$ServiceInstanceResolver$1.invoke(AbstractJaxWsHandler.java:375) at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:150) at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:261) at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:100) at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641) at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600) at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585) at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482) at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314) at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608) at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259) at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:162) at ru.bitel.bgbilling.kernel.container.ws.server.JaxWSAdapter.handle(JaxWSAdapter.java:290) at bitel.billing.server.Executer.doPost(SourceFile:163) 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:316) 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) package ru.xxx.bgbilling.kernel; import java.io.FileReader; import ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase; import ru.bitel.bgbilling.server.util.Setup; public class TestGlobal extends GlobalScriptBase { @Override public void execute(Setup setup, ConnectionSet connectionSet) { print("print from execute"); TestGlobal tg = new TestGlobal(); tg.testMethod(); print("done from execute"); return; } public void TestGlobal() { } private void testMethod() { print("print from testMethod"); return; } } |
Автор: | dimOn [ 10 апр 2017, 13:49 ] |
Заголовок сообщения: | Re: Вывод print error |
Код: TestGlobal tg = new TestGlobal(); Так работать не будет, GlobalScriptBase там отдельно инициализируется перед запуском итд, а вы просто инстанс гольный создали, где никакие print не настроены Почему просто testMethod() не вызвать из этого же инстанса, а не из нового tg? Если критично писать именно так, то надо подумать как часть кода перенести, скорее всего init какой-нибудь достаточно будет. |
Автор: | mhollow [ 10 апр 2017, 13:56 ] |
Заголовок сообщения: | Re: Вывод print error |
Ну вообще говоря, формально мой класс расширяет GlobalScriptBase public class TestGlobal extends GlobalScriptBase поэтому извините, работать обязано. А кто создает инстанс, ядро или я сам, это уже не важно. |
Автор: | skn [ 10 апр 2017, 15:04 ] |
Заголовок сообщения: | Re: Вывод print error |
все правильно когда ядро создает инстанс, оно его и нициализирует хотите сами его создавать будьте любезны его и сами инициализировать. |
Автор: | mhollow [ 10 апр 2017, 15:29 ] |
Заголовок сообщения: | Re: Вывод print error |
Нет, не правильно. Инициализация при расширении класса НЕ обязательна. Методы объявленные в расширяемом классе обязаны быть доступными в расширяющем классе без всякой дополнительной инициализации. Хотите еще один холивар? Нет проблем. Только на этот раз все это ооочень четко описано в спецификации к Java. И я не поленюсь, найду. И окажется что вы нарушаете спецификацию языка. Инициализация всего-лишь дополнительная возможность выполнить определенные действия по инициализации полей при создании объекта или класса. Которая мне, как создателю это класса и его инстанса в данном случае не нужна. |
Автор: | Phricker [ 10 апр 2017, 15:32 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): И окажется что вы нарушаете спецификацию языка. Увы © |
Автор: | mhollow [ 10 апр 2017, 15:34 ] |
Заголовок сообщения: | Re: Вывод print error |
Sad but true © ))) |
Автор: | skn [ 10 апр 2017, 15:46 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): Нет, не правильно. Инициализация при расширении класса НЕ обязательна. Методы объявленные в расширяемом классе обязаны быть доступными в расширяющем классе без всякой дополнительной инициализации. Хотите еще один холивар? Нет проблем. Только на этот раз все это ооочень четко описано в спецификации к Java. И я не поленюсь, найду. И окажется что вы нарушаете спецификацию языка. Спецификация тут не причем, класс компилируется, а все остальное дело автора класса и его целей. |
Автор: | mhollow [ 10 апр 2017, 15:56 ] |
Заголовок сообщения: | Re: Вывод print error |
Моя цель в данном контексте использовать метод, объявленный в родительском классе. И для того чтобы иметь возможность это сделать я все необходимые условия с точки зрения требований языка выполнил - расширил класс. Но что-то пошло не так...Если я не могу этого сделать это как минимум означает, что класс родитель спроектирован не достаточно хорошо. Конечно он мне дает его вызвать, но сам метод вызывает Exception. Нарушение спецификации в данном случае заключается не в том, что мне компилятор не дает вызвать метод родительского класса а в том что он не работает из расширяющего класса. |
Автор: | skn [ 10 апр 2017, 16:01 ] |
Заголовок сообщения: | Re: Вывод print error |
компилятор дает вам вызвать метод, а метод кидает Exception если для его работы чего то не хватает, обычная практика программирования, кидать исключение при нештатной ситуации... |
Автор: | stark [ 10 апр 2017, 16:05 ] |
Заголовок сообщения: | Re: Вывод print error |
Тогда не используете GlobalScriptBase. Вас же никто не заставляет, используйте свою реализацию интерфейса GlobalScript. Вот вам код Код: public abstract class GlobalScriptBase implements GlobalScript { private PrintStream out; private PrintStream err; private ParameterMap params; public void setOutputStream( PrintStream out ) { this.out = out; } public void setErrorStream( PrintStream err ) { this.err = err; } protected void print( Object message ) { this.out.println( message ); } protected void error( Object message ) { this.err.println( message ); } /** * Дополнительные параметры скрипта. * Например, сюда попадают все параметры из конфига задачи выполнения глобальных скриптов по таймеру. * При запуске из командной строки класса реализующего интерфейс GlobalScript попадают параметры переданные. */ public ParameterMap getParams() { return params; } public void setParams(ParameterMap params) { this.params = params; } } Если очень надо именно GlobalScriptBase, мы можем в следующем обновлении сделать его конструктор приватным и вы вообще ничего не сможете создать и отнаследоваться о него. И в это не будет ничего неправильного, Есть например такой pattern GlobalScriptBase - это по сути наш внутренний класс, и мы можем запретить его использовать. |
Автор: | mhollow [ 10 апр 2017, 16:08 ] |
Заголовок сообщения: | Re: Вывод print error |
А в чем нештатность ситуации? Я расширил класс, радостно потираю потные ручонки, вызываю метод родительского класса. А меня тут начинаю гнать не очень сухими тряпками и говорить что это нештатная ситуация. Я очень сильно сконфужен. Ну так запретите, потому что я, извините действую СТРОГО по инструкции, только уж будьте любезны, отразите это в документации. https://docs.bitel.ru/pages/viewpage.action?pageId=73597356 Класс, привязанный к глобальному скрипту, должен расширять базовый класс ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase. Там вообще кстати ни слова про интерфейс. |
Автор: | barguzin2 [ 10 апр 2017, 16:13 ] |
Заголовок сообщения: | Re: Вывод print error |
Комрад, поймите уже наконец, что правила игры здесь не вы устанавливаете. И максимум, на что вы можете расчитывать - это высказать пожелание и предложение. А тут получается ВЫ делаете что-то, ОНО не работает, а виноваты разработчики. Так пишите так, как говорят, как будет работать. Сколько людей пользуется глобальными скриптами (ой, вы тоже начали скриптами пользоваться?) и ни у кого не возникало ни проблем ни претензий. ![]() |
Автор: | mhollow [ 10 апр 2017, 16:15 ] |
Заголовок сообщения: | Re: Вывод print error |
Я всё еще надеюсь изменить мир)) Ну или хотя бы разработчиков bgbilling ))))) |
Автор: | Phricker [ 10 апр 2017, 16:17 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): Я всё еще надеюсь изменить мир)) Ну или хотя бы разработчиков bgbilling ))))) Увы © |
Автор: | mhollow [ 10 апр 2017, 16:17 ] |
Заголовок сообщения: | Re: Вывод print error |
Вот вот, один Phricker меня понимает ![]() |
Автор: | stark [ 10 апр 2017, 16:22 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): А в чем нештатность ситуации? Я расширил класс, радостно потираю потные ручонки, вызываю метод родительского класса. А меня тут начинаю гнать не очень сухими тряпками и говорить что это нештатная ситуация. Я очень сильно сконфужен. Есть внутренний классы в любом api, даже в jdk есть классы в пакете sun, которые можно использовать только на свой страх и риск, никто вам не гарантирует чтобы в следующей версии они вообще будут например. Вы не можете создать любой наш класс извне. |
Автор: | mhollow [ 10 апр 2017, 16:26 ] |
Заголовок сообщения: | Re: Вывод print error |
Цитата: Вы не можете создать любой наш класс извне. Ладно, ладно. Как скажете, уважаемые. Я уже на всё согласная )) Неплохо было только это где-то отразить, а то я видите-ли не знал о такой мелочи ( И Фрикер ночью во сне не явился и не просветил ))) |
Автор: | stark [ 10 апр 2017, 16:29 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): Цитата: Вы не можете создать любой наш класс извне. Ладно, ладно. Как скажете, уважаемые. Я уже на всё согласная )) Неплохо было только это где-то отразить, а то я видите-ли не знал о такой мелочи ( Хорошо, мы добавили в TODO что либо сделать по этому поводу. Пока можете поставить Код: setOutputStream( System.out);
setErrorStream( System.err); |
Автор: | Amir [ 10 апр 2017, 16:33 ] |
Заголовок сообщения: | Re: Вывод print error |
https://docs.oracle.com/cd/E19798-01/82 ... index.html |
Автор: | mhollow [ 10 апр 2017, 16:37 ] |
Заголовок сообщения: | Re: Вывод print error |
Ну строго говоря я не создаю а расширяю, и не любой класс, а который я обязан расширить. Причем без всяких дополнительных инструкций по инициализации. |
Автор: | mhollow [ 10 апр 2017, 16:53 ] |
Заголовок сообщения: | Re: Вывод print error |
Цитата: setOutputStream( System.out); setErrorStream( System.err); Это куда именно поставить? Если в конструктор класса то НЕ помогает. |
Автор: | skn [ 10 апр 2017, 20:35 ] |
Заголовок сообщения: | Re: Вывод print error |
Код: TestGlobal testGlobal = new TestGlobal();
testGlobal.setOutputStream( System.out); testGlobal.setErrorStream( System.err); |
Автор: | mhollow [ 10 апр 2017, 20:43 ] |
Заголовок сообщения: | Re: Вывод print error |
Да, спасибо, это работает. |
Автор: | dimOn [ 10 апр 2017, 20:44 ] |
Заголовок сообщения: | Re: Вывод print error |
mhollow писал(а): Нет, не правильно. Инициализация при расширении класса НЕ обязательна. Методы объявленные в расширяемом классе обязаны быть доступными в расширяющем классе без всякой дополнительной инициализации. Фигню пишете опять очень уверенно ![]() И методы доступны, и поля доступны. Но они НЕ ИНИЦИАЛИЗИРОВАНЫ, это делается вручную вызывающим кодом. Вообще теоретически это (а именно неконсистентность и недоинициализированность после полноценного создания инстанса объекта) не вполне корректно, если речь о публичном API(*). Но вы извращаетесь с фактически внутренним классом, который не велено трогать и создавать инстансы. (*) и то в данном случае это очень спорно, т.к. print - второстепенная функциональность, для её работы нужна дополнительная информация, ничего страшного в этом нет. Но в таком случае надо не NPE кидать, конечно, а IllegalStateException какой-нибудь, и будет 104% корректно всё. |
Автор: | dimOn [ 10 апр 2017, 20:48 ] |
Заголовок сообщения: | Re: Вывод print error |
Цитата: Ну строго говоря я не создаю а расширяю, и не любой класс, а который я обязан расширить. Причем без всяких дополнительных инструкций по инициализации. Цитата: Ну так запретите, потому что я, извините действую СТРОГО по инструкции, только уж будьте любезны, отразите это в документации. https://docs.bitel.ru/pages/viewpage.ac ... d=73597356 Класс, привязанный к глобальному скрипту, должен расширять базовый класс ru.bitel.bgbilling.kernel.script.server.dev.GlobalScriptBase. Там вообще кстати ни слова про интерфейс. Вы не расширяете, а именно создаёте новый инстанс. Расширение - это наследование. Расширение, это вот эта строка: public class TestGlobal extends GlobalScriptBase . Эта строка: TestGlobal tg = new TestGlobal() - это создание инстанса вашего "расширенного класса". Зачем вы это делаете - вообще непонятно. Это не надо делать ни в вашей задаче, ни по какой-то инструкции. Нет там такого и быть не может. Потому что это совершенно излишне и не нужно вам. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |