异常sun.io.MalformedInputException的终极解决方法

      当你看到此文的时候,相信你正在费尽九牛二虎之力想把原本部署在windows操作系统tomcat下的项目部署到ibm小型机aix操作系统的tomcat下,又或者正在解析某个xml文件,如果是的话,请继续往下看,保证你不费吹灰之力就能把你的问题解决。

 

      出现此异常的原因是IBM在JDK 1.4版本中为了追求对io通道的高效率改变了JDK 1.3中对io通道中异常处理的策略。IBM JDK 1.4中对于io通道的异常处理更加严格,因此系统中会报上面的错误。看到这里你可能在想,可是我用的是1.5版本哦!其实1.4版本之后的版本都沿用了该策略。

 

      解决这一问题的办法是不使用IBM JDK 1.4中默认的io通道,而使用nio通道,而要实现这一点只需对tomcat的catalina.sh文件(该文件在bin目录下)作少少改动就可以达到目的,增加JAVA_OPTS="$JAVA_OPTS -Dibm.stream.nio=true"定义,具体如下:

# Set juli LogManager if it is present
if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then
  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  JAVA_OPTS="$JAVA_OPTS -Dibm.stream.nio=true"
  LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
else
  # Bugzilla 45585
  LOGGING_CONFIG="-Dnop"
fi

 

      还有另外一种情况会导致这一异常,就是文件编码的问题,多发生在你解析xml文件的时候。问题出现的原因是该xml文件保存的时候包含了BOM头信息(十有八九是因为你使用UE编辑过该文件)。

 

      在这种情况下解铃人还须系铃人,只需要用UE打开这个文件,然后另存为,在格式那里选择UTF-8 - 无BOM,这样就可以了,如果你需要改变的文件很多,可以用程序读取目录下的所有文件,然后把BOM头信息替换成空格就行,或者上网搜索一下批量删除BOM信息的工具。

 

你可能感兴趣的:(java,tomcat,IBM,AIX,sun)