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/