我需要在 Mule Studio 的 Ruby 中使用 openssl。Mule Studio 预装了 JRuby。我相信您知道,JRuby 不包含 openssl。我下载了 jruby-openssl gem 并将这些文件包含在我的 Mule 项目中。我可以要求这些文件,除了 jopenssl.jar。实际上我可以要求它,但它似乎没有做任何事情。我看到以下错误:
uninitialized constant OpenSSL::Digest::OPENSSL_VERSION_NUMBER
这当然是指OpenSSL::OPENSSL_VERSION_NUMBER
.
只是为了好玩,我手动定义了它,但随后它不断发现越来越多的未初始化常量。我读过一些文章说使用 jruby-openssl 的唯一方法是解压缩并组合 jruby-complete.jar 和 jopenssl.jar。由于 Mule 使用的是自己的 JRuby 副本,所以这是不可行的,更不用说荒谬的组合了。
那么请问,有人知道如何在 Mule Studio 中使用 jruby-openssl 吗?(仅供参考,我对 Mule 和 JRuby 都是新手,但我很快就学会了不喜欢两者。)
附录
一点背景知识:我们需要使用 Mule 通过 FTPS 传输文件。由于不直接支持它,而且我们有一个现有的 Ruby 实现,我们决定将 Ruby 代码简单地移动到 Mule 中。但它需要openssl,这就是这个问题的开始。上面的require 'openssl'
行是触发错误的原因。
以下是相关的 Mule/Ruby 代码:
<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 环境库,替换为包含 jopenssl.jar 的新 JRuby 版本。但是,我现在在运行我的应用程序时收到以下错误。据我所知,除了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.
更新
可悲的是,经过几天的努力,我的公司认为通过 Mule 支持 FTPS 是不值得的。