2016-02-02 7 views
1

Я работаю с Apache Commons SCXML 0.9, и я не могу найти, как добавить CustomAction. Я нашел примеры, используя v2.0-SNAPSHOT (который, кстати, я не знаю, где его получить), но похоже, что он не работает на v0.9, до сих пор я получил что-то вроде этого:
Apache SCXML: добавить пользовательское действие

CustomAction customAction = new CustomAction("http://my.custom-actions.domain/CUSTOM", "my", MyCustomAction.class); 
List<CustomAction> customActions = new ArrayList<CustomAction>(); 
customActions.add(customAction); 


Для v2.0-SNAPSHOT Я мог бы написать:

SCXML scxml = SCXMLTestHelper.parse("path/to/my/sm.xml", customActions); 

и после этого получить SCXMLExecutor и вызвать метод SCXMLExecutor.go, но я не могу найти любой вариант для v0.9 , пожалуйста, мне нужна ваша помощь здесь.
С уважением

ответ

0

Ну, я думаю, что у меня это получилось, я нашел this post, где есть полный пример (на испанском) с использованием SCXML v0.9.
Вот код, который я написал, чтобы добавить пользовательское действие onExit:

MyCustomAction mca = new MyCustomAction();//MyCustomAction extends org.apache.commons.scxml.model.Action 
State state = (State) getEngine().getStateMachine().getTargets().get("yourstate"); 
OnExit oex = state.getOnExit(); 
oex.addAction(mca); 
state.setOnExit(oex); 

и если вы хотите зарегистрировать onEntry действие, это почти то же самое:

MyCustomAction mca = new MyCustomAction();//MyCustomAction extends org.apache.commons.scxml.model.Action 
MyCustomAction2 mca2 = new MyCustomAction2();//MyCustomAction2 extends org.apache.commons.scxml.model.Action 
State state = (State) getEngine().getStateMachine().getTargets().get("yourstate"); 
OnEntry oe = state.getOnEntry(); 
oe.addAction(mca); 
oe.addAction(mca2); 
state.setOnEntry(oe);