Bug 896640 - JBpmObjectMapper doesn't handle missing variables properly
Summary: JBpmObjectMapper doesn't handle missing variables properly
Alias: None
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: JBossESB
Version: 5.3.0 GA
Hardware: Unspecified
OS: Unspecified
Target Milestone: ER4
: 5.3.1
Assignee: tcunning
QA Contact: Marek Baluch
Depends On: 896634
TreeView+ depends on / blocked
Reported: 2013-01-17 16:35 UTC by Rick Wagner
Modified: 2019-02-15 13:32 UTC (History)
6 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
If one of the jBPM variables was missing when mapping from jBPM to ESB an exception was thrown. Now if a jBPM variable is missing (has a null value), the user will receive a log warning, not an exception.
Clone Of: 896634
Last Closed:
Type: Bug

Attachments (Terms of Use)

System ID Priority Status Summary Last Updated
JBoss Issue Tracker JBESB-3896 Major Open JBpmObjectMapper doesn't appear to handle missing variables properly 2013-12-06 21:22:23 UTC

Description Rick Wagner 2013-01-17 16:35:01 UTC
+++ This bug was initially created as a clone of Bug #896634 +++

Description of problem:

Customer has raised the point that JBpmObjectMapper doesn't make it to what appears to be the intended log statement when a jBPM-side variable is not present.

This can be validated by inserting the following method into JBpmObjectMapperUnitTest.java:

// Same as existing test, just commented out setting v1.

	public void testMissingObject() throws Exception
	// Things to look for:
	// 1) If the variable does not exist in the jbpm variable map, the execution context is tested, but if not present there, an exception is thrown.
        // It looks like the intention was to arrive at "log.warn("The object " + mapping.getBpm() + " is null and cannot not be set on the message")"
        SAXReader reader = new SAXReader();
        Document document = reader.read(this.getClass().getResourceAsStream("/" + PROCESS_DEF_XML));
        Element element = document.getRootElement();
        DefaultElement bpmToEsbVars = (DefaultElement) element.element("start-state").element("transition").element("action").element("bpmToEsbVars");

		String helloWorldTokenScope  = "Hello world token scope";
        String helloWorldGlobalScope = "Hello world process-instance scope";
        TestJBPMVariable objectTokenScope = new TestJBPMVariable("Object token scope") ;
        TestJBPMVariable objectGlobalScope = new TestJBPMVariable("Object global scope") ;

		Token token = processInstance.getRootToken();
        // Don't set v1, see what happens
        //processInstance.getContextInstance().setVariable("v1", helloWorldTokenScope, token);
        processInstance.getContextInstance().setVariable("g2", helloWorldGlobalScope);
        processInstance.getContextInstance().setVariable("h3", objectTokenScope, token);
        processInstance.getContextInstance().setVariable("i4", objectGlobalScope);
        ExecutionContext executionContext = new ExecutionContext(token);

        JBpmObjectMapper mapper = new JBpmObjectMapper();
        Message message = mapper.mapFromJBpmToEsbMessage(bpmToEsbVars, Boolean.FALSE, executionContext);

        assertEquals(objectTokenScope.getInternal(), String.valueOf(message.getBody().get("esbObj3")));
        assertEquals(objectGlobalScope.getInternal(), String.valueOf(message.getBody().get("esbObj4")));

Comment 1 Marek Baluch 2013-02-01 12:13:07 UTC
Unit Test Passed.

Comment 2 Marek Baluch 2013-02-04 08:13:36 UTC
Tested also on bpm_orchestration1. Added

    <!-- ... -->
    <mapping bpm="theBody1" esb="BODY_CONTENT1"/>

to the process definition. The output of the process contained the following warning and no exception.

09:08:23,897 WARN  [JBpmObjectMapper] The object theBody1 is null and cannot not be set on the message

Note You need to log in before you can comment on or make changes to this bug.