[英]How do I write the exception from printStackTrace() into a text file in Java?
[英]How do I keep CFEXECUTE from hanging after a PrintStackTrace
我正在使用 ColdFusion MX7 對某些 Java 6 代碼執行 CFEXECUTE。
不幸的是,由於 CF7 不能在 JDK 6 下工作,我必須這樣做。
我的問題是,當 Java 代碼中發生異常時,如果我對異常調用printStackTrace
,CFEXECUTE 命令將掛起。 ColdFusion 最終超時,但 Java 進程繼續在后台掛起。
我猜有一些阻塞正在進行,但我似乎無法弄清楚為什么。
如果我不執行printStackTrace
,那么一切正常。
異常是使用 JAXWS 從 Oracle 信息權限管理 wsdl 生成的 WebService 異常。
編輯
我注意到我可以使用文件PrintStream
作為參數調用printStackTrace
,它工作正常。 所以,看起來錯誤 stream 有問題。
這是 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 電話:
<!--- Update the IRM User. --->
<CFEXECUTE name="c:\Program Files\Java\jdk1.6.0_14\bin\javaw.exe"
arguments="-cp C:\CFusionMX7\Externals\IRM.jar;C:\CFusionMX7\Externals\Config IRMWebServices.UpdateUser #LoginID# #NewFname# #NewLname#"
timeout="15"
variable="OUTPUT">
</CFEXECUTE>
是的, e.printStackTrace();
寫入 stderr(標准錯誤流)。 由於cfexecute
不捕獲 stderr,這可能是導致 cfexecute 掛起的原因。 CF8 中有修復此行為的補丁。
由於您使用的是 7,請嘗試 Ben Forta 的提示:
同時使用/c
和2>&1
應該可以解決掛起問題。
更新:添加示例
ColdFusion 代碼:
<cftry>
<cfset argString = '/c "C:\Program Files\Java\jdk1.6.0_13\bin\java.exe" -cp c:\myJar.jar TestStdErr 2>&1' >
<cfexecute name="c:\windows\system32\cmd.exe"
arguments="#argString#"
outputFile="c:\cfexcuteResults.log"
timeout="5" />
<cfcatch>
<cfdump var="#cfcatch#">
</cfcatch>
</cftry>
Java Class:
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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.