【问题标题】:UTF-8 not supported message from logging subsystem, Fuse ESB 4.4来自日志子系统的 UTF-8 不支持消息,Fuse ESB 4.4
【发布时间】:2011-11-26 16:17:24
【问题描述】:

我已将我的 ServiceMix 升级到 Fuse ESB 4.4 编译。但是,我收到了来自日志系统的错误,我找不到如何处理。

错误信息是:

Warning: encoding "UTF-8" not supported, using UTF-8

未使用编码 UTF-8。文件以 Windows-1250 编码进行编码(该集中的字符已正确转换,当然其他字符不可用)。

我在 StackOverflow 上找到了discussion about similar problem,在那里发现了 Xerces 解析器的问题,但是没有线索,如何在这种特殊情况下解决它。有没有人成功处理过?

【问题讨论】:

  • 还是没有,有没有类似的错误或者提交了bug?

标签: java encoding utf-8 osgi apache-servicemix


【解决方案1】:

问题是有东西试图访问 UTF-8 字符集(可能通过 Charset.forName("UTF-8")),它试图实例化包 sun.nio.cs.UTF_8 中的类。

虽然这将存在于没有类加载器约束的 JVM 运行时中,但在 OSGi 运行时中代码会失败。

解决方案是使用以下内容修改生成此错误消息的包:

导入包:...,sun.nio.cs;分辨率:=可选

这意味着如果它尝试实例化该包中的类,它应该能够找到它 - 但是,如果它不存在(例如,因为您使用的是不同的运行时),那么它仍然可以工作。

请注意,这意味着 System.bundle 正在导出 sun.nio.cs 包,您可以通过生成 Fragment(参见 http://wiki.osgi.org/wiki/Fragment)或让系统包导出 sun.nio.cs 包来实现org.osgi.framework.system.packages 属性。

无论哪种方式,这听起来像是日志包应该修复的东西,而不是您需要修复的东西 - 您是否向上游报告了错误?

【讨论】:

  • sun.nio.cs不应该作为内部包不被OSGi导出吗?我正在使用日志系统,它是 Fuse ESB 本身的一部分。问题可能是 Fuse ESB 4.4 中 JRE 更改为 1.6。
  • 这就是问题所在,它是JRE的一个内部包。但是,OSGi 向包公开的唯一包是 java.* 命名空间中的包,因此任何 JRE 特定的类在运行时中的包都不可用。这就是您的日志记录类找不到它的原因,也是您收到此错误消息的最终原因。
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
相关资源
最近更新 更多