SOLR-7258: Forbid MessageFormat.format and MessageFormat single-arg constructor

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1667414 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Shalin Shekhar Mangar 2015-03-17 21:52:05 +00:00
parent fd8a588bc5
commit 8d64c08c1a
17 changed files with 71 additions and 56 deletions

View File

@ -70,7 +70,7 @@ public class NLS {
String str = getLocalizedMessage(key, locale); String str = getLocalizedMessage(key, locale);
if (args.length > 0) { if (args.length > 0) {
str = MessageFormat.format(str, args); str = new MessageFormat(str, Locale.ROOT).format(args);
} }
return str; return str;

View File

@ -34,3 +34,7 @@ java.io.File#delete() @ use Files.delete for real exception, IOUtils.deleteFiles
@defaultMessage Use shuffle(List, Random) instead so that it can be reproduced @defaultMessage Use shuffle(List, Random) instead so that it can be reproduced
java.util.Collections#shuffle(java.util.List) java.util.Collections#shuffle(java.util.List)
@defaultMessage Construct MessageFormat(String pattern, String locale) and then use the format(String,Object...) method
java.text.MessageFormat#format(java.lang.String,java.lang.Object[])
java.text.MessageFormat#<init>(java.lang.String)

View File

@ -332,6 +332,9 @@ Other Changes
* SOLR-7246: Speed up BasicZkTest, TestManagedResourceStorage (Ramkumar Aiyengar) * SOLR-7246: Speed up BasicZkTest, TestManagedResourceStorage (Ramkumar Aiyengar)
* SOLR-7258: Forbid MessageFormat.format and MessageFormat single-arg constructor.
(shalin)
================== 5.0.0 ================== ================== 5.0.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release. Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

View File

@ -38,6 +38,7 @@ import org.apache.lucene.search.join.BitDocIdSetCachingWrapperFilter;
import org.apache.lucene.search.join.BitDocIdSetFilter; import org.apache.lucene.search.join.BitDocIdSetFilter;
import org.apache.lucene.search.join.ScoreMode; import org.apache.lucene.search.join.ScoreMode;
import org.apache.lucene.search.join.ToParentBlockJoinQuery; import org.apache.lucene.search.join.ToParentBlockJoinQuery;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.handler.dataimport.config.ConfigNameConstants; import org.apache.solr.handler.dataimport.config.ConfigNameConstants;
import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.search.SolrIndexSearcher;
@ -335,9 +336,9 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
String children = createChildren(parentType, 0, depth, parentData, holder); String children = createChildren(parentType, 0, depth, parentData, holder);
String rootFields = createFieldsList(FIELD_ID, "desc", "type_s"); String rootFields = createFieldsList(FIELD_ID, "desc", "type_s");
String rootEntity = MessageFormat.format(rootEntityTemplate, parentType, "SELECT * FROM " + parentType, rootFields, children); String rootEntity = StrUtils.formatString(rootEntityTemplate, parentType, "SELECT * FROM " + parentType, rootFields, children);
String config = MessageFormat.format(dataConfigTemplate, rootEntity); String config = StrUtils.formatString(dataConfigTemplate, rootEntity);
return config; return config;
} }
@ -398,7 +399,7 @@ public class TestHierarchicalDocBuilder extends AbstractDataImportHandlerTestCas
List<Hierarchy> childData = createMockedIterator(childName, parentData, holder); List<Hierarchy> childData = createMockedIterator(childName, parentData, holder);
String subChildren = createChildren(childName, currentLevel + 1, maxLevel, childData, holder); String subChildren = createChildren(childName, currentLevel + 1, maxLevel, childData, holder);
String child = MessageFormat.format(childEntityTemplate, childName, select, fields, subChildren); String child = StrUtils.formatString(childEntityTemplate, childName, select, fields, subChildren);
builder.append(child); builder.append(child);
builder.append('\n'); builder.append('\n');
} }

View File

@ -45,6 +45,7 @@ import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.cloud.ZooKeeperException; import org.apache.solr.common.cloud.ZooKeeperException;
import org.apache.solr.common.params.CollectionParams; import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.SolrParams; import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.common.util.URLUtil; import org.apache.solr.common.util.URLUtil;
import org.apache.solr.core.CloseHook; import org.apache.solr.core.CloseHook;
import org.apache.solr.core.CloudConfig; import org.apache.solr.core.CloudConfig;
@ -2168,8 +2169,8 @@ public final class ZkController {
log.warn("could not get stat"); log.warn("could not get stat");
} }
log.info(MessageFormat.format(errMsg, resourceLocation, znodeVersion)); log.info(StrUtils.formatString(errMsg, resourceLocation, znodeVersion));
throw new ResourceModifiedInZkException(ErrorCode.CONFLICT, MessageFormat.format(errMsg, resourceLocation, znodeVersion) + ", retry."); throw new ResourceModifiedInZkException(ErrorCode.CONFLICT, StrUtils.formatString(errMsg, resourceLocation, znodeVersion) + ", retry.");
} }
} }
} }
@ -2183,8 +2184,8 @@ public final class ZkController {
log.error(e.getMessage()); log.error(e.getMessage());
} }
log.info(MessageFormat.format(errMsg + " zkVersion= " + v, resourceLocation, znodeVersion)); log.info(StrUtils.formatString(errMsg + " zkVersion= " + v, resourceLocation, znodeVersion));
throw new ResourceModifiedInZkException(ErrorCode.CONFLICT, MessageFormat.format(errMsg, resourceLocation, znodeVersion) + ", retry."); throw new ResourceModifiedInZkException(ErrorCode.CONFLICT, StrUtils.formatString(errMsg, resourceLocation, znodeVersion) + ", retry.");
} catch (ResourceModifiedInZkException e) { } catch (ResourceModifiedInZkException e) {
throw e; throw e;
} catch (Exception e) { } catch (Exception e) {

View File

@ -135,7 +135,7 @@ public class ConfigOverlay implements MapSerializable{
private List<String> checkEditable(String propName, boolean isXPath, boolean failOnError) { private List<String> checkEditable(String propName, boolean isXPath, boolean failOnError) {
LinkedList<String> hierarchy = new LinkedList<>(); LinkedList<String> hierarchy = new LinkedList<>();
if(!isEditableProp(propName, isXPath,hierarchy)) { if(!isEditableProp(propName, isXPath,hierarchy)) {
if(failOnError) throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, MessageFormat.format( NOT_EDITABLE,propName)); if(failOnError) throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, StrUtils.formatString( NOT_EDITABLE,propName));
else return null; else return null;
} }
return hierarchy; return hierarchy;

View File

@ -32,6 +32,7 @@ import org.apache.lucene.analysis.util.ResourceLoader;
import org.apache.lucene.analysis.util.ResourceLoaderAware; import org.apache.lucene.analysis.util.ResourceLoaderAware;
import org.apache.solr.cloud.CloudUtil; import org.apache.solr.cloud.CloudUtil;
import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrException;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.handler.component.SearchComponent; import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.request.SolrRequestHandler; import org.apache.solr.request.SolrRequestHandler;
@ -415,7 +416,7 @@ public class PluginBag<T> implements AutoCloseable {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "No public keys are available in ZK to verify signature for runtime lib " + name); throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "No public keys are available in ZK to verify signature for runtime lib " + name);
} }
} else if (sig == null) { } else if (sig == null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, MessageFormat.format("runtimelib {0} should be signed with one of the keys in ZK /keys/exe ", name)); throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, StrUtils.formatString("runtimelib {0} should be signed with one of the keys in ZK /keys/exe ", name));
} }
try { try {

View File

@ -22,7 +22,6 @@ import java.io.OutputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.text.MessageFormat;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -135,7 +134,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
"size", payload.limit(), "size", payload.limit(),
"blob", payload); "blob", payload);
verifyWithRealtimeGet(blobName, version, req, doc); verifyWithRealtimeGet(blobName, version, req, doc);
log.info(MessageFormat.format("inserting new blob {0} ,size {1}, md5 {2}", doc.get("id"), String.valueOf(payload.limit()), md5)); log.info(StrUtils.formatString("inserting new blob {0} ,size {1}, md5 {2}", doc.get("id"), String.valueOf(payload.limit()), md5));
indexMap(req, rsp, doc); indexMap(req, rsp, doc);
log.info(" Successfully Added and committed a blob with id {} and size {} ", id, payload.limit()); log.info(" Successfully Added and committed a blob with id {} and size {} ", id, payload.limit());
@ -159,7 +158,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
} else { } else {
String q = "blobName:{0}"; String q = "blobName:{0}";
if (version != -1) q = "id:{0}/{1}"; if (version != -1) q = "id:{0}/{1}";
QParser qparser = QParser.getParser(MessageFormat.format(q, blobName, version), "lucene", req); QParser qparser = QParser.getParser(StrUtils.formatString(q, blobName, version), "lucene", req);
final TopDocs docs = req.getSearcher().search(qparser.parse(), 1, new Sort(new SortField("version", SortField.Type.LONG, true))); final TopDocs docs = req.getSearcher().search(qparser.parse(), 1, new Sort(new SortField("version", SortField.Type.LONG, true)));
if (docs.totalHits > 0) { if (docs.totalHits > 0) {
rsp.add(ReplicationHandler.FILE_STREAM, new SolrCore.RawWriter() { rsp.add(ReplicationHandler.FILE_STREAM, new SolrCore.RawWriter() {
@ -181,7 +180,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
} else { } else {
throw new SolrException(SolrException.ErrorCode.NOT_FOUND, throw new SolrException(SolrException.ErrorCode.NOT_FOUND,
MessageFormat.format("Invalid combination of blobName {0} and version {1}", blobName, String.valueOf(version))); StrUtils.formatString("Invalid combination of blobName {0} and version {1}", blobName, version));
} }
} }
@ -196,7 +195,7 @@ public class BlobHandler extends RequestHandlerBase implements PluginInfoInitial
req.forward(null, req.forward(null,
new MapSolrParams((Map) makeMap( new MapSolrParams((Map) makeMap(
"q", MessageFormat.format(q, blobName, version), "q", StrUtils.formatString(q, blobName, version),
"fl", "id,size,version,timestamp,blobName,md5", "fl", "id,size,version,timestamp,blobName,md5",
"sort", "version desc")) "sort", "version desc"))
, rsp); , rsp);

View File

@ -55,7 +55,6 @@ import org.apache.solr.util.CommandOperation;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import static java.text.MessageFormat.format;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
import static org.apache.solr.common.params.CoreAdminParams.NAME; import static org.apache.solr.common.params.CoreAdminParams.NAME;
import static org.apache.solr.core.ConfigOverlay.NOT_EDITABLE; import static org.apache.solr.core.ConfigOverlay.NOT_EDITABLE;
@ -253,7 +252,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
if (op.hasError()) break; if (op.hasError()) break;
for (String s : name) { for (String s : name) {
if (params.getParams(s) == null) { if (params.getParams(s) == null) {
op.addError(MessageFormat.format("can't delete . No such params ''{0}'' exist", s)); op.addError(StrUtils.formatString("can't delete . No such params ''{0}'' exist", s));
} }
params = params.setParams(s, null); params = params.setParams(s, null);
} }
@ -303,7 +302,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
default: { default: {
List<String> pcs = StrUtils.splitSmart(op.name.toLowerCase(Locale.ROOT), '-'); List<String> pcs = StrUtils.splitSmart(op.name.toLowerCase(Locale.ROOT), '-');
if (pcs.size() != 2) { if (pcs.size() != 2) {
op.addError(MessageFormat.format("Unknown operation ''{0}'' ", op.name)); op.addError(StrUtils.formatString("Unknown operation ''{0}'' ", op.name));
} else { } else {
String prefix = pcs.get(0); String prefix = pcs.get(0);
String name = pcs.get(1); String name = pcs.get(1);
@ -315,7 +314,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
overlay = updateNamedPlugin(info, op, overlay, prefix.equals("create") || prefix.equals("add")); overlay = updateNamedPlugin(info, op, overlay, prefix.equals("create") || prefix.equals("add"));
} }
} else { } else {
op.addError(MessageFormat.format("Unknown operation ''{0}'' ", op.name)); op.addError(StrUtils.formatString("Unknown operation ''{0}'' ", op.name));
} }
} }
} }
@ -348,7 +347,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
if (overlay.getNamedPlugins(typ).containsKey(name)) { if (overlay.getNamedPlugins(typ).containsKey(name)) {
return overlay.deleteNamedPlugin(name, typ); return overlay.deleteNamedPlugin(name, typ);
} else { } else {
op.addError(MessageFormat.format("NO such {0} ''{1}'' ", typ, name)); op.addError(StrUtils.formatString("NO such {0} ''{1}'' ", typ, name));
return overlay; return overlay;
} }
} }
@ -363,7 +362,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
if (!verifyClass(op, clz, info.clazz)) return overlay; if (!verifyClass(op, clz, info.clazz)) return overlay;
if (overlay.getNamedPlugins(info.tag).containsKey(name)) { if (overlay.getNamedPlugins(info.tag).containsKey(name)) {
if (isCeate) { if (isCeate) {
op.addError(MessageFormat.format(" ''{0}'' already exists . Do an ''{1}'' , if you want to change it ", name, "update-" + info.tag.toLowerCase(Locale.ROOT))); op.addError(StrUtils.formatString(" ''{0}'' already exists . Do an ''{1}'' , if you want to change it ", name, "update-" + info.tag.toLowerCase(Locale.ROOT)));
return overlay; return overlay;
} else { } else {
return overlay.addNamedPlugin(op.getDataMap(), info.tag); return overlay.addNamedPlugin(op.getDataMap(), info.tag);
@ -372,7 +371,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
if (isCeate) { if (isCeate) {
return overlay.addNamedPlugin(op.getDataMap(), info.tag); return overlay.addNamedPlugin(op.getDataMap(), info.tag);
} else { } else {
op.addError(MessageFormat.format(" ''{0}'' does not exist . Do an ''{1}'' , if you want to create it ", name, "create-" + info.tag.toLowerCase(Locale.ROOT))); op.addError(StrUtils.formatString(" ''{0}'' does not exist . Do an ''{1}'' , if you want to create it ", name, "create-" + info.tag.toLowerCase(Locale.ROOT)));
return overlay; return overlay;
} }
} }
@ -409,7 +408,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
if (op.hasError()) return overlay; if (op.hasError()) return overlay;
for (String o : name) { for (String o : name) {
if (!overlay.getUserProps().containsKey(o)) { if (!overlay.getUserProps().containsKey(o)) {
op.addError(format("No such property ''{0}''", name)); op.addError(StrUtils.formatString("No such property ''{0}''", name));
} else { } else {
overlay = overlay.unsetUserProperty(o); overlay = overlay.unsetUserProperty(o);
} }
@ -424,7 +423,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
for (String o : name) { for (String o : name) {
if (!ConfigOverlay.isEditableProp(o, false, null)) { if (!ConfigOverlay.isEditableProp(o, false, null)) {
op.addError(format(NOT_EDITABLE, name)); op.addError(StrUtils.formatString(NOT_EDITABLE, name));
} else { } else {
overlay = overlay.unsetProperty(o); overlay = overlay.unsetProperty(o);
} }
@ -439,7 +438,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
String name = e.getKey(); String name = e.getKey();
Object val = e.getValue(); Object val = e.getValue();
if (!ConfigOverlay.isEditableProp(name, false, null)) { if (!ConfigOverlay.isEditableProp(name, false, null)) {
op.addError(format(NOT_EDITABLE, name)); op.addError(StrUtils.formatString(NOT_EDITABLE, name));
continue; continue;
} }
overlay = overlay.setProperty(name, val); overlay = overlay.setProperty(name, val);
@ -460,7 +459,7 @@ public class SolrConfigHandler extends RequestHandlerBase {
c == '.' c == '.'
) continue; ) continue;
else { else {
return MessageFormat.format("''{0}'' name should only have chars [a-zA-Z_-.0-9] ", s); return StrUtils.formatString("''{0}'' name should only have chars [a-zA-Z_-.0-9] ", s);
} }
} }
return null; return null;

View File

@ -29,6 +29,7 @@ import java.util.Map;
import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.IOUtils;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.noggit.JSONParser; import org.noggit.JSONParser;
import org.noggit.ObjectBuilder; import org.noggit.ObjectBuilder;
@ -61,13 +62,13 @@ public class CommandOperation {
//noinspection unchecked //noinspection unchecked
return (Map<String,Object>)commandData; return (Map<String,Object>)commandData;
} }
addError(MessageFormat.format("The command ''{0}'' should have the values as a json object {key:val} format", name)); addError(StrUtils.formatString("The command ''{0}'' should have the values as a json object {key:val} format", name));
return Collections.emptyMap(); return Collections.emptyMap();
} }
private Object getRootPrimitive() { private Object getRootPrimitive() {
if (commandData instanceof Map) { if (commandData instanceof Map) {
errors.add(MessageFormat.format("The value has to be a string for command : ''{0}'' ", name)); errors.add(StrUtils.formatString("The value has to be a string for command : ''{0}'' ", name));
return null; return null;
} }
return commandData; return commandData;
@ -92,7 +93,7 @@ public class CommandOperation {
public List<String> getStrs(String key) { public List<String> getStrs(String key) {
List<String> val = getStrs(key, null); List<String> val = getStrs(key, null);
if (val == null) { if (val == null) {
errors.add(MessageFormat.format(REQD, key)); errors.add(StrUtils.formatString(REQD, key));
} }
return val; return val;
@ -136,13 +137,13 @@ public class CommandOperation {
if (ROOT_OBJ.equals(key)) { if (ROOT_OBJ.equals(key)) {
Object obj = getRootPrimitive(); Object obj = getRootPrimitive();
if (obj == null) { if (obj == null) {
errors.add(MessageFormat.format(REQD, name)); errors.add(StrUtils.formatString(REQD, name));
} }
return obj == null ? null : String.valueOf(obj); return obj == null ? null : String.valueOf(obj);
} }
String s = getStr(key, null); String s = getStr(key, null);
if (s == null) errors.add(MessageFormat.format(REQD, key)); if (s == null) errors.add(StrUtils.formatString(REQD, key));
return s; return s;
} }
@ -232,7 +233,7 @@ public class CommandOperation {
Object o = getMapVal(key); Object o = getMapVal(key);
if (o == null) return def; if (o == null) return def;
if (!(o instanceof Map)) { if (!(o instanceof Map)) {
addError(MessageFormat.format("''{0}'' must be a map", key)); addError(StrUtils.formatString("''{0}'' must be a map", key));
return def; return def;
} else { } else {
return (Map) o; return (Map) o;

View File

@ -396,7 +396,7 @@ public class TestSolrConfigHandler extends RestTestBase {
} }
assertTrue(MessageFormat.format("Could not get expected value ''{0}'' for path ''{1}'' full output: {2}", expected, StrUtils.join(jsonPath, '/'), getAsString(m)), success); assertTrue(StrUtils.formatString("Could not get expected value ''{0}'' for path ''{1}'' full output: {2}", expected, StrUtils.join(jsonPath, '/'), getAsString(m)), success);
return m; return m;
} }

View File

@ -34,6 +34,7 @@ import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.ConfigOverlay; import org.apache.solr.core.ConfigOverlay;
import org.apache.solr.update.DirectUpdateHandler2; import org.apache.solr.update.DirectUpdateHandler2;
import org.apache.solr.util.SimplePostTool; import org.apache.solr.util.SimplePostTool;
@ -47,7 +48,6 @@ import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -146,7 +146,7 @@ public class TestBlobHandler extends AbstractFullDistribZkTestBase {
assertEquals("" + bytes.limit(), String.valueOf(map.get("size"))); assertEquals("" + bytes.limit(), String.valueOf(map.get("size")));
return; return;
} }
fail(MessageFormat.format("Could not successfully add blob after {0} attempts. Expecting {1} items. time elapsed {2} output for url is {3}", fail(StrUtils.formatString("Could not successfully add blob after {0} attempts. Expecting {1} items. time elapsed {2} output for url is {3}",
i, count, System.currentTimeMillis() - start, getAsString(map))); i, count, System.currentTimeMillis() - start, getAsString(map)));
} }

View File

@ -41,6 +41,7 @@ import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.SolrZkClient; import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkConfigManager; import org.apache.solr.common.cloud.ZkConfigManager;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.SolrConfig; import org.apache.solr.core.SolrConfig;
import org.apache.solr.util.RESTfulServerProvider; import org.apache.solr.util.RESTfulServerProvider;
import org.apache.solr.util.RestTestHarness; import org.apache.solr.util.RestTestHarness;
@ -136,7 +137,7 @@ public class TestConfigReload extends AbstractFullDistribZkTestBase {
if(succeeded.size() == urls.size()) break; if(succeeded.size() == urls.size()) break;
succeeded.clear(); succeeded.clear();
} }
assertEquals(MessageFormat.format("tried these servers {0} succeeded only in {1} ", urls,succeeded) , urls.size(), succeeded.size()); assertEquals(StrUtils.formatString("tried these servers {0} succeeded only in {1} ", urls, succeeded) , urls.size(), succeeded.size());
} }
private Map getAsMap(String uri) throws Exception { private Map getAsMap(String uri) throws Exception {

View File

@ -34,6 +34,7 @@ import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.ConfigOverlay; import org.apache.solr.core.ConfigOverlay;
import org.apache.solr.core.RequestParams; import org.apache.solr.core.RequestParams;
import org.apache.solr.core.TestSolrConfigHandler; import org.apache.solr.core.TestSolrConfigHandler;
@ -266,7 +267,7 @@ public class TestSolrConfigHandlerCloud extends AbstractFullDistribZkTestBase {
} }
public static void compareValues(Map result, Object expected, List<String> jsonPath) { public static void compareValues(Map result, Object expected, List<String> jsonPath) {
assertTrue(MessageFormat.format("Could not get expected value {0} for path {1} full output {2}", expected, jsonPath, getAsString(result)), assertTrue(StrUtils.formatString("Could not get expected value {0} for path {1} full output {2}", expected, jsonPath, getAsString(result)),
Objects.equals(expected, ConfigOverlay.getObjectByPath(result, false, jsonPath))); Objects.equals(expected, ConfigOverlay.getObjectByPath(result, false, jsonPath)));
} }

View File

@ -43,6 +43,7 @@ import org.apache.solr.common.cloud.DocCollection;
import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.ConfigOverlay; import org.apache.solr.core.ConfigOverlay;
import org.apache.solr.util.RESTfulServerProvider; import org.apache.solr.util.RESTfulServerProvider;
import org.apache.solr.util.RestTestHarness; import org.apache.solr.util.RestTestHarness;
@ -183,19 +184,19 @@ public class TestSolrConfigHandlerConcurrent extends AbstractFullDistribZkTestBa
Map m = (Map) respMap.get("overlay"); Map m = (Map) respMap.get("overlay");
if(m!= null) m = (Map) m.get("props"); if(m!= null) m = (Map) m.get("props");
if(m == null) { if(m == null) {
errmessages.add(MessageFormat.format( "overlay does not exist for cache: {0} , iteration: {1} response {2} ", cacheName, i, respMap.toString())); errmessages.add(StrUtils.formatString("overlay does not exist for cache: {0} , iteration: {1} response {2} ", cacheName, i, respMap.toString()));
continue; continue;
} }
Object o = getObjectByPath(m, true, asList("query", cacheName, "size")); Object o = getObjectByPath(m, true, asList("query", cacheName, "size"));
if(!val1.equals(o)) errmessages.add(MessageFormat.format("'size' property not set, expected = {0}, actual {1}", val1,o)); if(!val1.equals(o)) errmessages.add(StrUtils.formatString("'size' property not set, expected = {0}, actual {1}", val1, o));
o = getObjectByPath(m, true, asList("query", cacheName, "initialSize")); o = getObjectByPath(m, true, asList("query", cacheName, "initialSize"));
if(!val2.equals(o)) errmessages.add(MessageFormat.format("'initialSize' property not set, expected = {0}, actual {1}", val2,o)); if(!val2.equals(o)) errmessages.add(StrUtils.formatString("'initialSize' property not set, expected = {0}, actual {1}", val2, o));
o = getObjectByPath(m, true, asList("query", cacheName, "autowarmCount")); o = getObjectByPath(m, true, asList("query", cacheName, "autowarmCount"));
if(!val3.equals(o)) errmessages.add(MessageFormat.format("'autowarmCount' property not set, expected = {0}, actual {1}", val3,o)); if(!val3.equals(o)) errmessages.add(StrUtils.formatString("'autowarmCount' property not set, expected = {0}, actual {1}", val3, o));
if(errmessages.isEmpty()) break; if(errmessages.isEmpty()) break;
} }
if(!errmessages.isEmpty()) { if(!errmessages.isEmpty()) {

View File

@ -18,7 +18,6 @@ package org.apache.solr.schema;
*/ */
import static java.text.MessageFormat.format;
import static org.apache.solr.rest.schema.TestBulkSchemaAPI.getSourceCopyFields; import static org.apache.solr.rest.schema.TestBulkSchemaAPI.getSourceCopyFields;
import static org.apache.solr.rest.schema.TestBulkSchemaAPI.getObj; import static org.apache.solr.rest.schema.TestBulkSchemaAPI.getObj;
@ -36,6 +35,7 @@ import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase; import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
import org.apache.solr.common.cloud.ZkStateReader; import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.util.RESTfulServerProvider; import org.apache.solr.util.RESTfulServerProvider;
import org.apache.solr.util.RestTestHarness; import org.apache.solr.util.RestTestHarness;
import org.junit.BeforeClass; import org.junit.BeforeClass;
@ -173,17 +173,17 @@ public class TestBulkSchemaConcurrent extends AbstractFullDistribZkTestBase {
while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) { while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) {
errmessages.clear(); errmessages.clear();
Map m = getObj(harness, aField, "fields"); Map m = getObj(harness, aField, "fields");
if (m == null) errmessages.add(format("field {0} not created", aField)); if (m == null) errmessages.add(StrUtils.formatString("field {0} not created", aField));
m = getObj(harness, dynamicFldName, "dynamicFields"); m = getObj(harness, dynamicFldName, "dynamicFields");
if (m == null) errmessages.add(format("dynamic field {0} not created", dynamicFldName)); if (m == null) errmessages.add(StrUtils.formatString("dynamic field {0} not created", dynamicFldName));
List l = getSourceCopyFields(harness, aField); List l = getSourceCopyFields(harness, aField);
if (!checkCopyField(l, aField, dynamicCopyFldDest)) if (!checkCopyField(l, aField, dynamicCopyFldDest))
errmessages.add(format("CopyField source={0},dest={1} not created", aField, dynamicCopyFldDest)); errmessages.add(StrUtils.formatString("CopyField source={0},dest={1} not created", aField, dynamicCopyFldDest));
m = getObj(harness, newFieldTypeName, "fieldTypes"); m = getObj(harness, newFieldTypeName, "fieldTypes");
if (m == null) errmessages.add(format("new type {0} not created", newFieldTypeName)); if (m == null) errmessages.add(StrUtils.formatString("new type {0} not created", newFieldTypeName));
if (errmessages.isEmpty()) break; if (errmessages.isEmpty()) break;
@ -243,17 +243,17 @@ public class TestBulkSchemaConcurrent extends AbstractFullDistribZkTestBase {
while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) { while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) {
errmessages.clear(); errmessages.clear();
Map m = getObj(harness, aField, "fields"); Map m = getObj(harness, aField, "fields");
if (m == null) errmessages.add(format("field {0} no longer present", aField)); if (m == null) errmessages.add(StrUtils.formatString("field {0} no longer present", aField));
m = getObj(harness, dynamicFldName, "dynamicFields"); m = getObj(harness, dynamicFldName, "dynamicFields");
if (m == null) errmessages.add(format("dynamic field {0} no longer present", dynamicFldName)); if (m == null) errmessages.add(StrUtils.formatString("dynamic field {0} no longer present", dynamicFldName));
List l = getSourceCopyFields(harness, aField); List l = getSourceCopyFields(harness, aField);
if (!checkCopyField(l, aField, dynamicCopyFldDest)) if (!checkCopyField(l, aField, dynamicCopyFldDest))
errmessages.add(format("CopyField source={0},dest={1} no longer present", aField, dynamicCopyFldDest)); errmessages.add(StrUtils.formatString("CopyField source={0},dest={1} no longer present", aField, dynamicCopyFldDest));
m = getObj(harness, newFieldTypeName, "fieldTypes"); m = getObj(harness, newFieldTypeName, "fieldTypes");
if (m == null) errmessages.add(format("new type {0} no longer present", newFieldTypeName)); if (m == null) errmessages.add(StrUtils.formatString("new type {0} no longer present", newFieldTypeName));
if (errmessages.isEmpty()) break; if (errmessages.isEmpty()) break;
@ -305,17 +305,17 @@ public class TestBulkSchemaConcurrent extends AbstractFullDistribZkTestBase {
while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) { while (TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutMillis) {
errmessages.clear(); errmessages.clear();
Map m = getObj(harness, aField, "fields"); Map m = getObj(harness, aField, "fields");
if (m != null) errmessages.add(format("field {0} still exists", aField)); if (m != null) errmessages.add(StrUtils.formatString("field {0} still exists", aField));
m = getObj(harness, dynamicFldName, "dynamicFields"); m = getObj(harness, dynamicFldName, "dynamicFields");
if (m != null) errmessages.add(format("dynamic field {0} still exists", dynamicFldName)); if (m != null) errmessages.add(StrUtils.formatString("dynamic field {0} still exists", dynamicFldName));
List l = getSourceCopyFields(harness, aField); List l = getSourceCopyFields(harness, aField);
if (checkCopyField(l, aField, dynamicCopyFldDest)) if (checkCopyField(l, aField, dynamicCopyFldDest))
errmessages.add(format("CopyField source={0},dest={1} still exists", aField, dynamicCopyFldDest)); errmessages.add(StrUtils.formatString("CopyField source={0},dest={1} still exists", aField, dynamicCopyFldDest));
m = getObj(harness, newFieldTypeName, "fieldTypes"); m = getObj(harness, newFieldTypeName, "fieldTypes");
if (m != null) errmessages.add(format("new type {0} still exists", newFieldTypeName)); if (m != null) errmessages.add(StrUtils.formatString("new type {0} still exists", newFieldTypeName));
if (errmessages.isEmpty()) break; if (errmessages.isEmpty()) break;

View File

@ -17,6 +17,7 @@
package org.apache.solr.common.util; package org.apache.solr.common.util;
import java.text.MessageFormat;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -305,5 +306,7 @@ public class StrUtils {
} }
} }
public static String formatString(String pattern, Object... args) {
return new MessageFormat(pattern, Locale.ROOT).format(args);
}
} }