/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.tuscany.sca.binding.jms; import java.io.StringReader; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import junit.framework.TestCase; import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.OperationsConfigurator; import org.apache.tuscany.sca.assembly.WireFormat; import org.apache.tuscany.sca.binding.jms.wireformat.WireFormatJMSBytes; import org.apache.tuscany.sca.binding.jms.wireformat.WireFormatJMSObject; import org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint; import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.ProcessorContext; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor; import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint; import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry; /** * Tests for JMS binding xml */ public class JMSBindingProcessorTestCase extends TestCase { // Note: If you are adding new JMS binding read test cases, // consider adding a similar test case to JMSBindingProcessorWriteTestCase. public static final String COMPOSITE = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:jndi:testQueue\" />" + " </service>" + " </component>" + "</composite>"; public static final String HEADERS1 = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <headers type=\"myType\" deliveryMode=\"persistent\" timeToLive=\"54321\" priority=\"5\">" + " </headers>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String HEADERS_INVALID_PRIORITY = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <headers type=\"myType\" deliveryMode=\"persistent\" timeToLive=\"54321\" priority=\"medium\">" + " </headers>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String PROPERTIES1 = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <headers>" + " <property name=\"p1\">bla</property>" + " <property name=\"intProp\" type=\"int\">42</property>" + " </headers>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String OP_PROPERTIES1 = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <operationProperties name=\"op1\">" + " <headers type=\"op1Type\" >" + " <property name=\"p1\">bla</property>" + " <property name=\"intProp\" type=\"int\">42</property>" + " </headers>" + " </operationProperties >" + " <operationProperties name=\"op2\" nativeOperation=\"nativeOp2\" >" + " <headers type=\"op2Type\">" + " <property name=\"p2\">op2bla</property>" + " <property name=\"intProp\" type=\"int\">77</property>" + " </headers>" + " </operationProperties >" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String OP_NAMES_NO_PROPERTIES1 = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <operationProperties name=\"op1\">" + " </operationProperties >" + " <operationProperties name=\"op2\" nativeOperation=\"nativeOp2\" >" + " </operationProperties >" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String SELECTOR = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <messageSelection selector=\"prop1 = 2\" />" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String COMPOSITE_INVALID_URI = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"invalidjms:testQueue\" />" + " </service>" + " </component>" + "</composite>"; // Invalid: contains both a response attribute and a response element. public static final String COMPOSITE_INVALID_RESPONSE_ATTR_ELEMENT = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" responseConnection=\"responseConnectionAttrName\">" + " <response>" + " <destination jndiName=\"responseConnectionElementName\"/>" + " </response>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String DEST_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <destination jndiName=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </destination>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String CF_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <connectionFactory jndiName=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </connectionFactory>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String AS_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <activationSpec name=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </activationSpec>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String RESP_DEST_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <response>" + " <destination jndiName=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </destination>" + " </response>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String RESP_CF_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <response>" + " <connectionFactory jndiName=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </connectionFactory>" + " </response>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String RESP_AS_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <response>" + " <activationSpec name=\"foo\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </activationSpec>" + " </response>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String OP_PROPS_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <operationProperties name=\"op1\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </operationProperties >" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String RES_ADPT_PROPS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms>" + " <resourceAdapter name=\"r1\">" + " <property name=\"xxx\" type=\"yyy\">" + " some value text" + " </property>" + " <property name=\"two\">" + " bla" + " </property>" + " </resourceAdapter>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String CONFIGURED_OPERATIONS = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <operationProperties name=\"op1\">" + " </operationProperties >" + " <operation name=\"op1\" requires=\"IntentOne IntentTwo\"/>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String WIRE_FORMAT = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" xmlns:tuscany=\"http://tuscany.apache.org/xmlns/sca/1.1\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms uri=\"jms:testQueue\" >" + " <response>" + " <destination jndiName=\"responseConnectionElementName\"/>" + " <tuscany:wireFormat.jmsBytes/>" + " </response>" + " <tuscany:wireFormat.jmsObject/>" + " </binding.jms>" + " </service>" + " </component>" + "</composite>"; public static final String OP_PROP_NAME = "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://binding-jms\" name=\"binding-jms\">" + " <component name=\"HelloWorldComponent\">" + " <implementation.java class=\"services.HelloWorld\"/>" + " <service name=\"HelloWorldService\">" + " <binding.jms operationProperties=\"foo\"/>" + " </service>" + " </component>" + "</composite>"; private XMLInputFactory inputFactory; private StAXArtifactProcessor<Object> staxProcessor; private ProcessorContext context; @Override protected void setUp() throws Exception { DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry(); context = new ProcessorContext(extensionPoints); inputFactory = XMLInputFactory.newInstance(); StAXArtifactProcessorExtensionPoint staxProcessors = new DefaultStAXArtifactProcessorExtensionPoint(extensionPoints); staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null); } /** * Test parsing valid composite definition. Valid composite populated with correct values expected. * @throws Exception */ public void testLoadValidComposite() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(COMPOSITE)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals("testQueue", binding.getDestinationName()); } public void testHeaders1() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(HEADERS1)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals("myType", binding.getJMSHeaderType()); assertTrue(binding.isHeaderDeliveryModePersistent()); assertEquals(54321, binding.getJMSHeaderTimeToLive().longValue()); assertEquals(5, binding.getJMSHeaderPriority().intValue()); } public void testProperties1() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(PROPERTIES1)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals("bla", binding.getProperty("p1")); assertEquals(42, ((Integer)binding.getProperty("intProp")).intValue()); } public void testOpProperties1() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(OP_PROPERTIES1)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); Map<String, Object> op1Props = binding.getOperationProperties("op1"); assertEquals("op1Type", binding.getOperationJMSType("op1")); assertEquals("bla", op1Props.get("p1")); assertEquals(42, ((Integer)op1Props.get("intProp")).intValue()); assertEquals("op2Type", binding.getOperationJMSType("op2")); Map<String, Object> op2Props = binding.getOperationProperties("op2"); assertEquals("op2bla", op2Props.get("p2")); assertEquals(77, ((Integer)op2Props.get("intProp")).intValue()); } public void testSubscriptionHeaders () throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(SELECTOR)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals("prop1 = 2", binding.getJMSSelector()); } /** Test various parsing validation requirements. */ public void testParsingValidationErrors1() throws Exception { // Composite with malformed URI. XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(COMPOSITE_INVALID_URI)); try { Composite composite = (Composite)staxProcessor.read(reader, context); } catch(Exception e) { // JMSBindingExceptions are expected with invalid composite. if ( !e.getClass().isAssignableFrom( JMSBindingException.class ) ) throw e; // Do assertion to make sure test registers results. assertTrue( e.getClass().isAssignableFrom( JMSBindingException.class ) ); } } public void testParsingValidationErrors2() throws Exception { // Composite with invalid priority XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(HEADERS_INVALID_PRIORITY)); try { Composite composite = (Composite)staxProcessor.read(reader, context); } catch(Exception e) { // JMSBindingExceptions are expected with invalid composite. if ( !e.getClass().isAssignableFrom( JMSBindingException.class ) ) throw e; // Do assertion to make sure test registers results. assertTrue( e.getClass().isAssignableFrom( JMSBindingException.class ) ); return; } } /** Test various model validation requirements. */ public void testValidationErrors1() throws Exception { // Composite with response connection attr and element. XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(COMPOSITE_INVALID_RESPONSE_ATTR_ELEMENT)); try { Composite composite = (Composite)staxProcessor.read(reader, context); } catch(Exception e) { // JMSBindingExceptions are expected with invalid composite. if ( !e.getClass().isAssignableFrom( JMSBindingException.class ) ) throw e; // Do assertion to make sure test registers results. assertTrue( e.getClass().isAssignableFrom( JMSBindingException.class ) ); } } public void testDestinationProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(DEST_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getDestinationProperties()); assertEquals(2, binding.getDestinationProperties().size()); BindingProperty bp = binding.getDestinationProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getDestinationProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testConnectionFactoryProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(CF_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getConnectionFactoryProperties()); assertEquals(2, binding.getConnectionFactoryProperties().size()); BindingProperty bp = binding.getConnectionFactoryProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getConnectionFactoryProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testActivationSpecProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(AS_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getActivationSpecProperties()); assertEquals(2, binding.getActivationSpecProperties().size()); BindingProperty bp = binding.getActivationSpecProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getActivationSpecProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testResponseDestinationProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(RESP_DEST_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getResponseDestinationProperties()); assertEquals(2, binding.getResponseDestinationProperties().size()); BindingProperty bp = binding.getResponseDestinationProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getResponseDestinationProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testResponseConnectionFactoryProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(RESP_CF_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getResponseConnectionFactoryProperties()); assertEquals(2, binding.getResponseConnectionFactoryProperties().size()); BindingProperty bp = binding.getResponseConnectionFactoryProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getResponseConnectionFactoryProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testResponseActivationSpecProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(RESP_AS_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getResponseActivationSpecProperties()); assertEquals(2, binding.getResponseActivationSpecProperties().size()); BindingProperty bp = binding.getResponseActivationSpecProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getResponseActivationSpecProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testOperationPropertiesProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(OP_PROPS_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertNotNull(binding.getOperationPropertiesProperties("op1")); assertEquals(2, binding.getOperationPropertiesProperties("op1").size()); BindingProperty bp = binding.getOperationPropertiesProperties("op1").get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getOperationPropertiesProperties("op1").get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } public void testResouceAdapterProperties() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(RES_ADPT_PROPS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals("r1", binding.getResourceAdapterName()); assertNotNull(binding.getResourceAdapterProperties()); assertEquals(2, binding.getResourceAdapterProperties().size()); BindingProperty bp = binding.getResourceAdapterProperties().get("xxx"); assertEquals("xxx", bp.getName()); assertEquals("yyy", bp.getType()); assertEquals("some value text", bp.getValue().toString().trim()); BindingProperty bp2 = binding.getResourceAdapterProperties().get("two"); assertEquals("two", bp2.getName()); assertEquals(null, bp2.getType()); assertEquals("bla", bp2.getValue().toString().trim()); } /** * Tests the APIs: * public Set<String> getOperationNames(); * public Object getOperationProperty(String opName, String propName ); * @throws Exception */ public void testOpProperties2() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(OP_PROPERTIES1)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); Set<String> opNames = binding.getOperationNames(); assertEquals( 2, opNames.size() ); // Recall that order is not guaranteed iterating over a set. for (Iterator<String> it=opNames.iterator(); it.hasNext(); ) { String opName = it.next(); assertTrue( opName.equals( "op1") || opName.equals( "op2")); } Object value = binding.getOperationProperty( "op1", "p1" ); assertEquals("bla", value); value = binding.getOperationProperty( "op1", "intProp" ); assertEquals(42, ((Integer)value).intValue()); value = binding.getOperationProperty( "op2", "p2" ); assertEquals("op2bla", value); value = binding.getOperationProperty( "op2", "intProp" ); assertEquals(77, ((Integer)value).intValue()); } /** * Tests the APIs: * public Set<String> getOperationNames(); * Provides no optional properties or sub elements * @throws Exception */ public void testOpProperties3() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(OP_NAMES_NO_PROPERTIES1)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); Set<String> opNames = binding.getOperationNames(); assertEquals( 2, opNames.size() ); // Recall that order is not guaranteed iterating over a set. for (Iterator<String> it=opNames.iterator(); it.hasNext(); ) { String opName = it.next(); assertTrue( opName.equals( "op1") || opName.equals( "op2")); } } /** * Tests the APIs: * public Set<String> getOperationNames(); * Provides no optional properties or sub elements * @throws Exception */ public void testConfiguredOperations1() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(CONFIGURED_OPERATIONS)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); OperationsConfigurator opConfig = ((OperationsConfigurator)binding); assertEquals(opConfig.getConfiguredOperations().get(0).getRequiredIntents().size(), 2); } /** * Tests the APIs: * public WireFormat getRequstWireFormat(); * public WireFormat getResponseWireFormat(); * * @throws Exception */ public void testWireFormat() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(WIRE_FORMAT)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); WireFormat requestWireFormat = binding.getRequestWireFormat(); assertEquals(WireFormatJMSObject.class, requestWireFormat.getClass()); WireFormat responseWireFormat = binding.getResponseWireFormat(); assertEquals(WireFormatJMSBytes.class, responseWireFormat.getClass()); } public void testOpPropertiesName() throws Exception { XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(OP_PROP_NAME)); Composite composite = (Composite)staxProcessor.read(reader, context); JMSBinding binding = (JMSBinding) composite.getComponents().get(0).getServices().get(0).getBindings().get(0); assertNotNull(binding); assertEquals( "foo", binding.getOperationPropertiesName().getLocalPart() ); } }