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 添加了编码过滤之后,能解决部分因中文引起的乱码问题,不过因为业务需要,需要对Mondrian的源码做些修改,所以需要在本地搭建了Mondrian3.5.0源码开发环境(这里不再讨论源码环境的搭建),排除编译错误后打包Mondrian.jar包放到项目,开启log4j日志为Debug时,会看到当加载schema文件中有中文的时候,会出现中文乱码问题。并且查询结果集也会出现乱码问题。
 
      源码分析如下:
      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))
 

猜你喜欢

转载自blog.csdn.net/jnwzping/article/details/84420874
今日推荐