001/**   
002 * @Title: ServiceRuntime.java 
003 * @Package net.gdface.service 
004 * @Description: TODO 
005 * @author guyadong   
006 * @date 2015年6月9日 下午4:36:32 
007 * @version V1.0   
008 */
009package net.gdface.exception;
010
011import java.io.PrintStream;
012import java.io.PrintWriter;
013import java.io.StringWriter;
014//<omit-j2cpp>
015import net.gdface.utils.FaceUtilits;
016//</omit-j2cpp>
017/**
018 * webservice调用产生的运行时异常<br>
019 * 调用webservice方法时产生的所有{@link java.lang.RuntimeException}在抛出到webservice客户时被封装在{@link ServiceRuntime}中<br>
020 * 调用 {@link #getServerStackTraceMessage()}可以获取服务器端的堆栈错误信息<br>
021 * 调用{@link #printServerStackTrace()}输出服务器端的堆栈错误信息<br>
022 * @author guyadong
023 * @deprecated non-standard class name,instead use {@link ServiceRuntimeException}
024 *
025 */
026public class ServiceRuntime extends Exception {
027        /**
028         * 保存服务器端错误堆栈信息
029         */
030        private String serverStackTraceMessage = null;
031
032        /**
033         * 
034         */
035        private static final long serialVersionUID = 6222189909743043773L;
036
037        /**
038         * 
039         */
040        public ServiceRuntime() {
041        }
042
043        /**
044         * @param message
045         */
046        public ServiceRuntime(String message) {
047                super(message);
048        }
049        //<omit-j2cpp>
050        /**
051         * @param message
052         * @param cause
053         */
054        public ServiceRuntime(String message, Throwable cause) {
055                super(message, FaceUtilits.stripThrowableShell(cause, RuntimeException.class));
056                fillStackTraceMessage(getCause());
057        }
058
059        /**
060         * @param cause
061         */
062        public ServiceRuntime(Throwable cause) {
063                super(FaceUtilits.stripThrowableShell(cause, RuntimeException.class));
064                fillStackTraceMessage(getCause());
065        }
066
067        /**
068         * 调用{@link #printStackTrace(PrintWriter)}将错误堆栈信息存入 {@link #serverStackTraceMessage}
069         * 
070         * @param cause
071         * @see #printStackTrace(PrintWriter)
072         */
073        private void fillStackTraceMessage(Throwable cause) {
074                if (null != cause) {
075                        StringWriter write = new StringWriter(256);
076                        PrintWriter pw = new PrintWriter(write);
077                        cause.printStackTrace(pw);
078                        serverStackTraceMessage = write.toString();
079                }
080        }
081
082        /**
083         * 输出服务器端堆栈错误信息
084         * @see #printStackTrace()       
085         */
086        public void printServerStackTrace() {
087                printServerStackTrace(System.err);
088        }
089
090        /**
091         * @param s
092         * @see #printServerStackTrace()
093         * @see #printStackTrace(PrintStream)
094         */
095        public void printServerStackTrace(PrintStream s) {
096                synchronized (s) {
097                        s.println(serverStackTraceMessage);
098                }
099        }
100
101        /**
102         * @param s
103         * @see #printServerStackTrace()
104         * @see #printStackTrace(PrintWriter)
105         */
106        public void printServerStackTrace(PrintWriter s) {
107                synchronized (s) {
108                        s.println(serverStackTraceMessage);
109                }
110        }
111        //</omit-j2cpp>
112        /**
113         * 返回服务器端异常的堆栈信息
114         * @return serverStackTraceMessage
115         */
116        public String getServerStackTraceMessage() {
117                return serverStackTraceMessage;
118        }
119        /**
120         * @param serverStackTraceMessage
121         *            要设置的 serverStackTraceMessage
122         */
123        public void setServerStackTraceMessage(String serverStackTraceMessage) {
124                this.serverStackTraceMessage = serverStackTraceMessage;
125        }
126}