2016-09-12 39 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