2012-04-25 1 views
1

Мне нужно использовать openssl в Ruby в Mule Studio. Mule Studio поставляется в комплекте с JRuby. Как я уверен, вы знаете, JRuby не включает openssl. Я загрузил jruby-openssl gem и включил файлы в мой проект Mule. Я могу потребовать файлы, кроме jopenssl.jar. На самом деле мне нужен , но он ничего не делает. Я вижу следующее сообщение об ошибке:Использование jruby-openssl в Mule Studio

uninitialized constant OpenSSL::Digest::OPENSSL_VERSION_NUMBER 

Это, конечно, со ссылкой на OpenSSL::OPENSSL_VERSION_NUMBER.

Просто для удовольствия я вручную определил его, но затем он продолжал находить все больше и больше неинициализированных констант. Я прочитал несколько статей, в которых говорится, что единственный способ использования jruby-openssl - распаковать и объединить jruby-complete.jar и jopenssl.jar. Поскольку Мул использует свою собственную копию JRuby, это невозможно, не говоря уже о смешном kludge.

Итак, кто-нибудь знает, как использовать jruby-openssl в Mule Studio? (FYI Я новичок в обоих Mule и JRuby, но я быстро учусь и не любят.)

Добавление

Немного предыстории: Нам нужно транспортировать файлы по FTPS с Mule. Поскольку он не поддерживается напрямую, и у нас есть существующая реализация Ruby, мы решили просто переместить код Ruby в Mule. Но для этого требуется openssl, в котором началась эта проблема. Строка require 'openssl' является тем, что вызывает ошибку.

Вот соответствующий Mule/рубин код:

<scripting:transformer name="SetData" doc:name="Set Data"> 
    <scripting:script engine="jruby"> 
     <scripting:text><![CDATA[ 
      require 'socket' 
      require 'openssl' 
      require 'net/ftp' 
      require 'implicit_ftps' 
      ... 
     ]]></scripting:text> 
    </scripting:script> 
</scripting:transformer> 

На ваше предложение, я перестроил Mule библиотека окружающей среды, заменив новую версию JRuby, которая включает в себя jopenssl.jar. Однако теперь я получаю следующую ошибку при запуске моего приложения. Насколько я знаю, кроме jruby-complete.jar, ничего больше не изменилось.

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/consolo/bin/MuleStudio/plugins/org.mule.tooling.server.3.2.1_1.0.0.201201200937/mule/boot/mule-module-logging-3.2.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/consolo/bin/MuleStudio/plugins/org.mule.tooling.server.3.2.1_1.0.0.201201200937/mule/boot/mule-module-logging-3.2.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

Update

К сожалению, после того, как дни затраченных усилий, моя компания решила, что поддержка FTPS через мул не стоит.

+0

Я хотел бы перейти за пределы моего ответа ниже и помочь вам разобраться с проблемой. Не могли бы вы поделиться достаточно Mule config/Ruby code, чтобы воспроизвести проблему? –

+0

Спасибо. Я добавил дополнительную информацию к первоначальному вопросу.Дайте мне знать, если вам нужна дополнительная информация. – bioneuralnet

+0

Возможно ли, что mule-module-logging-3.2.1.jar добавляется дважды в путь сборки проекта? Помимо предупреждения SLF4J, работает ли код JRuby? –

ответ

1

Поддержка языка Scripting в Mule подключается и обеспечивается через поставщиков, поддерживающих JSR-223. Mule CE только встраивает Groovy, то есть вам нужно будет add JRuby в Mule, что даст вам возможность выбрать любые JAR (ы), необходимые для достижения вашей цели.

С другой стороны, Mule Studio включает в себя дополнительные скриптовые провайдеры, в том числе JRuby. Это удобно, но может создавать проблемы, если требуется конкретная версия (что, кажется, ваше дело).

В студии, если открыть библиотеку Mule время выполнения, вы найдете JRuby-двигатель-1,1-jdk14.jar и JRuby-полный-1.0.jar. К сожалению, Studio не позволяет изменять эту библиотеку, поэтому лучшим вариантом было бы создать новую, выбрав все JAR под /plugins/org.mule.tooling.server.3.2.1_1.0.0.201201200937/mule, за исключением jRuby (в ./user), а затем добавьте те, которые вам действительно нужны.