barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 9 ноября 2018 г.

soapUI и кириллица в теле POST-запроса к REST-сервису

Проблема

Нужно из soapUI (запускается под Windows 10) вызвать REST-сервис, передав ему в теле POST-запроса некий XML, содержащий кириллицу. При попытке сделать это получаю от сервиса ответ о наличии некорректного UTF8-байта в запросе.

Решение

В bin-директории soapUI открываем файл SoapUI-x.x.x.vmoptions (где x.x.x. - номер версии soapUI) и добавляем туда опцию:
-Dfile.encoding=UTF8
Перезапускаем soapUI. В поле Media Type запроса добавляем постфикс "; charset=UTF-8". Успех, запрос уходит с корркетным Content-Type заголовком, в котором указана используемая кодировка UTF-8, а также с корректно закодированным в UTF-8 телом.

пятница, 6 апреля 2018 г.

Java: залогировать стек текущего потока

Задача

Залогировать стек текущего потока.

Решение

Немного неочевидное, т.к. Thread имеет метод dumpStack(), который печатает стек в поток ошибок, а нам надо задействовать логгер. Получилось так:
        StringWriter strWr = new StringWriter();
        PrintWriter writer = new PrintWriter(strWr);
        new Throwable().printStackTrace(writer);
        logger.severe(strWr.toString());

вторник, 3 апреля 2018 г.

Oracle Weblogic: ALTER SESSION-команды в Init SQL

Задача - в качестве Init SQL необходимо выполнить 2 ALTER SESSION-команды
Решение - ALTER SESSION-команды в Init SQL заворачиваем в анонимный PL/SQL-блок, а внутри него каждую команду - в execute immediate:
SQL BEGIN execute immediate('alter session set ...');execute immediate('alter session set ...'); END;

Oracle: посчитать число индексов по char/varchar-колонкам

SELECT COUNT(DISTINCT i.INDEX_NAME)
FROM dba_ind_columns i
    JOIN dba_tab_columns c
        ON (c.TABLE_NAME = i.TABLE_NAME AND c.OWNER = i.TABLE_OWNER AND c.COLUMN_NAME = i.COLUMN_NAME)
WHERE
    (UPPER(c.DATA_TYPE) LIKE 'VARCHAR%'
        OR UPPER(c.DATA_TYPE) LIKE 'CHAR%')

четверг, 15 марта 2018 г.

Как сменить пароль на машине c Windows Server 2012, к которой подключаешься по RDP

Т.к. Ctrl+Alt+Delete просто так на удаленную машину не отправить (комбинация отработает на локальной машине), необходимо воспользоваться комбинацией Ctrl+Alt+End, которая отправит Ctrl+Alt+Delete на удаленную машину. Ну и на появившемся экране нажимаем "Change password".

четверг, 21 декабря 2017 г.

Узнать SID сессии по database link

Проблема

Есть БД "А" и БД "Б", в первой создан DATABASE LINK ко второй. Нужно запросом к БД "А" узнать идентификатор сессии (SID) между БД "А" и БД "Б".

Решение

Из всех опробованных вариантов заработал только этот:
select
   to_number(substr(dbms_session.unique_session_id@DBLINK_NAME,1,4),'XXXX') mysid
from dual;
, где DBLINK_NAME - имя DATABASE LINK'а.