1 48 49 package com.caucho.hessian.io; 50 51 import java.io.*; 52 import java.util.HashMap ; 53 54 57 public class StackTraceElementDeserializer extends AbstractMapDeserializer { 58 private static Class _stackTraceClass; 59 60 public StackTraceElementDeserializer() 61 { 62 } 63 64 public Class getType() 65 { 66 return _stackTraceClass; 67 } 68 69 public Object readMap(AbstractHessianInput in) 70 throws IOException 71 { 72 HashMap map = new HashMap (); 73 74 in.addRef(map); 75 76 String declaringClass = null; 77 String methodName = null; 78 String fileName = null; 79 int lineNumber = 0; 80 81 while (! in.isEnd()) { 82 String key = in.readString(); 83 84 if (key.equals("declaringClass")) 85 declaringClass = in.readString(); 86 else if (key.equals("methodName")) 87 methodName = in.readString(); 88 else if (key.equals("fileName")) 89 fileName = in.readString(); 90 else if (key.equals("lineNumber")) 91 lineNumber = in.readInt(); 92 else { 93 Object value = in.readObject(); 94 } 95 } 96 97 in.readMapEnd(); 98 99 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 100 DataOutputStream dos = new DataOutputStream(bos); 101 ObjectOutputStream oos = new ObjectOutputStream(dos); 102 103 oos.writeObject(_stackTraceClass); 104 105 Throwable e1 = new IOException(); 106 try { 107 throw e1; 108 } catch (Throwable e2) { 109 e1 = e2; 110 } 111 112 dos.writeByte(ObjectStreamConstants.TC_OBJECT); 113 dos.writeByte(ObjectStreamConstants.TC_REFERENCE); 114 dos.writeShort(0x007e); 115 dos.writeShort(0); 116 117 dos.writeInt(lineNumber); 118 119 if (declaringClass != null) { 120 dos.writeByte(ObjectStreamConstants.TC_STRING); 121 dos.writeUTF(declaringClass); 122 } 123 else 124 dos.writeByte(ObjectStreamConstants.TC_NULL); 125 126 if (fileName != null) { 127 dos.writeByte(ObjectStreamConstants.TC_STRING); 128 dos.writeUTF(fileName); 129 } 130 else 131 dos.writeByte(ObjectStreamConstants.TC_NULL); 132 133 if (methodName != null) { 134 dos.writeByte(ObjectStreamConstants.TC_STRING); 135 dos.writeUTF(methodName); 136 } 137 else 138 dos.writeByte(ObjectStreamConstants.TC_NULL); 139 140 oos.close(); 141 dos.close(); 142 bos.close(); 143 144 byte []data = bos.toByteArray(); 145 146 try { 147 ByteArrayInputStream bis = new ByteArrayInputStream(data); 148 ObjectInputStream ois = new ObjectInputStream(bis); 149 150 Object cl = ois.readObject(); 151 152 Object obj = ois.readObject(); 153 154 ois.close(); 155 bis.close(); 156 157 return obj; 158 } catch (Throwable e) { 159 return null; 160 } 161 } 162 163 static { 164 try { 165 _stackTraceClass = Class.forName("java.lang.StackTraceElement"); 166 } catch (Throwable e) { 167 } 168 } 169 } 170 | Popular Tags |