barbitoff programmer`s blog

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

среда, 26 марта 2014 г.

AxisFault: The system cannot infer the transport information from the vfs:file: ...

Проблема

WSO2 ESB 4.5.1. При попытке отправить сообщение на Endpoint с URL вида "vfs:file://..." в лог валится ошибка:
ERROR - Axis2Sender Unexpected error during sending message out
org.apache.axis2.AxisFault: The system cannot infer the transport
information from the vfs:file://...

Причина

В %WSO2_HOME%/repository/conf/axis2/axis2.xml не включен vfs-transportSender.

Решение

Раскомментировать:
<transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender"/>

axis2 1.6.2 на weblogic и "Weblogic's StAX implementation is unsupported and some Axiom features will not work as expected! Please use Woodstox instead"

Проблема

Приложение, публикующее веб-сервис, построенный на axis2 (версия 1.6.2) отлично работает на Tomcat, однако на Weblogic выдает некорректный xml в ответ на запросы, например:
<ns1:Response xmlns:ns1="http://my.ns/get">
     <ns1:http://my.ns/get extension="pdf">
          <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:1.339fa79a76e9c28c028457f6d5d2336291c1c2c768ddde02@apache.org"></xop:Include>
     </ns1:http://my.ns/get>
</ns1:Response>
Т.е. вместо наименования тега (это должен был быть тег "Content") почему-то идет URL пространства имен.
При этом при старте приложения в лог пишется настораживающее:
Weblogic's StAX implementation is unsupported and some Axiom features will not work as expected! Please use Woodstox instead.
Решение

В weblogic.xml указать:
<weblogic-web-app>
 <container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>
</weblogic-web-app> 
Также нужно убедиться в наличии в библиотеках приложения xercesImp и xml-apis.

вторник, 25 марта 2014 г.

Weblogic: password-encrypted в конфиге jdbc-data-source и ошибка "Could not perform unpadding: invalid pad byte"

Проблема:

Есть некий EAR-ник, содержащий jdbc-data-source. В нем пароль задан с помощью password-encrypted:
<password-encrypted>{AES}q+rhp78+7777woah7777JW7777S+0p7777djmw7777c=</password-encrypted>
При старте приложения в лог валится ошибка:
####<Mar 19, 2014 4:44:21 PM MSK> <Error> <Console> <xxx> <AdminServer> <[ACTIVE] ExecuteThread: '21' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <> <1395233061606> <BEA-240003> <Console encountered the following error weblogic.application.WrappedDeploymentException: Could not perform unpadding: invalid pad byte.
at com.rsa.jsafe.c.a(Unknown Source)
at com.rsa.jsafe.JSAFE_SymmetricCipher.decryptFinal(Unknown Source)
at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptBytes(JSafeEncryptionServiceImpl.java:124)
at weblogic.security.internal.encryption.JSafeEncryptionServiceImpl.decryptString(JSafeEncryptionServiceImpl.java:184)
at weblogic.security.internal.encryption.ClearOrEncryptedService.decrypt(ClearOrEncryptedService.java:96)
at sun.reflect.GeneratedMethodAccessor378.invoke(Unknown Source)
... at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:46)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
При этом само приложение не стартует.

Причина


Конфиг datasource'а был перевезен с другого инстанса weblogic (соответственно, и сам зашифрованный пароль был создан именно для того инстанса). Как оказалось, шифрование пароля привязано к домену сервера Weblogic (о чем, кстати, и сказано в документации: http://docs.oracle.com/cd/E11035_01/wls100/admin_ref/utils.html#encrypt). Так что при копировании конфигурации в другой домен Weblogic требуется повторить процедуру шифрования пароля (как это делается, я писал тут: http://barbitoff.blogspot.ru/2013/11/weblogic-datasource.html).

суббота, 1 марта 2014 г.

jQuery: как в обработчике события отличить "реальное" событие от программно симулированного

Задача

В обработчике события (например, change) отличить "реальное" событие (вызванное пользовательским вводом) от программно симулированного (в случае с change-событием - вызовом метода change() для элемента).

Решение
$("input").change(function(ev) {
     if(ev.hasOwnProperty("originalEvent")) {
          // "реальное" событие
     }
     else {
          // симулированное
     }

JavaScript: расчет контрольной цифры штрихкода EAN-8

Стандарт EAN-8 предусматривает 7 значащих цифр и 8ую цифру, являющуюся контрольной суммой первых 7. Задача - рассчитать для имеющихся 7 цифр 8ую (а также - сгенерировать 100 последовательных штрихкодов):
function ean8(eanCode) {
even = Number(eanCode.charAt(1)) +
      Number(eanCode.charAt(3)) +
      Number(eanCode.charAt(5));
odd = Number(eanCode.charAt(0)) +
     Number(eanCode.charAt(2)) +
     Number(eanCode.charAt(4)) +
     Number(eanCode.charAt(6)) ;
total = 3 * odd + even;
total = total % 10;
total = 10 - total;
total = total % 10;
return eanCode+total;
}
for(var i = 1000000; i<1000100; i++) {
console.debug(ean8(String(i)));
}