如何在PrintStackTrace之后保持CFEXECUTE不挂起

我正在使用ColdFusion MX7在某些Java 6代码上执行CFEXECUTE。

不幸的是,由于CF7在JDK 6下不起作用,我必须这样做。

我的问题是,当Java代码中发生exception时,如果我在exception上调用printStackTrace ,则CFEXECUTE命令会挂起。 ColdFusion最终超时,但Java进程继续在后台挂起。

我猜测有一些阻塞,但我似乎无法弄清楚原因。

如果我不做printStackTrace那么一切正常。

例外情况是使用JAXWS从Oracle Information Rights Management wsdl生成的WebServiceexception。

编辑

我注意到我可以使用PrintStream文件作为参数调用printStackTrace ,它工作正常。 因此,看起来错误流有麻烦。

这是Java代码:

 public void Execute(){ AdminUtils AU = AdminUtils.GetInstance(); AccountServicesPort AA = AU.GetAccountServicesPort(); LicenseServerRef LicSerRef = AU.GetLicenseServerRef(); User UserToSave = new User(); UserToSave.setUserName(UserName); UserToSave.setFirstName(FirstName); UserToSave.setLastName(LastName); UserToSave.setEmailAddress(EmailAddress); UserToSave.setServer(LicSerRef); try{ AU.LogMessage("Change User: " + UserName + " " + FirstName + " " + LastName + " " + EmailAddress); AA.saveChangesToUser(UserToSave); }catch(Exception e){ e.printStackTrace(); } } 

这是ColdFusion调用:

    

是的, e.printStackTrace(); 写入stderr(标准错误流)。 由于cfexecute不捕获stderr,这可能是导致cfexecute挂起的原因。 有一个补丁来修复CF8中的这种行为。

由于您使用的是7,请尝试Ben Forta的提示:

  • 将stderr重定向到stdout: 几个陷阱
  • 运行命令并在完成时终止的标志: 使用CFEXECUTE执行命令行实用程序

使用/c2>&1应该摆脱悬挂问题。

更新:添加示例

ColdFusion代码:

        

Java类:

 public class TestStdErr { public static void main(String[] args) { try { // cause a divide by zero exception int a = 0; int b = 2 /a; } catch(Exception e){ e.printStackTrace(); } } }