forum.bitel.ru http://forum.bitel.ru/ |
|
[РЕШЕНО] как работает throw new BGException? http://forum.bitel.ru/viewtopic.php?f=19&t=10733 |
Страница 1 из 1 |
Автор: | skyb [ 23 июл 2015, 08:22 ] |
Заголовок сообщения: | [РЕШЕНО] как работает throw new BGException? |
Пытаюсь вызвать Код: throw new BGException( "error" ); чтобы в ответе пришла нужная мне ошибка, делаю запрос в браузере, в логи ошибка сыпится, а вот сервер в браузере отдает Код: <data status="ok"/> Код: Сервер: вер. 6.1.1077 / 03.06.2015 19:14:43
os: Linux; java: Java HotSpot(TM) Server VM, v.1.7.0_71 |
Автор: | dimOn [ 23 июл 2015, 12:32 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
где вызвать? |
Автор: | skyb [ 23 июл 2015, 12:52 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
dimOn писал(а): где вызвать? динамический код, переписаный экшен, притом что на другой версии биллинга все работает это рабочий код Код: if ( actionType == 9) { String requestBody = new String( Utils.readByBlock( request.getInputStream() ), "UTF-8" ); ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree( requestBody ); String SAlias = root.get( "SAlias" ).asText(); String query = " SELECT c.status FROM contract AS c " + " LEFT JOIN user_login_14 AS ul ON ul.cid = c.id " + " LEFT JOIN user_alias_14 AS ua ON ua.login_id = ul.id " + " WHERE (c.date2 IS NULL OR c.date2 >= NOW()) AND ua.login_alias = '"+SAlias+"'"; PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); while ( rs.next() ) { System.out.println(" actionType == 9 "); String status = rs.getString(1); String ret = "<status>"+status+"</status>"; throw new BGException( ret ); } } по такой же схеме(в конце) пытаюсь вызвать на другой версии, в ошибки оно попадает, а в браузере нет |
Автор: | dimOn [ 23 июл 2015, 13:39 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
а в лог что попадает? а BGMessageException работает? |
Автор: | skyb [ 23 июл 2015, 13:50 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
в лог попадает вот это, конструкция: Код: String ret = "ia error"; throw new BGMessageException( ret ); в лог Код: ru.bitel.bgbilling.common.BGMessageException: ia error так же и с Код: BGException
|
Автор: | dimOn [ 23 июл 2015, 19:00 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
из экшена должно вываливаться точно вот здесь же это используется почти везде в явном виде: http://wiki.bitel.ru/index.php/%D0%9F%D ... 0%BE%D0%B2 |
Автор: | dimOn [ 23 июл 2015, 19:01 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
чтобы повторить: нужен конкретный экшен (настройки конфига) и конкретный код, очень желательно чтобы код был минимально возможный, который повторяет ошибку (вернее, её неполучение - типа кидается экзепшен единственной строкой, а в итоге возвращается ничего) |
Автор: | skyb [ 28 июл 2015, 07:21 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
dimOn писал(а): чтобы повторить: нужен конкретный экшен (настройки конфига) и конкретный код, очень желательно чтобы код был минимально возможный, который повторяет ошибку (вернее, её неполучение - типа кидается экзепшен единственной строкой, а в итоге возвращается ничего) настройка Код: dynaction:contract.ActionNewContract=ru.exchange.ActionNewContract Код: import ru.bitel.bgbilling.common.BGException;
import ru.bitel.bgbilling.common.BGMessageException; ... public class ActionNewContract extends bitel.billing.server.contract.action.ActionNewContract { .... @Override public void doAction() throws SQLException, BGException { ..... if ( actionType == -1 ) { System.out.println( "actionType ==-1" ); super.doAction(); } else if ( actionType != -1 ) { try { ..... if ( actionType == 15 ) { .... String ret = "ia error"; throw new BGMessageException( ret ); } ... } catch( Exception e ) { e.printStackTrace(); } |
Автор: | dimOn [ 28 июл 2015, 12:29 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
Код: try { ...... .... ..... throw new BGMessageException( ret ); ..... } catch( Exception e ) { e.printStackTrace(); } Здесь нужно пояснять, что наружу никакой Exception вообще не выкидывается? Или после сокращения кода стало всё понятно? |
Автор: | skyb [ 28 июл 2015, 13:49 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
dimOn писал(а): Код: try { ...... .... ..... throw new BGMessageException( ret ); ..... } catch( Exception e ) { e.printStackTrace(); } Здесь нужно пояснять, что наружу никакой Exception вообще не выкидывается? Или после сокращения кода стало всё понятно? да, я пытался этим кинуть когда небыло ошибки, а просто срабатывало стандартное положение. Я нашел какой конкретно catch срабатывает, прописал туда Код: catch( Exception e ) { e.printStackTrace(); StackTraceElement[] ste = e.getStackTrace(); for ( StackTraceElement ster : ste ) { trace.append( "\t\t\t\t" + ster.getClassName() + "(" + ster.getFileName() + ":" + ster.getLineNumber() + ")\n" ); } message = "код ошибки " + e + "\n\n" + trace.toString() + "\nactionType " + actionType + " AccountId new " + AccountId; ErrorMessages( msg, message ); String ret = "ia error"; throw new BGMessageException( ret ); } всеравно не отработало |
Автор: | dimOn [ 28 июл 2015, 14:14 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
Вообще какая-то какафония кода. Это другой код? Или что? Он не работает? Или тот что выше? В общем, если кинуть throw new *Exception* из перегруженного кода - <data status="ok"/> вернуться не может, нужно искать в чём косяк кода перегруженного класса. Для этого нужно упрощать код и выявлять где в нём ошибка. По коду тому что выше выложен - всё понятно, исключений наружу вообще не кидается. Дальше откуда новый код взялся? Всё что выделено красным к вопросу вообще не относится, очевидно. Потому это нужно убирать при описании задачи и поиске проблема. Также как и 99.9% строк из пары тысяч, которые в личке были предоставлены. Это называется - найти минимально неработающий код, повторяющий рассматриваемую проблему. Цитата: catch( Exception e ) { e.printStackTrace(); StackTraceElement[] ste = e.getStackTrace(); for ( StackTraceElement ster : ste ) { trace.append( "\t\t\t\t" + ster.getClassName() + "(" + ster.getFileName() + ":" + ster.getLineNumber() + ")\n" ); } message = "код ошибки " + e + "\n\n" + trace.toString() + "\nactionType " + actionType + " AccountId new " + AccountId; ErrorMessages( msg, message ); String ret = "ia error"; throw new BGMessageException( ret ); } Если код в итоге будет такой: Код: public class ActionNewContract extends bitel.billing.server.contract.action.ActionNewContract { @Override public void doAction() throws SQLException, BGException { throw new BGMessageException( "bla" ); } } и будет не работать как положено - то это ошибка, да. Но такой код будет работать, я уверен. Так нужно выяснить где проблема. |
Автор: | stark [ 28 июл 2015, 14:15 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
если написать action, который кидает exception и больше ничего не делает, работает ? |
Автор: | skyb [ 28 июл 2015, 14:19 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
в общем дошел до проблемы если в коде несколько try catch, то куда бы я не вставлял, даже если именно в тот catch который срабатывает, throw new BGMessageException( ret ); не отрабатывает, если закоментить все предидущие try catch и оставить самый верхний, первый, и в него вставить throw new BGMessageException( ret );, то все работает |
Автор: | skyb [ 28 июл 2015, 14:32 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
Но нужны то все try catch |
Автор: | stark [ 28 июл 2015, 16:26 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
skyb писал(а): в общем дошел до проблемы если в коде несколько try catch, то куда бы я не вставлял, даже если именно в тот catch который срабатывает, throw new BGMessageException( ret ); не отрабатывает, если закоментить все предидущие try catch и оставить самый верхний, первый, и в него вставить throw new BGMessageException( ret );, то все работает код в студию. |
Автор: | skyb [ 28 июл 2015, 16:42 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
stark писал(а): skyb писал(а): в общем дошел до проблемы если в коде несколько try catch, то куда бы я не вставлял, даже если именно в тот catch который срабатывает, throw new BGMessageException( ret ); не отрабатывает, если закоментить все предидущие try catch и оставить самый верхний, первый, и в него вставить throw new BGMessageException( ret );, то все работает код в студию. в личке |
Автор: | stark [ 28 июл 2015, 18:39 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
skyb писал(а): stark писал(а): skyb писал(а): в общем дошел до проблемы если в коде несколько try catch, то куда бы я не вставлял, даже если именно в тот catch который срабатывает, throw new BGMessageException( ret ); не отрабатывает, если закоментить все предидущие try catch и оставить самый верхний, первый, и в него вставить throw new BGMessageException( ret );, то все работает код в студию. в личке нет..нам попроще бы что-нибудь ..портянки попробуйте в helpdesk послать - может там поизучают . |
Автор: | dimOn [ 28 июл 2015, 20:14 ] |
Заголовок сообщения: | Re: как работает throw new BGException? |
skyb писал(а): если в коде несколько try catch, то куда бы я не вставлял, даже если именно в тот catch который срабатывает, throw new BGMessageException( ret ); не отрабатывает, если закоментить все предидущие try catch и оставить самый верхний, первый, и в него вставить throw new BGMessageException( ret );, то все работает try catch по определению глушит все брошенные внутри Exception. он для этого и предназначен. потому вообще непонятно что и к чему и о чём вообще речь. в catch тоже можно throw любой Exception и он выкинется наверх и сработать тоже должен, если вышеобёрнутый try catch его не отловит опять же. проблема в коде явно. нужно упростить,выкинув всякую ненужную шнягу и внимательно изучить вложенности итд. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |