barbitoff programmer`s blog

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

вторник, 4 августа 2015 г.

JDK 1.6: баг при передаче unicode-символов с использованием Runtime.exec()

В JDK 6 имеется баг, поправленный только в 7ой версии, связанный с передачей unicode-символов при вызове Runtime.exec(). Например, т.н. "правые двойные кавычки" при таком вызове превращаются в обычные прямые двойные кавычки (хотя бывают и более неприятные кейсы, когда вызов вообще падает с Exception-ом).
Благо, для проблемы есть workaround, основанный на замене Runtime.exec() на использование ProcessBuilder. Ниже приведен пример вызова, взятый со stackoverflow:
String[] cmd = new String[]{"yourcmd.exe", "some argument with unicode characters"};      
Map<String, String> newEnv = new HashMap<String, String>();
newEnv.putAll(System.getenv());
String[] i18n = new String[cmd.length + 2];
i18n[0] = "cmd";
i18n[1] = "/C";
i18n[2] = cmd[0];
for (int counter = 1; counter < cmd.length; counter++)
{
    String envName = "JENV_" + counter;
    i18n[counter + 2] = "%" + envName + "%";
    newEnv.put(envName, cmd[counter]);
}
cmd = i18n;
ProcessBuilder pb = new ProcessBuilder(cmd);
Map<String, String> env = pb.environment();
env.putAll(newEnv);
final Process p = pb.start();

вторник, 16 декабря 2014 г.

WSO2 ESB 4.5.1: использование пространства имен http://ws.apache.org/ns/synapse в XPath-выражениях

Проблема

Есть прокси-сервис, в нем есть property-медиатор, у которого в xpath-выражении в атрибуте expression используется пространство имен "http://ws.apache.org/ns/synapse" с помощью некоторого префикса, который объявлен в этом же property-теге:
<property name="XXXProp" expression="//syn:abc/text()" xmlns:syn="http://ws.apache.org/ns/synapse"/>
Если прокси-сервис отредактировать через веб-консоль шины, объявление префикса пропадает, после чего property-медиатор, естественно, начинает выдавать ошибки из-за неизвестного префикса пространства имен. Если объявление префикса перенести из медиатора выше (хотя даже в сам корневой тег прокси-сервиса), ситуация не меняется.

Решение

Похоже на баг, и вызван он скорее всего тем, что сам конфигурационный xml прокси-сервиса имеет пространство имен по-умолчанию "http://ws.apache.org/ns/synapse". Копаться в исходниках времени не было, поэтому пришлось воспользоваться workaround'ом:
<property name="XXXProp" expression="//*[local-name()='abc']/text()" />

воскресенье, 16 июня 2013 г.

Развертывание war-ников на Weblogic 10.3.5 из Netbeans 7.3

Проблема

Netbeans 7.3 при развертывании war-ника на Weblogic 10.3.5 висит по пять минут на "Waiting for server to start the module...". При этом, приложение уже реально стартануло (видно через console, отвечает на запросы). 

Причина

Соотв. баг заведен в багтрекере NB (https://netbeans.org/bugzilla/show_bug.cgi?id=228419) и будет исправлен в 7.4. Проявляется он только при отсутствии в war-нике index.jsp в корне. Отсюда и workaround для проблемы - добавить index.jsp с любым содержимым в корень приложения.