2

我遇到了一个“什么都没有改变,但我们改变了一堆东西”的问题。

我没有更改源代码。我们确实更换了服务器。当我尝试使用 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 在 com.itextpdf.tool.xml.xtra.xfa.js.RhinoJsNodeList.append(RhinoJsNodeList. java:37) 在 com.itextpdf.tool.xml.xtra.xfa.js.JsTree.addChild(JsTree.java:94) 在 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.tool.xml.parser.XMLParser.startElement(XMLParser.java:371) 在 com.itextpdf.tool.xml.parser.state.TagEncounteredState.process(TagEncounteredState.java:104) 在 com.itextpdf.tool.xml .parser.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) 在 com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:401) 在 com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:282) 在 com .itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlatten.java:253) 在 FillAndFlatten.manipulatePdf(FillAndFlatten.java:125) 在 FillAndFlatten.processRequest(FillAndFlatten.java:87)

先感谢您。

4

1 回答 1

1

我以前在以下上下文中看到过这个问题。

假设您有一个依赖于库 B 的应用程序 A。您有两个 jar: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()

解决此类问题的唯一方法是将应用程序 A 与 B 的新 jar 重新编译为 A-2.0.jar。A-1.0.jar 不适用于 B-2.0.jar,但 A-2.0.jar 可以(即使您没有对应用程序 A 进行任何更改)。

免责声明:此答案通常基于 a 的出现NoSuchMethodError。我还没有检查这是否解释了 XFA Worker 的具体问题,但我看到 iText Software 的问题跟踪器上已经有一张票,这意味着我们的一位工程师将检查我有根据的猜测是否正确(如果不是,该工程师将发布一个额外的答案)。

于 2014-12-31T08:01:00.747 回答