1 /* 2 * reserved comment block 3 * DO NOT REMOVE OR ALTER! 4 */ 5 /** 6 * Licensed to the Apache Software Foundation (ASF) under one 7 * or more contributor license agreements. See the NOTICE file 8 * distributed with this work for additional information 9 * regarding copyright ownership. The ASF licenses this file 10 * to you under the Apache License, Version 2.0 (the 11 * "License"); you may not use this file except in compliance 12 * with the License. You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, 17 * software distributed under the License is distributed on an 18 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 19 * KIND, either express or implied. See the License for the 20 * specific language governing permissions and limitations 21 * under the License. 22 */ 23 package com.sun.org.apache.xml.internal.security.exceptions; 24 25 import java.io.PrintStream; 26 import java.io.PrintWriter; 27 import java.text.MessageFormat; 28 29 import com.sun.org.apache.xml.internal.security.utils.Constants; 30 import com.sun.org.apache.xml.internal.security.utils.I18n; 31 32 /** 33 * The mother of all runtime Exceptions in this bundle. It allows exceptions to have 34 * their messages translated to the different locales. 35 * 36 * The <code>xmlsecurity_en.properties</code> file contains this line: 37 * <pre> 38 * xml.WrongElement = Can't create a {0} from a {1} element 39 * </pre> 40 * 41 * Usage in the Java source is: 42 * <pre> 43 * { 44 * Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" }; 45 * 46 * throw new XMLSecurityException("xml.WrongElement", exArgs); 47 * } 48 * </pre> 49 * 50 * Additionally, if another Exception has been caught, we can supply it, too> 51 * <pre> 52 * try { 53 * ... 54 * } catch (Exception oldEx) { 55 * Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" }; 56 * 57 * throw new XMLSecurityException("xml.WrongElement", exArgs, oldEx); 58 * } 59 * </pre> 60 * 61 * 62 * @author Christian Geuer-Pollmann 63 */ 64 public class XMLSecurityRuntimeException extends RuntimeException { 65 66 private static final long serialVersionUID = 1L; 67 68 /** Field msgID */ 69 protected String msgID; 70 71 /** 72 * Constructor XMLSecurityRuntimeException 73 * 74 */ 75 public XMLSecurityRuntimeException() { 76 super("Missing message string"); 77 78 this.msgID = null; 79 } 80 81 /** 82 * Constructor XMLSecurityRuntimeException 83 * 84 * @param msgID 85 */ 86 public XMLSecurityRuntimeException(String msgID) { 87 super(I18n.getExceptionMessage(msgID)); 88 89 this.msgID = msgID; 90 } 91 92 /** 93 * Constructor XMLSecurityRuntimeException 94 * 95 * @param msgID 96 * @param exArgs 97 */ 98 public XMLSecurityRuntimeException(String msgID, Object exArgs[]) { 99 super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs)); 100 101 this.msgID = msgID; 102 } 103 104 /** 105 * Constructor XMLSecurityRuntimeException 106 * 107 * @param originalException 108 */ 109 public XMLSecurityRuntimeException(Exception originalException) { 110 super("Missing message ID to locate message string in resource bundle \"" 111 + Constants.exceptionMessagesResourceBundleBase 112 + "\". Original Exception was a " 113 + originalException.getClass().getName() + " and message " 114 + originalException.getMessage(), originalException); 115 } 116 117 /** 118 * Constructor XMLSecurityRuntimeException 119 * 120 * @param msgID 121 * @param originalException 122 */ 123 public XMLSecurityRuntimeException(String msgID, Exception originalException) { 124 super(I18n.getExceptionMessage(msgID, originalException), originalException); 125 126 this.msgID = msgID; 127 } 128 129 /** 130 * Constructor XMLSecurityRuntimeException 131 * 132 * @param msgID 133 * @param exArgs 134 * @param originalException 135 */ 136 public XMLSecurityRuntimeException(String msgID, Object exArgs[], Exception originalException) { 137 super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs)); 138 139 this.msgID = msgID; 140 } 141 142 /** 143 * Method getMsgID 144 * 145 * @return the messageId 146 */ 147 public String getMsgID() { 148 if (msgID == null) { 149 return "Missing message ID"; 150 } 151 return msgID; 152 } 153 154 /** @inheritDoc */ 155 public String toString() { 156 String s = this.getClass().getName(); 157 String message = super.getLocalizedMessage(); 158 159 if (message != null) { 160 message = s + ": " + message; 161 } else { 162 message = s; 163 } 164 165 if (this.getCause() != null) { 166 message = message + "\nOriginal Exception was " + this.getCause().toString(); 167 } 168 169 return message; 170 } 171 172 /** 173 * Method printStackTrace 174 * 175 */ 176 public void printStackTrace() { 177 synchronized (System.err) { 178 super.printStackTrace(System.err); 179 } 180 } 181 182 /** 183 * Method printStackTrace 184 * 185 * @param printwriter 186 */ 187 public void printStackTrace(PrintWriter printwriter) { 188 super.printStackTrace(printwriter); 189 } 190 191 /** 192 * Method printStackTrace 193 * 194 * @param printstream 195 */ 196 public void printStackTrace(PrintStream printstream) { 197 super.printStackTrace(printstream); 198 } 199 200 /** 201 * Method getOriginalException 202 * 203 * @return the original exception 204 */ 205 public Exception getOriginalException() { 206 if (this.getCause() instanceof Exception) { 207 return (Exception)this.getCause(); 208 } 209 return null; 210 } 211 212 }