2

I'm having one of those "nothing has changed, but we changed a bunch of stuff" problems.

I haven't changed the source code. We DID change servers. When I try to use the FillandFlatten routine from itext xfaworker, I get the error at the bottom of this page. We are running all 5.5.4 version files. I get no errors/warnings when compiling.

I am importing the following (the last two were an attempt to fix this):

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;

Although I am fairly certain that the fix is going to be something I did, I don't know where to look anymore.

ERROR GENERATED: 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) at 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) at com.itextpdf.tool.xml.xtra.xfa.pipe.DataPipeline.open(DataPipeline.java:70) at com.itextpdf.tool.xml.XMLWorker.startElement(XMLWorker.java:103) at com.itextpdf.tool.xml.parser.XMLParser.startElement(XMLParser.java:371) at com.itextpdf.tool.xml.parser.state.TagEncounteredState.process(TagEncounteredState.java:104) at com.itextpdf.tool.xml.parser.XMLParser.parseWithReader(XMLParser.java:236) at com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:214) at 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:282) at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:253) at FillAndFlatten.manipulatePdf(FillAndFlatten.java:125) at FillAndFlatten.processRequest(FillAndFlatten.java:87)

Thank you in advance.

4

1 に答える 1

1

この問題は、次のコンテキストで以前に見たことがあります。

ライブラリ B に依存するアプリケーション A があるとします。A-1.0.jar と B-1.0.jar の 2 つの 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 が得られますが、B-2.0.jar で A-1.0.jar を使用するとNoSuchMethodError、メソッドfoo()が見つからないため、a が得られます。実際には、メソッド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 の問題トラッカーにチケットが記録されていることがわかりました。 、そのエンジニアが追加の回答を投稿します)。

于 2014-12-31T08:01:00.747 に答える