FOP 1.1을 사용하고 있습니다. 최대 20,000자를 포함 할 수있는 텍스트가 있고 그 사이에 공백이 포함되지 않은 텍스트가 xsl을 사용하도록 수정되었습니다. 너비가없는 공간. xml 태그에 1500 자 정도의 문자가 포함되어 있으면 잘 작동합니다. 그 이상의 경우 스택 오버플로 오류가 발생합니다. weblogic 서버의 힙 공간도 2GB입니다. 가능한 해결 방법 또는 xsl에 결함이있는 사람은 누구에게도 도움이 될 수 있습니다. org.apache.xml에서 java.lang.StackOverflowError의 : XSL의 너비가 0 인 경우 stackoverflow 오류가 발생합니다.
는에 의해 발생 - 아래<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:locale="xalan://java.util.Locale" xmlns:arrayList="xalan://java.util.ArrayList" xmlns:func="http://exslt.org/functions" extension-element-prefixes="func" version="1.0"> .................. <fo:block> <xsl:value-of select="func:callTemplate(summaryData)"/> </fo:block> .................. <xsl:template name="zero_width_space_1"> <xsl:param name="data"/> <xsl:param name="counter" select="0"/> <xsl:choose> <xsl:when test="$counter < (string-length($data))"> <xsl:value-of select='concat(substring($data,$counter,1),"​")'/> <xsl:call-template name="zero_width_space_2"> <xsl:with-param name="data" select="$data"/> <xsl:with-param name="counter" select="$counter+1"/> </xsl:call-template> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template name="zero_width_space_2"> <xsl:param name="data"/> <xsl:param name="counter"/> <xsl:value-of select='concat(substring($data,$counter,1),"​")'/> <xsl:call-template name="zero_width_space_1"> <xsl:with-param name="data" select="$data"/> <xsl:with-param name="counter" select="$counter+1"/> </xsl:call-template> </xsl:template> <func:function name="func:callTemplate"> <xsl:param name="string1"/> <xsl:call-template name="zero_width_space_1"> <xsl:with-param name="data" select="$string1"/> </xsl:call-template> <func:result/> </func:function> </xsl:stylesheet>
내가지고있어 오류가 -
아래는 XSL 코드 샘플입니다. utils.FastStringBuffer.append (FastStringBuffer.java:499) at org.apache.xml.dtm.ref.dom2dtm.DOM2DTM.getNodeData (DOM2DTM.java:935) at org.apache.xml.dtm.ref. dom2dtm.DOM2DTM.getNodeData (DOM2DTM.java) : org.apache.xpath.objects.XNodeSet.getStringFromNode (XNodeSet.java:217에서 org.apache.xml.dtm.ref.dom2dtm.DOM2DTM.getStringValue (DOM2DTM.java:827에서 928) ) ) org.apache.xpath.functions.FunctionDef1Arg.getArg0AsString (FunctionDef1Arg.java:97) org.apache.xpath.functions에서 org.apache.xpath.objects.XNodeSet.xstr (XNodeSet.java:256)에 있습니다. FuncStringLength.execute (FuncStringLength.java:45) at org.apache.xpath.Expression.execute (Expression.java:155) at org.apache.xpath.operations.Operation.execute (Operation.java:110) at org.apache.xpath.Expression.bool (Expression.java:186) at org.apache.xpath.XPath.bool (XPath.j org.apache에서 org.apache.xalan.transformer.TransformerImpl.executeChildTemplates에서 org.apache.xalan.templates.ElemChoose.execute (ElemChoose.java:126) (TransformerImpl.java:2400)에서 412) 아바 나는 두 가지의 필요에 의해 혼란 스러워요
안녕하세요 팀, u는 그것을 말한대로 내가 너무 하나의 템플릿을 사용했지만, 한 스택 오버플로 오류가 해결되지 않았습니다. FOP에 대해 잘 알지 못해서, 제로 너비 공간을 사용하여 텍스트를 줄 바꿈하는 방법에 대해 다른 게시물에서 언급 한 몇 가지 솔루션을 시도했습니다. 은 제공되는 솔루션으로 시도합니다. 빠른 응답을 주셔서 감사합니다 .. – nithin
tim 당신이 준 함수로 시도했지만 오류 아래에 있어요 - SystemId 알 수 없음; 라인 # 3951; 칼럼 # 66; 함수를 찾을 수 없습니다 : 바꾸기 SystemId 알 수 없음; 라인 # 3951; 칼럼 # 66; 함수 토큰을 찾을 수 없습니다. 오전 9 시부 터 사용 중 – nithin
사과드립니다. 내 솔루션은 XSLT 2.0에서만'replace'를 사용했습니다. exslt의 문자열 함수를 사용하여 XSLT 1.0에서 작동하는 솔루션을 제공하기 위해 필자의 답을 수정했습니다. http://xsltransform.net/jxDigUZ –