“线程中的异常”;“主要”;java.lang.reflect.InvocationTargetException

“线程中的异常”;“主要”;java.lang.reflect.InvocationTargetException,java,itext,Java,Itext,我正在使用iText PDF 5.5.11将PDF转换为XML。我已经在stackoverflow上检查了类似的答案。当我在ubuntu上使用命令行运行jar文件时,我遇到了以下错误。java版本“1.8.0_101” 线程“main”java.lang.reflect.InvocationTargetException中的异常 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAcces

我正在使用iText PDF 5.5.11将PDF转换为XML。我已经在stackoverflow上检查了类似的答案。当我在ubuntu上使用命令行运行jar文件时,我遇到了以下错误。java版本“1.8.0_101”

线程“main”java.lang.reflect.InvocationTargetException中的异常 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 原因:java.lang.NoClassDefFoundError:org/bouncycastle/asn1/ASN1Encodable 请访问com.itextpdf.text.pdf.PdfEncryption.(PdfEncryption.java:147) 在com.itextpdf.text.pdf.PdfReader.readdecrypteddocbj上(PdfReader.java:1063) 位于com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1469) 请访问com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:751) 请访问com.itextpdf.text.pdf.PdfReader(PdfReader.java:198) 请访问com.itextpdf.text.pdf.PdfReader(PdfReader.java:236) 请访问com.itextpdf.text.pdf.PdfReader。(PdfReader.java:224) 请访问com.itextpdf.text.pdf.PdfReader(PdfReader.java:214) 位于test.pdfreader.readXml(pdfreader.java:34) 位于test.pdfreader.main(pdfreader.java:30) 我对java不太熟悉。我使用PHPExec函数从PHP调用这个jar文件。 下面是我用来将PDF转换为XML的代码

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.XfaForm;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class pdfreader {
    public static void main(String[] args) throws IOException, DocumentException, TransformerException {
        String SRC = "";
        String DEST = "";

        for (String s : args) {
            SRC = args[0];
            DEST = args[1];
        }
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new pdfreader().readXml(SRC, DEST);
    }

    public void readXml(String src, String dest) throws IOException, DocumentException, TransformerException {
        PdfReader reader = new PdfReader(src);

        AcroFields form = reader.getAcroFields();
        XfaForm xfa = form.getXfa();
        Node node = xfa.getDatasetsNode();
        NodeList list = node.getChildNodes();
        for (int i = 0; i < list.getLength(); ++i) {
            if ("data".equals(list.item(i).getLocalName())) {
                node = list.item(i);

                break;
            }
        }
        list = node.getChildNodes();

        Transformer tf = TransformerFactory.newInstance().newTransformer();
        tf.setOutputProperty("encoding", "UTF-8");
        tf.setOutputProperty("indent", "yes");
        FileOutputStream os = new FileOutputStream(dest);

        tf.transform(new DOMSource(node), new StreamResult(os));
        reader.close();
    }
}
import com.itextpdf.text.DocumentException;
导入com.itextpdf.text.pdf.AcroFields;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.XfaForm;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
公共类PDF阅读器{
公共静态void main(字符串[]args)引发IOException、DocumentException、TransformerException{
字符串SRC=”“;
字符串DEST=“”;
for(字符串s:args){
SRC=args[0];
DEST=args[1];
}
文件文件=新文件(DEST);
文件.getParentFile().mkdirs();
新的pdfreader().readXml(SRC,DEST);
}
public void readXml(String src,String dest)抛出IOException、DocumentException、TransformerException{
PdfReader读取器=新PdfReader(src);
AcroFields form=reader.getAcroFields();
xfaformxfa=form.getXfa();
Node Node=xfa.getDatasetsNode();
NodeList list=node.getChildNodes();
对于(int i=0;i
当您在Java项目中使用Maven时,您需要做的就是向iText添加一个依赖项。然后Maven将处理所有可传递的依赖项,如BouncyCastle。Maven拿走了所有的重物。 同样的原则也适用于其他构建系统,如Gradle等

现在,如果您想手动完成这一切并将正确的JAR放在类路径上,那么您需要做一些功课。这意味着查看每个依赖项的
pom.xml
,看看它们有哪些可传递的依赖项,这些依赖项有哪些依赖项,等等

对于iText,您可以查看可以在Maven Central上找到的
pom.xml

特别是本部分:

  <dependencies>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>1.49</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcpkix-jdk15on</artifactId>
      <version>1.49</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.santuario</groupId>
      <artifactId>xmlsec</artifactId>
      <version>1.5.1</version>
      <optional>true</optional>
    </dependency>
  </dependencies>

org.bouncycastle
bcprov-jdk15on
1.49
真的
org.bouncycastle
bcpkix-jdk15on
1.49
真的
朱尼特
朱尼特
4.8.2
测试
org.apache.santuario
xmlsec
1.5.1
真的
这说明iText 5.5.11对BouncyCastle 1.49有可选的依赖关系


BouncyCastle有一个坏名声,就是即使是很小的更新,也会随机更改和破坏其API,这就是为什么您需要非常精确地使用您的BouncyCastle版本。

您好,只需将zookeeper.service文件更改为环境即可=“KAFKA_ARGS=-javaagent:/home/ec2 user/prometheus/jmx_prometheus_javaagent-0.3.1.jar=8080:/home/ec2 user/prometheus/KAFKA-0-8-2.yml”并解决问题:
Environment=“KAFKA_OPTS=-javaagent:/home/ec2 user/prometheus/jmx_prometheus\u javaagent-0.3.1.jar=8080:/home/ec2 user/prometheus/zookeer.yml“

看起来您的类路径中没有BouncyCastle,基本上……如上所述,原因是:java.lang.NoClassDefFoundError:org/BouncyCastle/asn1/asn1 Encodable,如果您正在部署它,请将其添加到构建路径或部署目录中。确定。”。这意味着我必须为BouncyCastle添加jar文件?我在下载的iText jar列表中找不到它,我在构建路径中添加了bouncycastle.jar,但相同的错误
bouncycastle
jar与
iText
随机使用时存在兼容性问题。请检查您添加的
bouncycastle
jar版本是否与正在使用的
iText
版本兼容。sun.reflect.NativeMethodAccessorImpl.invoke上线程“main”java.lang.reflect.InvocationTargetException中的异常位于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)(NativeMethodAccessorImpl。
  <dependencies>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>1.49</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcpkix-jdk15on</artifactId>
      <version>1.49</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.santuario</groupId>
      <artifactId>xmlsec</artifactId>
      <version>1.5.1</version>
      <optional>true</optional>
    </dependency>
  </dependencies>