1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 * @LastModified: Sep 2017 4 */ 5 /* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 package com.sun.org.apache.xerces.internal.util; 23 24 import java.util.Locale; 25 import java.util.MissingResourceException; 26 import java.util.ResourceBundle; 27 import jdk.xml.internal.SecuritySupport; 28 29 /** 30 * Used to format SAX error messages using a specified locale. 31 * 32 * @author Michael Glavassevich, IBM 33 * 34 */ 35 public class SAXMessageFormatter { 36 37 /** 38 * Formats a message with the specified arguments using the given 39 * locale information. 40 * 41 * @param locale The locale of the message. 42 * @param key The message key. 43 * @param arguments The message replacement text arguments. The order 44 * of the arguments must match that of the placeholders 45 * in the actual message. 46 * 47 * @return the formatted message. 48 * 49 * @throws MissingResourceException Thrown if the message with the 50 * specified key cannot be found. 51 */ 52 public static String formatMessage(Locale locale, 53 String key, Object[] arguments) 54 throws MissingResourceException { 55 56 ResourceBundle resourceBundle = null; 57 if (locale != null) { 58 resourceBundle = 59 SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages", locale); 60 } 61 else { 62 resourceBundle = 63 SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages"); 64 } 65 66 // format message 67 String msg; 68 try { 69 msg = resourceBundle.getString(key); 70 if (arguments != null) { 71 try { 72 msg = java.text.MessageFormat.format(msg, arguments); 73 } 74 catch (Exception e) { 75 msg = resourceBundle.getString("FormatFailed"); 76 msg += " " + resourceBundle.getString(key); 77 } 78 } 79 } 80 81 // error 82 catch (MissingResourceException e) { 83 msg = resourceBundle.getString("BadMessageKey"); 84 throw new MissingResourceException(key, msg, key); 85 } 86 87 // no message 88 if (msg == null) { 89 msg = key; 90 if (arguments.length > 0) { 91 StringBuffer str = new StringBuffer(msg); 92 str.append('?'); 93 for (int i = 0; i < arguments.length; i++) { 94 if (i > 0) { 95 str.append('&'); 96 } 97 str.append(String.valueOf(arguments[i])); 98 } 99 } 100 } 101 return msg; 102 } 103 }