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

Java liferay自定义Portlet中的最大language.properties文件大小,java,tomcat,liferay,portlet,Java,Tomcat,Liferay,Portlet,当我试图添加一个Language.properties文件时,该文件包含数千个具有长文本值的键。 无法使用检索jsp文件中的值。它不显示任何值并在其输出中滑动键。 我可以知道它支持的最大密钥数或最大文件大小吗。 我正在将liferay 6.0.6与Tomcat捆绑包一起使用 在我的属性文件中,它包含7600行,其中键的值很大 InputStream stream = application.getResourceAsStream("/abc.properties"); Properties pr

当我试图添加一个Language.properties文件时,该文件包含数千个具有长文本值的键。 无法使用
检索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)

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,因此您必须在使用
和自己加载资源包之间做出决定。两者都不起作用。

您可以尝试在文件中使用较少的属性来检查您的配置是否正常吗?是的,我尝试使用较少的属性,但效果很好。当我以数千个属性添加更多属性时,效果不好。因为您显然有一个unicode转义,您可能需要
native2ascii-reverse-encoding utf8 Language.properties>utf8 Language.properties
。然后使用新文件。或者,如果文件中确实有\uxxx,则可能需要引用\字符,否则“xxxx”应为十六进制(因为\u启动unicode序列),请尝试\\uxxx。此外,您还必须决定是使用portlet资源包(需要是UTF-8)还是使用Properties.load()加载(需要是ISO-8859-1)。如上所述,两者不能同时工作。我再次删除了Language.properties文件的一些内容,现在它包含3600行属性,工作正常,而如果我将其增加到3700行,则无法工作或读取属性文件。language.properties文件的文件大小为10.0MB,包含3600行代码。请仅尝试造成3600和3700之间差异的100行代码。根据您发布的内容,条目数量没有问题,但有一个(或某些)特定条目编码错误。