NoSuchMethodError:com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList.getLength()J at com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList.append

时间:2014-12-30 22:32:34

标签: coldfusion itext xmlworker

我有其中一个"没有任何改变,但我们改变了一堆东西"问题。

我还没有改变源代码。我们DID更改服务器。当我尝试使用itext xfaworker中的FillandFlatten例程时,我在本页底部收到错误。我们正在运行所有5.5.4版本文件。编译时我没有收到任何错误/警告。

我正在导入以下内容(最后两个是尝试解决此问题):

import com.allaire.cfx.*;
import com.itextpdf.license.LicenseKey;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.XfaForm;
import com.itextpdf.tool.xml.xtra.xfa.XFAFlattener;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import com.itextpdf.tool.xml.xtra.xfa.js.*;
import com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList;

虽然我相当肯定我会做的事情,但我不知道该去哪儿了。

错误生成: java.lang.NoSuchMethodError:com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList.getLength()J at com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList.append(RhinoJsNodeList.java:37 )com.itextpdf.tool.xml.xtra.xfa.js.JsTree.addChild(JsTree.java:94)at com.itextpdf.tool.xml.xtra.xfa.js.JsNode.addChild(JsNode.java:234) )com.itextpdf.tool.xml.xtra.xfa.pipe.DataPipeline.open(DataPipeline.java:70)com.itextpdf.tool.xml.XMLWorker.startElement(XMLWorker.java:103)com.itextpdf上的com.itextpdf.tool.xml.xtra.xfa.pipe.DataPipeline.open(DataPipeline.java:70)。 tool.xml.parser.XMLParser.startElement(XMLParser.java:371)位于com.itextpdf.tool.xml.parser的com.itextpdf.tool.xml.parser.state.TagEncounteredState.process(TagEncounteredState.java:104)。 XMLParser.parseWithReader(XMLParser.java:236)位于com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:214)的com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java: 187)at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:401)at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:2 82)在FillAndFlatten.processRequest(FillAndFlatten.java:87)的FillAndFlatten.manipulatePdf(FillAndFlatten.java:125)的com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:253)

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我之前在以下情况中看到过这个问题。

假设您有一个依赖于库B的应用程序A.您有两个罐子:A-1.0.jar和B-1.0.jar。 A-1.0.jar使用B-1.0.jar编译。

在库B的1.0版本中,有一个返回foo()的方法void

public void foo() { ... }

但是,在2.0版本中,此方法已更改,因为它现在返回int

public int foo() { ... }

该方法的名称没有改变,但其签名确实如此。

现在你得到一个新的jar:B-2.0.jar,但如果你使用A-1.0.jar和B-2.0.jar,你会得到一个NoSuchMethodError,因为方法foo()可以找不到。实际上,方法foo()仍然存在,但应用程序A的1.0版正在寻找public void foo(),而库B的2.0版则不知道这种方法。它只知道方法public int foo()

解决这类问题的唯一方法是使用B的新jar将应用程序A重新编译为A-2.0.jar。 A-1.0.jar不适用于B-2.0.jar,但是A-2.0.jar会(即使你没有改变任何应用程序A)。

免责声明:此答案基于一般NoSuchMethodError的出现。我没有检查这是否解释了XFA Worker的具体问题,但是我发现在iText Software的问题跟踪器上有一个票据,这意味着我们的一位工程师会检查我的有根据的猜测是否正确(如果没有) ,那个工程师会发一个额外的答案。)