From 657c1d8e4b0cbe70d5c232907724b07f2e1859b3 Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sun, 8 May 2016 17:41:52 +0100 Subject: [PATCH] UmlModelParser breaks with shadow entries - Fix so that unused transition with now source or target will not cause NPE. - Fixes #218 --- .../uml/support/UmlModelParser.java | 4 + .../uml/UmlStateMachineModelFactoryTests.java | 23 +++++ .../uml/broken-model-shadowentries.di | 2 + .../uml/broken-model-shadowentries.notation | 93 +++++++++++++++++++ .../uml/broken-model-shadowentries.uml | 13 +++ 5 files changed, 135 insertions(+) create mode 100644 spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.di create mode 100644 spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.notation create mode 100644 spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.uml diff --git a/spring-statemachine-uml/src/main/java/org/springframework/statemachine/uml/support/UmlModelParser.java b/spring-statemachine-uml/src/main/java/org/springframework/statemachine/uml/support/UmlModelParser.java index efe1674c..2d69fc39 100644 --- a/spring-statemachine-uml/src/main/java/org/springframework/statemachine/uml/support/UmlModelParser.java +++ b/spring-statemachine-uml/src/main/java/org/springframework/statemachine/uml/support/UmlModelParser.java @@ -348,6 +348,10 @@ public class UmlModelParser { } private boolean shouldCreateAnonymousTransition(Transition transition) { + if (transition.getSource() == null || transition.getTarget() == null) { + // nothing to do as would cause NPE later + return false; + } if (!transition.getTriggers().isEmpty()) { return false; } diff --git a/spring-statemachine-uml/src/test/java/org/springframework/statemachine/uml/UmlStateMachineModelFactoryTests.java b/spring-statemachine-uml/src/test/java/org/springframework/statemachine/uml/UmlStateMachineModelFactoryTests.java index d7e3c397..aecfbdb4 100644 --- a/spring-statemachine-uml/src/test/java/org/springframework/statemachine/uml/UmlStateMachineModelFactoryTests.java +++ b/spring-statemachine-uml/src/test/java/org/springframework/statemachine/uml/UmlStateMachineModelFactoryTests.java @@ -578,6 +578,12 @@ public class UmlStateMachineModelFactoryTests extends AbstractUmlTests { context.refresh(); } + @Test + public void testBrokenModelShadowEntries() throws Exception { + context.register(Config19.class); + context.refresh(); + } + @Configuration @EnableStateMachine public static class Config2 extends StateMachineConfigurerAdapter { @@ -936,6 +942,23 @@ public class UmlStateMachineModelFactoryTests extends AbstractUmlTests { } } + @Configuration + @EnableStateMachine + public static class Config19 extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineModelConfigurer model) throws Exception { + model + .withModel() + .factory(modelFactory()); + } + + @Bean + public StateMachineModelFactory modelFactory() { + return new UmlStateMachineModelFactory("classpath:org/springframework/statemachine/uml/broken-model-shadowentries.uml"); + } + } + public static class LatchAction implements Action { CountDownLatch latch = new CountDownLatch(1); @Override diff --git a/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.di b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.di new file mode 100644 index 00000000..bf9abab3 --- /dev/null +++ b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.di @@ -0,0 +1,2 @@ + + diff --git a/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.notation b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.notation new file mode 100644 index 00000000..2c09a4d3 --- /dev/null +++ b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.notation @@ -0,0 +1,93 @@ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.uml b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.uml new file mode 100644 index 00000000..e2660afc --- /dev/null +++ b/spring-statemachine-uml/src/test/resources/org/springframework/statemachine/uml/broken-model-shadowentries.uml @@ -0,0 +1,13 @@ + + + + + + + + + + + + +