From b67ea1acf013e50ddfbe68a145299b273ebf8462 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 5 Mar 2011 04:32:52 +0100 Subject: [PATCH] error handling for node type strategy called on non type nodes --- .../support/SubReferenceNodeTypeStrategy.java | 5 ++++- .../SubReferenceNodeTypeStrategyTest.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategy.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategy.java index 2f8083db3..6aa094180 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategy.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategy.java @@ -153,7 +153,10 @@ public class SubReferenceNodeTypeStrategy implements NodeTypeStrategy { @Override @SuppressWarnings("unchecked") public Class getJavaType(Node node) { - Node subrefNode = node.getSingleRelationship(INSTANCE_OF_RELATIONSHIP_TYPE, Direction.OUTGOING).getEndNode(); + if (node==null) throw new IllegalArgumentException("Node is null"); + Relationship instanceOfRelationship = node.getSingleRelationship(INSTANCE_OF_RELATIONSHIP_TYPE, Direction.OUTGOING); + if (instanceOfRelationship==null) throw new IllegalArgumentException("The node "+node+" is not attached to a type hierarchy."); + Node subrefNode = instanceOfRelationship.getEndNode(); try { Class clazz = (Class) Class.forName((String) subrefNode.getProperty(SUBREF_CLASS_KEY)).asSubclass(NodeBacked.class); if (log.isDebugEnabled()) log.debug("Found class " + clazz.getSimpleName() + " for node: " + node); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java index 27fe82960..ad40b5fb0 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/SubReferenceNodeTypeStrategyTest.java @@ -73,6 +73,22 @@ public class SubReferenceNodeTypeStrategyTest { Assert.assertEquals("type node has property of type Thing.class", Thing.class.getName(), typeNode.getProperty(SubReferenceNodeTypeStrategy.SUBREF_CLASS_KEY)); Assert.assertEquals("one thing has been created", 1, typeNode.getProperty(SubReferenceNodeTypeStrategy.SUBREFERENCE_NODE_COUNTER_KEY)); } + @Test(expected = IllegalArgumentException.class) + public void gettingTypeFromNonTypeNodeShouldThrowAnDescriptiveException() throws Exception { + Node referenceNode = graphDatabaseContext.getReferenceNode(); + nodeTypeStrategy.getJavaType(referenceNode); + } + + @Test(expected = IllegalArgumentException.class) + public void confirmingTypeOfNonTypeNodeShouldThrowAnDescriptiveException() throws Exception { + Node referenceNode = graphDatabaseContext.getReferenceNode(); + nodeTypeStrategy.confirmType(referenceNode,Thing.class); + } + + @Test(expected = IllegalArgumentException.class) + public void gettingTypeFromNullShouldFail() throws Exception { + nodeTypeStrategy.getJavaType(null); + } private Node createThing() { Transaction tx = graphDatabaseContext.beginTx();