1 package org.objectweb.celtix.systest.jms; 2 3 import java.lang.reflect.InvocationHandler ; 4 import java.lang.reflect.Proxy ; 5 import java.lang.reflect.UndeclaredThrowableException ; 6 import java.net.URL ; 7 import java.util.HashMap ; 8 import java.util.Map ; 9 10 import javax.xml.namespace.QName ; 11 import javax.xml.ws.BindingProvider; 12 13 import junit.framework.Test; 14 import junit.framework.TestSuite; 15 16 import org.objectweb.celtix.bus.transports.jms.JMSConstants; 17 import org.objectweb.celtix.hello_world_jms.HelloWorldOneWayPort; 18 import org.objectweb.celtix.hello_world_jms.HelloWorldOneWayQueueService; 19 import org.objectweb.celtix.hello_world_jms.HelloWorldPortType; 20 import org.objectweb.celtix.hello_world_jms.HelloWorldPubSubPort; 21 import org.objectweb.celtix.hello_world_jms.HelloWorldPubSubService; 22 import org.objectweb.celtix.hello_world_jms.HelloWorldService; 23 import org.objectweb.celtix.systest.common.ClientServerSetupBase; 24 import org.objectweb.celtix.systest.common.ClientServerTestBase; 25 import org.objectweb.celtix.transports.jms.context.JMSMessageHeadersType; 26 import org.objectweb.celtix.transports.jms.context.JMSPropertyType; 27 28 public class JMSClientServerTest extends ClientServerTestBase { 29 30 private QName serviceName; 31 private QName portName; 32 33 public static Test suite() throws Exception { 34 TestSuite suite = new TestSuite(JMSClientServerTest.class); 35 return new ClientServerSetupBase(suite) { 36 public void startServers() throws Exception { 37 Map <String , String > props = new HashMap <String , String >(); 38 if (System.getProperty("activemq.store.dir") != null) { 39 props.put("activemq.store.dir", System.getProperty("activemq.store.dir")); 40 } 41 props.put("java.util.logging.config.file", 42 System.getProperty("java.util.logging.config.file")); 43 44 assertTrue("server did not launch correctly", 45 launchServer(EmbeddedJMSBrokerLauncher.class, props, null)); 46 47 assertTrue("server did not launch correctly", 48 launchServer(Server.class, false)); 49 } 50 }; 51 } 52 53 public void testBasicConnection() throws Exception { 54 serviceName = new QName ("http://celtix.objectweb.org/hello_world_jms", 55 "HelloWorldService"); 56 portName = new QName ("http://celtix.objectweb.org/hello_world_jms", "HelloWorldPort"); 57 URL wsdl = getClass().getResource("/wsdl/jms_test.wsdl"); 58 assertNotNull(wsdl); 59 60 HelloWorldService service = new HelloWorldService(wsdl, serviceName); 61 assertNotNull(service); 62 63 String response1 = new String ("Hello Milestone-"); 64 String response2 = new String ("Bonjour"); 65 try { 66 HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); 67 for (int idx = 0; idx < 5; idx++) { 68 String greeting = greeter.greetMe("Milestone-" + idx); 69 assertNotNull("no response received from service", greeting); 70 String exResponse = response1 + idx; 71 assertEquals(exResponse, greeting); 72 73 String reply = greeter.sayHi(); 74 assertNotNull("no response received from service", reply); 75 assertEquals(response2, reply); 76 } 77 } catch (UndeclaredThrowableException ex) { 78 throw (Exception )ex.getCause(); 79 } 80 } 81 82 public void testOneWayTopicConnection() throws Exception { 83 serviceName = new QName ("http://celtix.objectweb.org/hello_world_jms", 84 "HelloWorldPubSubService"); 85 portName = new QName ("http://celtix.objectweb.org/hello_world_jms", 86 "HelloWorldPubSubPort"); 87 URL wsdl = getClass().getResource("/wsdl/jms_test.wsdl"); 88 assertNotNull(wsdl); 89 90 HelloWorldPubSubService service = new HelloWorldPubSubService(wsdl, serviceName); 91 assertNotNull(service); 92 93 try { 94 HelloWorldPubSubPort greeter = service.getPort(portName, HelloWorldPubSubPort.class); 95 for (int idx = 0; idx < 5; idx++) { 96 greeter.greetMeOneWay("JMS:PubSub:Milestone-" + idx); 97 } 98 Thread.sleep(100L); 100 } catch (UndeclaredThrowableException ex) { 101 throw (Exception )ex.getCause(); 102 } 103 } 104 105 public void testOneWayQueueConnection() throws Exception { 106 serviceName = new QName ("http://celtix.objectweb.org/hello_world_jms", 107 "HelloWorldOneWayQueueService"); 108 portName = new QName ("http://celtix.objectweb.org/hello_world_jms", 109 "HelloWorldOneWayPort"); 110 URL wsdl = getClass().getResource("/wsdl/jms_test.wsdl"); 111 assertNotNull(wsdl); 112 113 HelloWorldOneWayQueueService service = new HelloWorldOneWayQueueService(wsdl, serviceName); 114 assertNotNull(service); 115 116 try { 117 HelloWorldOneWayPort greeter = service.getPort(portName, HelloWorldOneWayPort.class); 118 for (int idx = 0; idx < 5; idx++) { 119 greeter.greetMeOneWay("JMS:Queue:Milestone-" + idx); 120 } 121 Thread.sleep(100L); 123 } catch (UndeclaredThrowableException ex) { 124 throw (Exception )ex.getCause(); 125 } 126 } 127 128 public void testContextPropogation() throws Exception { 129 serviceName = new QName ("http://celtix.objectweb.org/hello_world_jms", 130 "HelloWorldService"); 131 portName = new QName ("http://celtix.objectweb.org/hello_world_jms", "HelloWorldPort"); 132 URL wsdl = getClass().getResource("/wsdl/jms_test.wsdl"); 133 assertNotNull(wsdl); 134 135 HelloWorldService service = new HelloWorldService(wsdl, serviceName); 136 assertNotNull(service); 137 138 try { 139 HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class); 140 InvocationHandler handler = Proxy.getInvocationHandler(greeter); 141 BindingProvider bp = null; 142 143 if (handler instanceof BindingProvider) { 144 bp = (BindingProvider)handler; 145 Map <String , Object > requestContext = bp.getRequestContext(); 147 JMSMessageHeadersType requestHeader = new JMSMessageHeadersType(); 148 requestHeader.setJMSCorrelationID("JMS_SAMPLE_CORRELATION_ID"); 149 requestHeader.setJMSExpiration(3600000L); 150 JMSPropertyType propType = new JMSPropertyType(); 151 propType.setName("Test.Prop"); 152 propType.setValue("mustReturn"); 153 requestHeader.getProperty().add(propType); 154 requestContext.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, requestHeader); 155 } 156 157 String greeting = greeter.greetMe("Milestone-"); 158 assertNotNull("no response received from service", greeting); 159 160 assertEquals("Hello Milestone-", greeting); 161 162 if (bp != null) { 163 Map <String , Object > responseContext = bp.getResponseContext(); 164 JMSMessageHeadersType responseHdr = 165 (JMSMessageHeadersType)responseContext.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS); 166 if (responseHdr == null) { 167 fail("response Header should not be null"); 168 } 169 170 assertTrue("CORRELATION ID should match :", 171 "JMS_SAMPLE_CORRELATION_ID".equals(responseHdr.getJMSCorrelationID())); 172 assertTrue("response Headers must conain the app specific property set by request context.", 173 responseHdr.getProperty() != null); 174 } 175 } catch (UndeclaredThrowableException ex) { 176 throw (Exception )ex.getCause(); 177 } 178 } 179 180 181 public static void main(String [] args) { 182 junit.textui.TestRunner.run(JMSClientServerTest.class); 183 } 184 } 185 | Popular Tags |