# ignite-sprint-5 sanity check for classname.properies load
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/8467a3c3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/8467a3c3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/8467a3c3 Branch: refs/heads/ignite-389 Commit: 8467a3c36414192268b8d852715fc501f53b4772 Parents: a5b5ec7 Author: sboikov <sboi...@gridgain.com> Authored: Mon Jun 8 12:42:36 2015 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Mon Jun 8 12:42:36 2015 +0300 ---------------------------------------------------------------------- .../internal/MarshallerContextAdapter.java | 36 ++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/8467a3c3/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java index 5dca2f2..21f2264 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextAdapter.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal; import org.apache.ignite.*; +import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.*; import org.apache.ignite.internal.util.typedef.internal.*; import org.apache.ignite.marshaller.*; import org.jsr166.*; @@ -49,10 +50,29 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { Enumeration<URL> urls = ldr.getResources(CLS_NAMES_FILE); - while (urls.hasMoreElements()) + boolean foundClsNames = false; + + while (urls.hasMoreElements()) { processResource(urls.nextElement()); - processResource(ldr.getResource(JDK_CLS_NAMES_FILE)); + foundClsNames = true; + } + + if (!foundClsNames) + throw new IgniteException("Failed to load class names properties file packaged with ignite binaries " + + "[file=" + CLS_NAMES_FILE + ", ldr=" + ldr + ']'); + + URL jdkClsNames = ldr.getResource(JDK_CLS_NAMES_FILE); + + if (jdkClsNames == null) + throw new IgniteException("Failed to load class names properties file packaged with ignite binaries " + + "[file=" + JDK_CLS_NAMES_FILE + ", ldr=" + ldr + ']'); + + processResource(jdkClsNames); + + checkHasClassName(GridDhtPartitionFullMap.class.getName(), ldr, CLS_NAMES_FILE); + checkHasClassName(GridDhtPartitionMap.class.getName(), ldr, CLS_NAMES_FILE); + checkHasClassName(HashMap.class.getName(), ldr, JDK_CLS_NAMES_FILE); } catch (IOException e) { throw new IllegalStateException("Failed to initialize marshaller context.", e); @@ -60,6 +80,18 @@ public abstract class MarshallerContextAdapter implements MarshallerContext { } /** + * @param clsName Class name. + * @param ldr Class loader used to get properties file. + * @param fileName File name. + */ + private void checkHasClassName(String clsName, ClassLoader ldr, String fileName) { + if (!map.containsKey(clsName.hashCode())) + throw new IgniteException("Failed to read class name from class names properties file. " + + "Make sure class names properties file packaged with ignite binaries is not corrupted " + + "[clsName=" + clsName + ", fileName=" + fileName + ", ldr=" + ldr + ']'); + } + + /** * @param url Resource URL. * @throws IOException In case of error. */