From 7835e13c1a4fa40e4e935fd328fdf996b99cb45a Mon Sep 17 00:00:00 2001 From: ramkumar Date: Thu, 19 Mar 2009 09:49:07 +0000 Subject: Fixes for TUSCANY-2914 git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@755887 13f79535-47bb-0310-9956-ffa450edef68 --- .../sca/binding/jms/impl/JMSBindingProcessor.java | 49 +++++++++++++++------- 1 file changed, 35 insertions(+), 14 deletions(-) (limited to 'branches/sca-java-1.x/modules') diff --git a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java index 10d86e5536..c86422de1f 100644 --- a/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java +++ b/branches/sca-java-1.x/modules/binding-jms/src/main/java/org/apache/tuscany/sca/binding/jms/impl/JMSBindingProcessor.java @@ -304,10 +304,15 @@ public class JMSBindingProcessor extends BaseStAXArtifactProcessor implements St } } } - reader.next(); + //reader.next(); break; case END_ELEMENT: QName x = reader.getName(); + if (Constants.OPERATION.equals(x.getLocalPart())) break; + if (x.getLocalPart().equals("wireFormat.jmsBytes") || x.getLocalPart().equals("wireFormat.jmsText") + || x.getLocalPart().equals("wireFormat.jmsObject") || x.getLocalPart().equals("wireFormat.jmsTextXML")) { + break; + } if (x.equals(JMSBindingConstants.BINDING_JMS_QNAME)) { endFound = true; } else { @@ -486,7 +491,7 @@ public class JMSBindingProcessor extends BaseStAXArtifactProcessor implements St } else if ("activationSpec".equals(elementName)) { parseResponseActivationSpec(reader, jmsBinding); } - reader.next(); + //reader.next(); break; case END_ELEMENT: QName x = reader.getName(); @@ -625,15 +630,16 @@ public class JMSBindingProcessor extends BaseStAXArtifactProcessor implements St jmsBinding.setNativeOperationName(opName, nativeOpName); } + Map props = new HashMap(); while (true) { switch (reader.next()) { case START_ELEMENT: if (reader.getName().getLocalPart().equals("headers")) { // optional parseOperationHeaders(reader, jmsBinding, opName); } else if (reader.getName().getLocalPart().equals("property")) { // optional - jmsBinding.getOperationPropertiesProperties(opName).putAll(parseBindingProperties(reader)); + processProperty(reader, props); } -// break; + break; case END_ELEMENT: if (reader.isEndElement()) { QName x = reader.getName(); @@ -644,6 +650,7 @@ public class JMSBindingProcessor extends BaseStAXArtifactProcessor implements St break; } if (x.getLocalPart().equals("operationProperties")) { + jmsBinding.getOperationPropertiesProperties(opName).putAll(props); return; } else { error("UnexpectedResponseElement", reader, x.toString()); @@ -734,29 +741,43 @@ public class JMSBindingProcessor extends BaseStAXArtifactProcessor implements St } } - private void parseSubscriptionHeaders(XMLStreamReader reader, JMSBinding jmsBinding) { + private void parseSubscriptionHeaders(XMLStreamReader reader, JMSBinding jmsBinding) throws XMLStreamException { String jmsSelector = reader.getAttributeValue(null, "JMSSelector"); if (jmsSelector != null && jmsSelector.length() > 0) { jmsBinding.setJMSSelector(jmsSelector); } + + // Skip to end element + while (reader.hasNext()) { + if (reader.next() == END_ELEMENT && "SubscriptionHeaders".equals(reader.getName().getLocalPart())) { + break; + } + } // end while } private Map parseBindingProperties(XMLStreamReader reader) throws XMLStreamException { - Map props = new HashMap(); - if ("property".equals(reader.getName().getLocalPart())) { - processProperty(reader, props); - } - while (true) { + Map props = new HashMap(); + String parentName = reader.getName().getLocalPart(); + // Parse for all the properties within this element, until the end of + // the element is reached. + boolean completed = false; + while (!completed) { switch (reader.next()) { case START_ELEMENT: - if ("property".equals(reader.getName().getLocalPart())) { - processProperty(reader, props); + String elementName = reader.getName().getLocalPart(); + if ("property".equals(elementName)) { + processProperty(reader, props); } break; case END_ELEMENT: - return props; + String endName = reader.getName().getLocalPart(); + if (parentName.equals(endName)) { + completed = true; + break; + } } - } + } + return props; } private void processProperty(XMLStreamReader reader, Map props) throws XMLStreamException { -- cgit v1.2.3