2016-09-12 34 views
-1

的Java 6
jboss-as-7.1.1.Final的Java 6 - 試圖複製和粘貼文件時的StackOverflowError

我需要複製和粘貼文件。使用org.apache.commons.io.FileUtils我試着用下面的代碼,

如果我調用sync()從一個jsp,讓

... java.lang.StackOverflowError的在 org.apache .appalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280) [ jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationHttpRequest.removeAttribute(ApplicationHttpRequest.java:280) [jbossweb-7.0.13.Final.jar:]

private void sync() { 
    try { 
     FileUtils.copyFile(new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_src/compose.xml"), 
     new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_dest/compose.xml"));    
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

如果我運行相同的代碼作爲一個獨立的Java應用程序,該文件被複制並粘貼到目標

public static void main(String s[]) { 
    try { 
     FileUtils.copyFile(new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_src/compose.xml"), 
     new File("C:/jboss-as-7.1.1.Final/standalone/deployments/admin.war/xml/news_dest/compose.xml"));   
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

爲什麼當在JBoss環境中調用代碼而執行與java應用程序相同的代碼運行成功時,我得到StackOverflowError嗎?謝謝。

+2

您能澄清一下爲什麼您認爲StackOverflowError與'sync()'方法中的文件複製邏輯有關嗎? (我問,因爲根據你已經發布的堆棧跟蹤來看,它看起來像*不*。) – ruakh

+2

stacktrace顯示錯誤位於完全不同的地方。它與文件副本無關。 – Andreas

+0

@ruakh和Andreas感謝您的意見,請參閱我的答案。 – SyAu

回答

0

我找到了解決這個問題的方法。我的框架中的動作類配置(這是一個內部構建的框架)是不正確的,因此導致動作類在循環中被調用。我更新了該設置,從而阻止循環中的動作類執行。

SO post也引導了我。

3

我在猜測,既然您正在將您的文件複製到具有正在複製它的程序的WAR中,它將會同步。然後將該文件複製到正在複製它的WAR中,然後進行同步。然後將文件複製到正在複製它的WAR中,然後同步......

JBoss很聰明,可以通過自動重新部署來重新加載在WAR文件中更改的代碼。當您作爲獨立的Java應用程序運行時,沒有容器,因此不會重新部署。

+0

我有我的Web應用程序在一個分解格式(文件夾 - admin.war),我沒有部署文件夾下的任何戰爭文件。 – SyAu