mondrian schema文件:中文读取乱码并出错 的解决

文针对的是Mondrian3.5.0版本出现的中文乱码问题做些修改,使用的是官方mondrian-3.5.0.zip

      官方下载地址:http://sourceforge.net/projects/mondrian/files/mondrian/mondrian-3.5.0/ 。

      解压mondrian.war到Tomcat运行的时候查询结果会出现乱码,可在项目的web.xml文件中添加编码方式。

      修改如下:

<servlet>  
    <servlet-name>MondrianXmlaServlet</servlet-name>  
    <servlet-class>mondrian.xmla.impl.DynamicDatasourceXmlaServlet</servlet-class>  
    <init-param>  
        <param-name>CharacterEncoding</param-name>  
        <param-value>UTF-8</param-value>  
    </init-param>  
</servlet>

 

在 MondrianXmlaServlet 添加了编码过滤之后,能解决部分因中文引起的乱码问题。

因为业务需要,需要能在schema文件中使用中文,默认情况下, Mondrian对schema文件中的中文字符读取会出现乱码,并导致MDX查询错误,这个时候就需要对Mondrian的源码做些修改,所以在本地搭建了Mondrian3.5.0源码开发环境(这里不再讨论源码环境的搭建),排除编译错误后打包Mondrian.jar包放到项目,开启log4j日志为Debug时,会看到当加载schema文件中有中文的时候,会出现中文乱码问题,并且程序会抛出“MDX对象没有找到”的异常。
 
      源码分析如下:
      Mondrian在加载Schema配置文件的时候由RolapSchema类完成,借助了commons-vfs.jar包,可以加载本地文件或FTP服务器上的文件作为配置文件。
 
      RolapSchema加载配置文件的入口方法为load(String,String),其中工具类Util.readVirtualFile()和Util.readVirtualFileAsString()实现了文件的读取,并分别返回InputStream文件输入流对象和文件文本String对象。
 
      如果配置文件Schema xml有中文字符的话,Util.readVirtualFile()和Util.readVirtualFileAsString()方法打印出的文件内容都会出现乱码,在这里需要改造两个地方。
 
      改造如下:
     1、修改 Util.readVirtualFileAsString()方法:
           a、return new String(chars) 改为 return new  String(bytes,"utf-8")。
     2、修改 mondrian.rolap.RolapSchema.load(String,String)方法:
           a、注释://in = Util.readVirtualFile(catalogUrl);
           b、修改:def = xmlParser.parse(in) 为:
                           def = xmlParser.parse(Util.readVirtualFileAsString(catalogUrl))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值