从托管bean中的导入jar访问方法

时间:2013-02-28 18:24:10

标签: xpages

我确定我错过了一些东西,但我根本没有看到它。

我正在使用iText创建PDF,我想在bean中执行此操作。我创造了一个,但它一直在错。似乎我通常在Java中使用的一些方法似乎不适用于这个bean。

例如,这一行:

com.itextpdf.text.Document document1 = new com.itextpdf.text.Document();

将抛出错误java.lang.NoClassDefFoundError:com.itextpdf.text.Document,即使已导入jar,也在构建路径中,并且在bean中导入com.itextpdf.text.Document。

如果您将其更改为:

com.itextpdf.text.Document document1;

com.itextpdf.text.Document document1 = null;

错误消失了。我不明白为什么一种方式有效而另一种方式不起作用,但这是一个相当容易的变化。

现在我需要设置页面大小。这将在Eclipse中起作用:

 document1.setPageSize(PageSize.LETTER);

但这是我得到的错误:

java.lang.NoClassDefFoundError:com.itextpdf.text.PageSize

这可能是因为我已将其设置为null以初始化它。但是

document1 = new Document();

document1 = new com.itextpdf.text.Document();

都抛出java.lang.NoClassDefFoundError:com.itextpdf.text.Document

奇怪的是,(iText)文档的import语句警告我它从未使用过。

document1.open();

也会给出错误java.lang.NoClassDefFoundError:com.itextpdf.text.Document。

那么,我在bean的语法中遗漏了什么吗?我已经创建了Notes Java代理,XAgents和直接运行的Java Eclipse项目,但是我无法在8.5.3 Java Bean中使用这些方法。我将iText jar导入WebContent \ WEB-INF \ lib,然后将其添加(通过添加jar,而不是添加外部jar)到构建路径。我已经拿到了最新的罐子,而且我已经使用它们了,我已经构建并清理过了,bean在faces-config中。但是我做错了什么,我无法看到它。

如果有人能指出我正确的方向,我将非常感激。

干杯, 布赖恩

编辑: 许可证不是问题,但即使使用classLoader,我仍然无法加载类:

    Thread currentThread = Thread.currentThread();
ClassLoader clCurrent = currentThread.getContextClassLoader();
        //ClassLoader clCurrent=com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent().getModule().getModuleClassLoader();
        try {
            currentThread.setContextClassLoader(Activator.class.getClassLoader());
            DebugToolbar.get().info("after setting up FileOutputStream");
            com.itextpdf.text.Document document1 = new com.itextpdf.text.Document();
            //com.itextpdf.text.Document document1;
            //com.itextpdf.text.Document document1 = null;
            //document1 = new com.itextpdf.text.Document();
            //document1.open();
            document1.setPageSize(PageSize.LETTER);

我仍然得到java.lang.NoClassDefFoundError:com.itextpdf.text.Document

我把豆子切出来,清理,建造,粘贴回去,清理过来,仍然是错误。

我很感激你的帮助。 布赖恩

2 个答案:

答案 0 :(得分:0)

您很可能拥有classloader isssue。除非您的应用程序仅供内部使用,否则您可能会重新考虑使用iText,因为它是GPL。 Apache PDFBox是Apache许可的替代品(我特别喜欢)或Apache FOP(我将完成2篇缺失的文章)(http://www.wissel.net/blog/htdocs/DominoXSLT),承诺)。当然,OpenNTF的POI4XPages可能就是您所需要的。

答案 1 :(得分:0)

我打电话给Lotus / ICS支持。似乎是8.5.3,如果你把jar放在~Lotus \ Notes \ _jvm \ lib \ ext中,它们会加载。我正在我的本地测试这个,但同样的路径应该在服务器上工作。我星期一测试一下。我研究过,如果提到的话,我没找到它。 Jars将成为9中的一个设计元素,将它们放在这个版本中不应该需要的目录中,但似乎以这种方式添加它们现在更加一致。对于我制作的一些应用程序,罐子已经正确加载了,所以这让我感到困惑。

Stephan和Panu,谢谢你的回复。

布赖恩