Pdf OSGI上的iText XFA工人(卡拉夫)

Pdf OSGI上的iText XFA工人(卡拉夫),pdf,itext,osgi,karaf,xfa,Pdf,Itext,Osgi,Karaf,Xfa,我目前正在尝试将XFA表单呈现解决方案部署到Karaf。我所有的代码在本地测试时都能很好地工作(没有OSGi),但当我尝试部署到Karaf时,会出现各种错误。我认为这里的根本原因是XFAWorker JAR没有编译为OSGi包。因此,我使用Karaf wrap协议导入捆绑包,但仍然没有成功。我已经尝试了很多东西,并将在下面尽可能完整地记录它们。然而,描述我遇到的各种障碍太长了,所以简单地说,我的问题总结如下: 如何在OSGi容器中使用iText XFA Worker?(最好是卡拉夫/菲利克斯)

我目前正在尝试将XFA表单呈现解决方案部署到Karaf。我所有的代码在本地测试时都能很好地工作(没有OSGi),但当我尝试部署到Karaf时,会出现各种错误。我认为这里的根本原因是XFAWorker JAR没有编译为OSGi包。因此,我使用Karaf wrap协议导入捆绑包,但仍然没有成功。我已经尝试了很多东西,并将在下面尽可能完整地记录它们。然而,描述我遇到的各种障碍太长了,所以简单地说,我的问题总结如下:

如何在OSGi容器中使用iText XFA Worker?(最好是卡拉夫/菲利克斯)

下面是我尝试过的全部悲惨故事:

首先,需要XFA Worker JAR的代码:

private byte[] flattenXfa(byte[] sourceXfaBytes) throws RuntimeException {

    // Create an output stream for the flattened doc
    ByteArrayOutputStream flattened = new ByteArrayOutputStream();

    try {
        Document document = new Document();
        PdfReader reader = new PdfReader(sourceXfaBytes);
        PdfWriter writer = PdfWriter.getInstance(document, flattened);
        XFAFlattener flattener = new XFAFlattener(document, writer);
        flattener.flatten(reader);
        document.close();           
    } ... various catches
}
在bundle Activator的start方法上调用这个方法(通过另一个类),这意味着我尝试在bundle启动时呈现(并展平)PDF。这真的只是为了测试的目的-'我创建了一个完全独立的项目,真正只是有一个小捆绑包和渲染代码,以确保没有其他会造成麻烦

下面是我的activator的启动方法(以防万一)

现在启动捆绑包时,我遇到以下问题:

Starting the bundle
Rendering PDF
java.lang.NoClassDefFoundError: com/itextpdf/tool/xml/html/CssAppliersAware
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2370)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2154)
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1542)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1415)
    at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1595)
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1525)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.testing.xfa.Renderer.flattenXfa(Renderer.java:123)
    at com.testing.xfa.Renderer.renderDoc(Renderer.java:52)
    at com.testing.xfa.Activator.start(Activator.java:34)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
    at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
    at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
    at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)
    at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
    at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:274)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.itextpdf.tool.xml.html.CssAppliersAware not found by wrap_mvn_com.itextpdf.tool_xfaworker_5.5.11 [61]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1574)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:79)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 35 more
Error executing command: Error executing command on bundles:
    Error starting bundle 65: Activator start error in bundle xfa-test [65].
出于兴趣,如果我将“展平”属性设置为false(即,我只渲染交互表单而不展平),那么即使在OSGi中也可以正常工作。但是,该场景不使用XFA Worker jar

尝试2-使用maven bundle插件的私有包配置 从Try 1中的错误消息来看,问题似乎与线束布线有关。于是我想:为什么不把所有非OSGi的东西作为私有包直接嵌入我的包中呢

Error executing command: Error executing command on bundles:
    Error starting bundle 69: Unable to resolve xfa-test [69](R 69.0): missing requirement [xfa-test [69](R 69.0)] osgi.wiring.package; (osgi.wiring.package=org.apache.jcp.xml.dsig.internal.dom) Unresolved requirements: [[xfa-test [69](R 69.0)] osgi.wiring.package; (osgi.wiring.package=org.apache.jcp.xml.dsig.internal.dom)]
因此,我对maven插件进行如下编辑:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${maven-bundle-plugin.version}</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <Bundle-Activator>com.testing.xfa.Activator</Bundle-Activator>
                    <Export-Package>
                        com.testing.xfa*;version=${project.version}
                    </Export-Package>
                    <Import-Package>
                        *
                    </Import-Package>
                    <Private-Package>com.itextpdf.*</Private-Package>
                </instructions>
            </configuration>
        </plugin>
这让我陷入了一个反复试验的陷阱,在包中添加越来越多的私有包,直到我的私有包标签如下所示:

    <Private-Package>com.itextpdf.*;org.antlr.*;org.abego.treelayout.*</Private-Package>
尝试3-安装所有导致私人软件包无法解决的问题的捆绑包。 这是另一个反复试验的兔子洞,但我的方法是: -将所有非osgi jar保留在我的私有包标签中 -完全移除包装好的罐子(因为它们现在嵌入到我的包中) -逐个添加以下Karaf捆绑包:

bundle:install -s mvn:com.itextpdf/itextpdf/5.5.11
bundle:install -s mvn:com.itextpdf.tool/xmlworker/5.5.11
bundle:install -s mvn:org.apache.directory.studio/org.apache.commons.codec/1.8
bundle:install -s mvn:org.apache.santuario/xmlsec/2.0.2
bundle:install -s mvn:org.bouncycastle/bcprov-jdk15on/1.56
bundle:install -s mvn:org.bouncycastle/bcpkix-jdk15on/1.56
bundle:install -s mvn:org.bouncycastle/bcprov-jdk15/1.45
bundle:install -s wrap:mvn:org.apache.xmlbeans/xmlbeans/2.6.0
在添加每个包的过程中,我尝试启动自己的包,并检查收到的错误。清洗,漂洗,重复。 一两个小时后,我得到了一个私人包装标签,看起来像这样:

<Private-Package>com.itextpdf.*;org.antlr.*;org.abego.treelayout.*;org.bouncycastle.*;org.mozilla.*</Private-Package>
com.itextpdf.*;org.antlr.*;org.abego.treelayout.*;org.bouncycastle.*;org.mozilla*
在这个阶段,Karaf不再抛出osgi连接异常,而是给出以下NullPointerException

karaf@root()> start 87
Starting the bundle
Rendering PDF
java.lang.NullPointerException
    at com.itextpdf.tool.xml.xtra.xfa.positioner.Positioner.<init>(Positioner.java:190)
    at com.itextpdf.tool.xml.xtra.xfa.positioner.SubFormPositioner.<init>(SubFormPositioner.java:50)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:215)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:152)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.getFormDom(FormBuilder.java:566)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:901)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:491)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:359)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:329)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:300)
    at com.testing.xfa.Renderer.flattenXfa(Renderer.java:124)
    at com.testing.xfa.Renderer.renderDoc(Renderer.java:52)
    at com.testing.xfa.Activator.start(Activator.java:35)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
    at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
    at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
    at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)
    at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
    at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:274)
    at java.lang.Thread.run(Thread.java:745)
Error executing command: Error executing command on bundles:
    Error starting bundle 87: Activator start error in bundle xfa-test [87].
karaf@root()>开始87
开始打包
呈现PDF
java.lang.NullPointerException
位于com.itextpdf.tool.xml.xtra.xfa.positioner.positioner.(positioner.java:190)
位于com.itextpdf.tool.xml.xtra.xfa.positioner.SubFormPositioner.(SubFormPositioner.java:50)
在com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:215)上
位于com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:152)
位于com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.getFormDom(FormBuilder.java:566)
位于com.itextpdf.tool.xml.xtra.xfa.xfalatener.flatten(xfalatener.java:901)
位于com.itextpdf.tool.xml.xtra.xfa.xfalatener.flatten(xfalatener.java:491)
位于com.itextpdf.tool.xml.xtra.xfa.xfalatener.flatten(xfalatener.java:359)
位于com.itextpdf.tool.xml.xtra.xfa.xfalatener.flatten(xfalatener.java:329)
位于com.itextpdf.tool.xml.xtra.xfa.xfalatener.flatten(xfalatener.java:300)
位于com.testing.xfa.Renderer.flattexfa(Renderer.java:124)
位于com.testing.xfa.Renderer.renderDoc(Renderer.java:52)
位于com.testing.xfa.Activator.start(Activator.java:35)
位于org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
位于org.apache.felix.framework.felix.activateBundle(felix.java:2226)
位于org.apache.felix.framework.felix.startBundle(felix.java:2144)
位于org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
位于org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
位于org.apache.karaf.bundle.command.BundleCommand.doExecute(bundleCommand.java:64)
位于org.apache.karaf.bundle.command.BundleCommand.execute(bundleCommand.java:54)
位于org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
位于org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
位于org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
位于org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
位于org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
位于org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
位于org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
位于org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
位于org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
位于org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:274)
运行(Thread.java:745)
执行命令时出错:在捆绑包上执行命令时出错:
启动捆绑包87时出错:捆绑包xfa测试中的激活器启动错误[87]。
在这一点上,我相信我做了一些非常错误的事情,所以我希望在这里得到一些帮助


如果您使用XFAWorker(这是您从iText软件购买的一种商业产品),请提供任何提示。这意味着你有一份支持合同。我强烈敦促您利用您的支持合同,在iText JIRA上开一张票。我们的办公室现在关闭了,但我们将在周一查看。Tx@AmedeeVanGasse:我已经记录了一个cal
Error executing command: Error executing command on bundles:
    Error starting bundle 69: Unable to resolve xfa-test [69](R 69.0): missing requirement [xfa-test [69](R 69.0)] osgi.wiring.package; (osgi.wiring.package=org.apache.jcp.xml.dsig.internal.dom) Unresolved requirements: [[xfa-test [69](R 69.0)] osgi.wiring.package; (osgi.wiring.package=org.apache.jcp.xml.dsig.internal.dom)]
bundle:install -s mvn:com.itextpdf/itextpdf/5.5.11
bundle:install -s mvn:com.itextpdf.tool/xmlworker/5.5.11
bundle:install -s mvn:org.apache.directory.studio/org.apache.commons.codec/1.8
bundle:install -s mvn:org.apache.santuario/xmlsec/2.0.2
bundle:install -s mvn:org.bouncycastle/bcprov-jdk15on/1.56
bundle:install -s mvn:org.bouncycastle/bcpkix-jdk15on/1.56
bundle:install -s mvn:org.bouncycastle/bcprov-jdk15/1.45
bundle:install -s wrap:mvn:org.apache.xmlbeans/xmlbeans/2.6.0
<Private-Package>com.itextpdf.*;org.antlr.*;org.abego.treelayout.*;org.bouncycastle.*;org.mozilla.*</Private-Package>
karaf@root()> start 87
Starting the bundle
Rendering PDF
java.lang.NullPointerException
    at com.itextpdf.tool.xml.xtra.xfa.positioner.Positioner.<init>(Positioner.java:190)
    at com.itextpdf.tool.xml.xtra.xfa.positioner.SubFormPositioner.<init>(SubFormPositioner.java:50)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:215)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.buildSubForm(FormBuilder.java:152)
    at com.itextpdf.tool.xml.xtra.xfa.pipe.FormBuilder.getFormDom(FormBuilder.java:566)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:901)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:491)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:359)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:329)
    at com.itextpdf.tool.xml.xtra.xfa.XFAFlattener.flatten(XFAFlattener.java:300)
    at com.testing.xfa.Renderer.flattenXfa(Renderer.java:124)
    at com.testing.xfa.Renderer.renderDoc(Renderer.java:52)
    at com.testing.xfa.Activator.start(Activator.java:35)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)
    at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)
    at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)
    at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)
    at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)
    at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)
    at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:274)
    at java.lang.Thread.run(Thread.java:745)
Error executing command: Error executing command on bundles:
    Error starting bundle 87: Activator start error in bundle xfa-test [87].