Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / java + IBATIS + MSSQL - sql_error красиво? / 12 сообщений из 12, страница 1 из 1
24.01.2012, 08:52:19
    #37628267
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
Добрый день всем! Запускаю процедуру через Ibatis (сделал WSDL, прописал mapping) - всё работает! Хочу теперь красиво отлавливать exeption со стороны сервера. Тоесть хочу пользователю при запросах с сайта - выдавать- русские и понятные сообщения через Raiserror (процедуры).
Для этого в методе , беру текст из Exception (исключительной ситуации)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private void mCreateFault(Exchange ex ){
		String faultCode="";
		String err_mess="";
		String sql_err = "";
		
		MLOG.info("Дошли до обработки ошибки =  err_in" );	
		
		Exception e = ex.getProperty(ex.EXCEPTION_CAUGHT, Exception.class);
	
		err_mess = e.getMessage();
  }


Получаю:

Код: plaintext
1.
2.
3.
4.
--- The error occurred in avisTestQuery.xml.  
--- The error occurred while applying a parameter map.  
--- Check the getselectag-InlineParameterMap.  
--- Check the statement (query failed).  
--- Cause: java.sql.SQLException: Нет данных 0 строк, сообщение из базы об ошибке!

Как бы мне отдавать только java.sql.SQLException: Нет данных 0 строк, сообщение из базы об ошибке!

Спасибо!
...
Рейтинг: 0 / 0
24.01.2012, 09:33:49
    #37628300
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
- ошибки тесно связаны с транзакциями
- транз. связаны с технолгией их обр-ки (декларативные или нет и т.д.) и фреймворками (перехватывают)
Поэтому тут целая стратегия должна.
- спринг есть?
- БЛ в БД есть? В том смысле, что вы сами генерируете ошибку в БД - пользовательские?
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
24.01.2012, 09:44:19
    #37628315
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
medoed ,
SQLException это вложенное исключение. Что бы до него добраться вам нужно рекурсивно вызывать e.getCause() до тех пор пока у исключения на данной итерации (e.getCause() == null || e.getCause() == e). Вторая часть выражения нужна, так как исключения любят в поле cause ставить ссылку на самого себя, и без этой проверки вы уйдете в бесконечный цикл (или в StackOverflow при рекурсии).
...
Рейтинг: 0 / 0
24.01.2012, 09:49:24
    #37628321
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
Petro123- ошибки тесно связаны с транзакциями
- транз. связаны с технолгией их обр-ки (декларативные или нет и т.д.) и фреймворками (перехватывают)
Поэтому тут целая стратегия должна.
- спринг есть?
- БЛ в БД есть? В том смысле, что вы сами генерируете ошибку в БД - пользовательские?


1. Взято из beans

<!-- сервис на шине, доступный снаружи (для процедуры с селектом) -->
<cxf:cxfEndpoint id="ModelAvisCursorSelect"
address="${model.avis.test.address2}"
wsdlURL="classpath:META-INF/avis-wsdl/proc-select-mssql.wsdl"
serviceName="ws:AvisService" endpointName="ws:portAvis"
xmlns:ws=" http://test.ru/interplat/select/">
<cxf:properties>
<entry key="dataFormat" value="PAYLOAD" />
<entry key="schema-validation-enabled" value="false" />
<entry key="faultStackTraceEnabled" value="false" />
<entry key="exceptionMessageCauseEnabled" value="true" />
</cxf:properties>
</cxf:cxfEndpoint>
2. Да я сам генерирую ошибку в БД через raiserror
...
Рейтинг: 0 / 0
24.01.2012, 09:51:06
    #37628323
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
svenom medoed ,
SQLException это вложенное исключение. Что бы до него добраться вам нужно рекурсивно вызывать e.getCause() до тех пор пока у исключения на данной итерации (e.getCause() == null || e.getCause() == e). Вторая часть выражения нужна, так как исключения любят в поле cause ставить ссылку на самого себя, и без этой проверки вы уйдете в бесконечный цикл (или в StackOverflow при рекурсии).

Svenom, я не более 2-х месяцев пишу на java. Нельзя ли примерчик для данного случая: как написать как рекурсивно добраться до e.getCause(), сорри за наглость!!!
...
Рейтинг: 0 / 0
24.01.2012, 10:04:34
    #37628329
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
medoed2. Да я сам генерирую ошибку в БД через raiserror
Уточню:
у меня было 2 варианта генерации:
- В БД был текст на русском "Документ заблокирован", который по стеку шёл на самый верх до мод.окна
- В БД был код ошибки ORA-234556, который приложение декодировало.
У вас как?
...
Рейтинг: 0 / 0
24.01.2012, 10:11:15
    #37628340
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
Petro123medoed2. Да я сам генерирую ошибку в БД через raiserror
Уточню:
у меня было 2 варианта генерации:
- В БД был текст на русском "Документ заблокирован", который по стеку шёл на самый верх до мод.окна
- В БД был код ошибки ORA-234556, который приложение декодировало.
У вас как?

У меня MSSQL, но не Oracle!
Но думаю на 90% - это первый вариант, код ошибки я пока не классифицирую (хотя у нас такая идея витает). Спасибо за идею - как нить набодяжим и мы справочник))
...
Рейтинг: 0 / 0
24.01.2012, 10:30:50
    #37628372
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
medoed,
там без разницы оракл или сиквел. Первый параметр - код, второй строка.
ЗЫ
svenom тебе дал направление.
Рекурсия, это "начать без неё вызвав 15 раз одну и ту же процедуру".
Пробуй!
...
Рейтинг: 0 / 0
24.01.2012, 10:56:04
    #37628407
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
Вроде получилось (коллега с рекурсией подмог):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQLException e = exchange.getProperty(exchange.EXCEPTION_CAUGHT, SQLException.class);
		String err_mess = e.getMessage();
		String sql_err, faultCode;
		
		MLOG.info("err_mes_all = " + e.getMessage());

		  while (! (e.getCause() == null || e.getCause() == e)) {
                          e= (SQLException) e.getCause();
                   }

		  sql_err =    e.getMessage()



Всем спасибо, особенно Svenom...
...
Рейтинг: 0 / 0
24.01.2012, 11:05:23
    #37628423
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
Ой, неправильно вам сказал. Вот это
Код: java
1.
e.getCause() == e

поменяйте на
Код: java
1.
e.getCause() != e
...
Рейтинг: 0 / 0
24.01.2012, 11:06:19
    #37628425
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
А, нет, все правильно
...
Рейтинг: 0 / 0
24.01.2012, 11:15:08
    #37628447
medoed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
java + IBATIS + MSSQL - sql_error красиво?
svenomОй, неправильно вам сказал. Вот это
Код: java
1.
e.getCause() == e

поменяйте на
Код: java
1.
e.getCause() != e



Нее то что первое вроде номано, а вот второе как раньше выводит всё:
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / java + IBATIS + MSSQL - sql_error красиво? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]