liferay自定义portlet中的最大language.properties文件大小

时间:2014-02-04 05:57:42

标签: java tomcat liferay portlet

当我尝试添加带有数千个具有longtext值的键的Language.properties文件时。 无法使用<liferay-ui:message key="xyz" />检索jsp文件中的值。它没有显示任何值并在其输出中显示关键字。 我可以知道它支持的最大键数或最大文件大小。 我正在使用Liferay 6.0.6与Tomcat捆绑。

在我的属性文件中,它包含7600行,键值很大。

InputStream stream = application.getResourceAsStream("/abc.properties");
Properties prop=new Properties();
prop.load(stream);

如果我使用上面的代码从另一个属性文件中检索数据,则会出现以下错误。

 08:14:08,936 ERROR [jsp:154] java.lang.IllegalArgumentException: Malformed \uxxxx encoding.
       at java.util.Properties.loadConvert(Properties.java:569)
       at java.util.Properties.load0(Properties.java:392)
       at java.util.Properties.load(Properties.java:342)
       at org.apache.jsp.html.ahadith.sb_005fview11_jsp._jspService(sb_005fview11_jsp.java:158)
       at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
       at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
       at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
       at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
       at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:551)
       at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:488)
       at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:316)
       at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:105)
       at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:328)
       at com.liferay.util.bridges.mvc.MVCPortlet.include(MVCPortlet.java:343)
       at com.liferay.util.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:291)

先谢谢, Shahbaz Khan

1 个答案:

答案 0 :(得分:3)

Liferay Portal本身在平台的文件中带有~7400行,并且它们工作正常。您遇到问题的大小顺序是多少?我不知道任何与尺寸相关的限制,除了它被保存在记忆中。

您应该注意编码,并确保您的文件是UTF-8编码。

另一种检查你是否真的受到大小影响的方法而不是导致异常的特定值(你检查了你的日志文件吗?)是:

  • 你说用“较小”的文件,一切都运行良好。我们将此内容命名为A
  • 你还说当你向文件添加数千行(我们称之为B)时,A + B的结果不起作用
  • 如果你只和B一起尝试怎么样:如果该文件中有违规内容,编码等,你会发现这种方式。

另外,谈到成千上万的语言键,这听起来像一个安静的令人印象深刻的很多,考虑到整个门户(已经令人印象深刻的大小)与~7400键相处。如果建筑改变是有序的,那几乎值得质疑 - 但这只是一种直觉,你会比我更了解你的应用,你可以判断你需要什么样的翻译。

修改:现在您已编辑了问题,包括实际的堆栈跟踪:是的,您遇到了编码问题。使用jdk的native2ascii程序将ISO-8859-1编码的属性文件转换为UTF-8。然后通过Liferay使用该文件:看起来你正在从jsp中读取这个文件 - 这意味着你很可能会在每个页面请求中这样做,这是一种简单的方法来杀死你的门户网站的性能。

请注意,Liferay将属性文件读取为UTF-8,而Properties.load(Stream)始终采用ISO-8859-1,因此您必须自己决定使用<liferay-ui:message key="some-key"/>和加载资源包。两者都行不通。