001package net.gdface.exception; 002 003import java.io.PrintStream; 004import java.io.PrintWriter; 005import java.io.StringWriter; 006//<omit-j2cpp> 007import net.gdface.utils.FaceUtilits; 008//</omit-j2cpp> 009/** 010 * webservice调用产生的è¿è¡Œæ—¶å¼‚常<br> 011 * 调用webservice方法时产生的所有{@link java.lang.RuntimeException}在抛出到webservice客户时被å°è£…在{@link ServiceRuntimeException}ä¸<br> 012 * 调用 {@link #getServerStackTraceMessage()}å¯ä»¥èŽ·å–æœåŠ¡å™¨ç«¯çš„å †æ ˆé”™è¯¯ä¿¡æ¯<br> 013 * 调用{@link #printServerStackTrace()}输出æœåŠ¡å™¨ç«¯çš„å †æ ˆé”™è¯¯ä¿¡æ¯<br> 014 * @author guyadong 015 * 016 */ 017public class ServiceRuntimeException extends Exception { 018 /** 019 * ä¿å˜æœåŠ¡å™¨ç«¯é”™è¯¯å †æ ˆä¿¡æ¯ 020 */ 021 private String serverStackTraceMessage = null; 022 023 private static final long serialVersionUID = 6222189909743043773L; 024 025 public ServiceRuntimeException() { 026 } 027 028 /** 029 * @param message 030 */ 031 public ServiceRuntimeException(String message) { 032 super(message); 033 } 034 //<omit-j2cpp> 035 /** 036 * @param message 037 * @param cause 038 */ 039 public ServiceRuntimeException(String message, Throwable cause) { 040 super(message, FaceUtilits.stripThrowableShell(cause, RuntimeException.class)); 041 fillStackTraceMessage(getCause()); 042 } 043 044 /** 045 * @param cause 046 */ 047 public ServiceRuntimeException(Throwable cause) { 048 super(FaceUtilits.stripThrowableShell(cause, RuntimeException.class)); 049 fillStackTraceMessage(getCause()); 050 } 051 052 /** 053 * 调用{@link #printStackTrace(PrintWriter)}å°†é”™è¯¯å †æ ˆä¿¡æ¯å˜å…¥ {@link #serverStackTraceMessage} 054 * 055 * @param cause 056 * @see #printStackTrace(PrintWriter) 057 */ 058 private void fillStackTraceMessage(Throwable cause) { 059 if (null != cause) { 060 StringWriter write = new StringWriter(256); 061 PrintWriter pw = new PrintWriter(write); 062 cause.printStackTrace(pw); 063 serverStackTraceMessage = write.toString(); 064 } 065 } 066 067 /** 068 * 输出æœåŠ¡å™¨ç«¯å †æ ˆé”™è¯¯ä¿¡æ¯ 069 * @see #printStackTrace() 070 */ 071 public void printServerStackTrace() { 072 printServerStackTrace(System.err); 073 } 074 075 /** 076 * @param s 077 * @see #printServerStackTrace() 078 * @see #printStackTrace(PrintStream) 079 */ 080 public void printServerStackTrace(PrintStream s) { 081 synchronized (s) { 082 s.println(serverStackTraceMessage); 083 } 084 } 085 086 /** 087 * @param s 088 * @see #printServerStackTrace() 089 * @see #printStackTrace(PrintWriter) 090 */ 091 public void printServerStackTrace(PrintWriter s) { 092 synchronized (s) { 093 s.println(serverStackTraceMessage); 094 } 095 } 096 //</omit-j2cpp> 097 /** 098 * 返回æœåŠ¡å™¨ç«¯å¼‚å¸¸çš„å †æ ˆä¿¡æ¯ 099 * @return serverStackTraceMessage 100 */ 101 public String getServerStackTraceMessage() { 102 return serverStackTraceMessage; 103 } 104 /** 105 * @param serverStackTraceMessage 106 * è¦è®¾ç½®çš„ serverStackTraceMessage 107 */ 108 public void setServerStackTraceMessage(String serverStackTraceMessage) { 109 this.serverStackTraceMessage = serverStackTraceMessage; 110 } 111}