【问题标题】:Camel - Drools rules encodingCamel - Drools 规则编码
【发布时间】:2014-05-06 11:38:13
【问题描述】:

我有一个 Excel 中的 Drools 决策表(97/2000 格式),规则中使用的一些字符串具有非 ascii 字符,例如变音符号 (Ä)。当我从这个决策表中使用 Ubuntu 12.04LTS 中的 Camel-Drools 集成模块构建规则包时,我在规则源中得到错误的字符。

例如,

在电子表格中 -> Ääripää tässä tapauksessa,

在内置的 drl 文件中 -> ��rip��t�ss�tapauksessa

如果我在 Windows/Ubuntu/Mac(Eclipse 或 IDEA 没有区别)开发机器甚至 Vagrant/VirtualBox/Ubuntu 环境中使用完全相同的 excel 文件,则 drools 规则不存在字符编码问题。

代码被打包成 Spring-boot Jar-file,其中包含部署应用程序的 Jetty 服务器。这个相同的 JAr 文件已用于在每个不同的环境中进行测试,但只有一个失败是基于云的测试环境。

测试环境是用 Kitchen & Chef 食谱建立的,它是一个云环境,没有最模糊的云环境和开发环境之间的区别。

已尝试将 excel 文件格式化为 UTF-8 编码,但似乎不可能。 Camel-Drools 集成模块应该在他们的下一个版本(6.0.0 https://issues.jboss.org/browse/JBRULES-2936)中修复这个问题,但它仍处于测试阶段,还不能使用。我也没有得到他们稳定发布的时间表。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 您能否提供来自 .drl 文件的 Ääripää tässä tapauksessa 的 od -tx1 输出?
  • 我没有DRL文件,系统在运行时生成DRL是Excel文件
  • 那你是如何获得‘rip�� t�ss’ tapauksessa 的?
  • 我使用骆驼集成到drools 功能(camel-drools 模块为我做的),然后我通过骆驼将输入发送到drools 的运行时生成的代码,在触发规则后给我一个输出。然后通过 REST API 将此结果提供给用户/前端。而在 Ubuntu 云环境中,由于某种原因编码无法正常工作。
  • 像这样:camelContext.createProducerTemplate().sendBody("direct:accounting1RulesRoute", ImmutableList.of(accountingDto));

标签: excel ubuntu character-encoding apache-camel drools


【解决方案1】:

在告诉 Drools 关于 XLS 时,使用重载方法指定 encoding

public interface KieResources extends Service {

Resource newUrlResource(URL url);

Resource newUrlResource(URL url,
                        String encoding);

Resource newUrlResource(String path);

Resource newUrlResource(String path,
                        String encoding);

Resource newFileSystemResource(File file);

Resource newFileSystemResource(File file,
                               String encoding);

...

}

如果你不这样做,它将使用 Java 平台的默认编码,它使用操作系统的默认编码(Linux 上的 UTF-8,法国 Windows 机器上的 windows-1252,...)

【讨论】:

  • 当我通过 Camel 集成框架使用 drools 时,我无法控制如何调用 KieResources。 Camel-drools 集成在 5.6.0 版本,还没有使用 KieResources,只有 6+ 版本,对吧?
  • drools-camel 在 6.0 IIRC 中已重命名为 kie-camel。
  • 太好了,它有一个最终版本,如果它纠正了这个问题,我会测试它。
【解决方案2】:

找到原因!

我们使用的云环境配置了厨师,并且每次重启云实例时,食谱都会以某种方式将字符编码设置为非 UTF。

因此该文件未被识别为 UTF,因为环境告诉 java 使用其他内容。

感谢 cmets 并帮助大家!

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多