2

しばらく前に、PDFへのリンクを追加するためのこのソリューションを見つけました。たまに使用すると、チャームのように機能します(使用するたびにサーバーを再起動します)。このスクリプトを(再起動せずに)2回実行しようとすると、何らかの理由で(javaとiTextの経験があまりない)、ColdFusionがエラーを返すことがわかりました。

オブジェクトのインスタンス化の例外。

Javaオブジェクトのインスタンス化中に例外が発生しました。クラスは、インターフェースまたは抽象クラスであってはなりません。エラー: ''。

次に、ColdFusionは、エラーの原因となっている行が次の場所にあるように見えることを示します。

pdfReader = createObject("java","com.lowagie.text.pdf.PdfReader").init(inputPath);

誰がこれについてもっと知っているか、解決策を持っているか、またはこれが起こる理由を説明できますか?どういうわけか、作成されたjavaオブジェクトはjava内で「存続」しますが、もちろんCF内では存続しないと思います。

スタックトレース :

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at coldfusion.runtime.java.JavaProxy.CreateObject(JavaProxy.java:166)
    at coldfusion.runtime.java.JavaProxy.invoke(JavaProxy.java:80)
    at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2360)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor16(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:549)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor17(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:547)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor45(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:543)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor25(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor49(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:512)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor51(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:509)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor53(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:461)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor58(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:213)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor129(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:207)
    at cfSched_PushJobs2MultiPress32ecfm1907554548._factor146(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:102)
    at cfSched_PushJobs2MultiPress32ecfm1907554548.runPage(E:\Inetpub\DashBoards\MultiPress\Sched_PushJobs2MultiPress3.cfm:1)
    at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
    at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
    at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
    at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:360)
    at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
    at coldfusion.filter.PathFilter.invoke(PathFilter.java:94)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:70)
    at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
    at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:46)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
    at coldfusion.CfmServlet.service(CfmServlet.java:200)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:86)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at jrun.servlet.FilterChain.doFilter(FilterChain.java:94)
    at jrun.servlet.FilterChain.service(FilterChain.java:101)
    at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:106)
    at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
    at jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:286)
    at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:543)
    at jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:203)
    at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:320)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:266)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
Caused by: java.io.IOException: Map failed
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:758)
    at com.lowagie.text.pdf.MappedRandomAccessFile.init(Unknown Source)
    at com.lowagie.text.pdf.MappedRandomAccessFile.<init>(Unknown Source)
    at com.lowagie.text.pdf.RandomAccessFileOrArray.<init>(Unknown Source)
    at com.lowagie.text.pdf.RandomAccessFileOrArray.<init>(Unknown Source)
    at com.lowagie.text.pdf.PRTokeniser.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    ... 48 more
Caused by: java.lang.OutOfMemoryError: Map failed
    at sun.nio.ch.FileChannelImpl.map0(Native Method)
    at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:755)
    ... 55 more
4

2 に答える 2

1

エラーが問題を引き起こします。最初の「Causedby」行に移動します。

java.lang.OutOfMemoryError: Map failed     at sun.nio.ch.FileChannelImpl.map0(Native Method) 

根本的な原因は、メモリが不足していることです。JVMで使用可能なメモリを増やしてみてください。

于 2012-09-17T16:04:33.607 に答える
1

これは巨大なファイルではありませんが、使用可能なサーバーメモリの量と、他のプロセスで使用されている量によって大きく異なります。RandomAccessFileOrArrayリーダーにを使用してみて、ライターの出力をバッファリングすることもできます。それが役立つかどうかを確認してください。また、スタンパーと出力ストリームを閉じていることを確認してください。

// use random access when reading 
raf = createObject("java", "com.lowagie.text.pdf.RandomAccessFileOrArray").init(inputPath, false, true);
pdfReader = createObject("java", "com.lowagie.text.pdf.PdfReader").init( raf, javacast("null", ""));
... 
// buffer the output
fos = createObject("java", "java.io.FileOutputStream");
outStream = createObject("java", "java.io.BufferedOutputStream").init( fos.init( outputPath ) );
pdfStamper = createObject("java", "com.lowagie.text.pdf.PdfStamper").init( pdfReader, outStream );
于 2012-09-17T16:44:02.217 に答える