issues w/ StAX processing in JMSBindingProcessor
------------------------------------------------
Key: TUSCANY-2914
URL: https://issues.apache.org/jira/browse/TUSCANY-2914
Project: Tuscany
Issue Type: Bug
Components: Java SCA JMS Binding Extension
Reporter: Scott Kurz
Priority: Minor
I'm looking at JMSBindingProcessor.read(), and the way the read() method relies
on itself to advance the cursor past its children's END_ELEMENT seems to be a
problem.
The code is:
while (!endFound) {
int fg = reader.next();
switch (fg) {
case START_ELEMENT:
String elementName = reader.getName().getLocalPart();
if ("destination".equals(elementName)) {
parseDestination(reader, jmsBinding);
} else if ("connectionFactory".equals(elementName)) {
parseConnectionFactory(reader, jmsBinding);
....
} else {
....
}
reader.next(); // PROBLEM!
break;
For child element 'SubscriptionHeaders', I could write that as either:
<SubscriptionHeaders.../>
OR
<SubscriptionHeaders...>....</SubscriptionHeaders>
OR
<SubscriptionHeaders..... >
</SubscriptionHeaders>
The first two shouldn't be a problem, I start with a START_ELEMENT and then the
next() back in read() advances me over the END_ELEMENT event. However, the
third is a problem, since there is a CHARACTERS event in the middle, in which
case the next() back in read() only takes me to the SubscriptionHeaders
END_ELEMENT, though the code at this point can only deal with 'binding.jms'
END_ELEMENT, (and since it doesn't get this, we get an error).
In general, it seems that to deal with this kind of thing, helper methods that
parse a child element should be responsible for themselves advancing the cursor
to their own child element's END_ELEMENT.
For what it's worth, I'm not sure how parseDestination() works either, it seems
like parseDestinationProperties() is going to advance the cursor too far, but
maybe I don't fully understand this scenario.
If I can get my build working, I'll post a recreate test.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.