2013-02-28 112 views
1

我確定我錯過了一些東西,但我沒有看到它。從託管的豆中的導入罐子中訪問方法

我使用iText創建PDF,並且我想在bean中執行此操作。我創建了一個,但它一直在出錯。似乎我通常在Java中工作的一些方式在這個bean中似乎不起作用。

例如,該行:

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

將拋出錯誤java.lang.NoClassDefFoundError:com.itextpdf.text.Document,即使罐子是進口的,在構建路徑和com.itextpdf .text.Document被導入到bean中。

如果你把它改成這樣:

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的)文件的導入語句提醒我這是從來沒有用過的。

document1.open(); 

也會給出錯誤java.lang.NoClassDefFoundError:com.itextpdf.text.Document。

所以,我錯過豆的語法中的東西?我創建了Notes Java代理,XAgent以及直接運行的Java Eclipse項目,但我無法使這些方法在8.5.3 Java Bean中工作。我將iText jar導入到WebContent \ WEB-INF \ lib中,然後將這些jar文件(通過添加jar,不添加外部jar)添加到構建路徑中。我已經獲得了最新的jar包,並且正在使用它們,我已經構建並清理了這個bean,這個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

我已經把豆子切掉,清理,建造,粘貼回來,清理完成,仍然是錯誤。

我很感謝幫助。 Brian

回答

0

我叫Lotus/ICS支持。對於8.5.3來說,如果將jar放入〜Lotus \ Notes \ jvm \ lib \ ext中,它們將會加載。我在我的本地測試這個,但同樣的路徑應該在服務器上工作。我會在星期一進行測試。我已經研究過了,如果提到這一點,我沒有找到它。 Jars將成爲9中的一個設計元素,將它們放在這樣的目錄中不應該用於該版本,但似乎現在這樣添加它們更加一致。這些罐子已經正確裝載了我所做的一些應用程序,所以這讓我困惑了一下。

Stephan和Panu,謝謝你的回覆。

布賴恩

0

很可能你有一個classloader isssue。除非您的應用程序嚴格供內部使用,否則您可能會重新考慮使用iText,因爲它是GPL。 Apache PDFBox是Apache授權的替代品(我特別喜歡)或Apache FOP(我會完成)2個失蹤的文章](http://www.wissel.net/blog/htdocs/DominoXSLT),promise)。當然OpenNTF的POI4XPages可能只是你需要的。

+0

您可以使用同樣的iText在封閉的應用程序,只需要購買許可證。 – 2013-03-01 08:16:22