antelder 2002/06/14 07:47:16 Modified: java/test/util wsiftestjmssetup.bat wsiftestmqsetup.bat java/samples/addressbook/wsifservice AddressBook.wsdl java/test wsif.test.properties java/samples/stockquote/wsifservice Stockquote.wsdl Added: java/src/org/apache/wsif/util/jms NativeJMSRequestListener.java java/test/jms NativeJMSTest.java Log: New testcase for the native JMS provider Revision Changes Path 1.4 +4 -0 xml-axis-wsif/java/test/util/wsiftestjmssetup.bat Index: wsiftestjmssetup.bat =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/util/wsiftestjmssetup.bat,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- wsiftestjmssetup.bat 11 Jun 2002 09:23:14 -0000 1.3 +++ wsiftestjmssetup.bat 14 Jun 2002 14:47:16 -0000 1.4 @@ -12,6 +12,10 @@ echo def qcf(TempQCF) > wsiftestjmssetup.scp echo def q(AddressBookReplyTo) qu(AddressBookReplyTo) >> wsiftestjmssetup.scp +rem these should match the nativejms properties in wsif.test.properties +echo def q(NativeJmsRequestQueue) queue(NativeJmsRequestQueue) >> wsifjmssetup.scp +echo def q(NativeJmsResponseQueue) queue(NativeJmsResponseQueue) >> wsifjmssetup.scp + rem this should match the wsif.async.replytoq value in wsif.test.properties echo def q(AsyncReplyTo) qu(AsyncReplyTo) >> wsiftestjmssetup.scp 1.4 +5 -1 xml-axis-wsif/java/test/util/wsiftestmqsetup.bat Index: wsiftestmqsetup.bat =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/util/wsiftestmqsetup.bat,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- wsiftestmqsetup.bat 11 Jun 2002 09:23:14 -0000 1.3 +++ wsiftestmqsetup.bat 14 Jun 2002 14:47:16 -0000 1.4 @@ -10,8 +10,12 @@ echo DEFINE QLOCAL('AddressBookReplyTo') REPLACE > wsiftestmqsetup.mqs +rem these should match the nativejms properties in wsif.test.properties +echo DEFINE QLOCAL('NativeJmsRequestQueue') REPLACE >> wsifmqsetup.mqs +echo DEFINE QLOCAL('NativeJmsResponseQueue') REPLACE >> wsifmqsetup.mqs + rem this should match the wsif.async.replytoq value in wsif.test.properties -echo DEFINE QLOCAL('AsyncReplyTo') REPLACE > wsiftestmqsetup.mqs +echo DEFINE QLOCAL('AsyncReplyTo') REPLACE >> wsiftestmqsetup.mqs echo + Calling runmqsc in batch mode to create objects @REM w/o queue manger - use system default queuemanager 1.2 +6 -12 xml-axis-wsif/java/samples/addressbook/wsifservice/AddressBook.wsdl Index: AddressBook.wsdl =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/samples/addressbook/wsifservice/AddressBook.wsdl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AddressBook.wsdl 6 Jun 2002 08:28:46 -0000 1.1 +++ AddressBook.wsdl 14 Jun 2002 14:47:16 -0000 1.2 @@ -167,14 +167,15 @@ </binding> <binding name="NativeJmsBinding" type="tns:AddressBook"> - <jms:binding type="TextMessage"/> + <jms:binding type="ObjectMessage"/> <!-- executeInputOnlyOperation(WSIFMessage) --> + <format:typeMapping encoding="Java" style="Java"> + <format:typeMap typeName="typens:address" formatType="com.ibm.www.namespace.wsif.samples.ab.types.Address" /> + <format:typeMap typeName="xsd:string" formatType="java.lang.String" /> + </format:typeMapping> <operation name="addEntry"> <input name="AddEntryWholeNameRequest"/> </operation> - </binding> - <binding name="NativeJmsBinding2" type="tns:AddressBook"> - <jms:binding type="ObjectMessage"/> <operation name="getAddressFromName"> <!-- executeRequestResponseAsync(WSIFMessage,WSIFResponseHandler) --> <input name="GetAddressFromNameRequest"/> @@ -198,14 +199,7 @@ jndiProviderURL="file://C:/JNDI-Directory"/> </port> <port name="NativeJmsPort" binding="tns:NativeJmsBinding"> - <jms:address jndiDestinationName="NativeJmsAddressBookQueue" - destinationStyle="queue" - jndiConnectionFactoryName="WSIFSampleQCF" - initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" - jndiProviderURL="file://C:/JNDI-Directory"/> - </port> - <port name="NativeJmsPort2" binding="tns:NativeJmsBinding2"> - <jms:address jndiDestinationName="NativeJmsAddressBookQueue" + <jms:address jndiDestinationName="NativeJmsRequestQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" 1.4 +4 -0 xml-axis-wsif/java/test/wsif.test.properties Index: wsif.test.properties =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/test/wsif.test.properties,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- wsif.test.properties 11 Jun 2002 09:23:14 -0000 1.3 +++ wsif.test.properties 14 Jun 2002 14:47:16 -0000 1.4 @@ -9,6 +9,10 @@ # wsif.async.replytoq=<JMS q for async responses> wsif.async.replytoq=AsyncReplyTo # +# the nativejms properties should match the wsifjmssetup and wsifmqsetup bat files +wsif.nativejms.requestq=NativeJmsRequestQueue +wsif.nativejms.responseq=NativeJmsResponseQueue +# # wsif.test.components switches off some areas of unit test so that you can run # whole suite without jms, ejb, remotewsdl (in WsdlLoadingTest) or jndi. By default, # all areas are on unless you explicitly turn them off. 1.2 +1 -1 xml-axis-wsif/java/samples/stockquote/wsifservice/Stockquote.wsdl Index: Stockquote.wsdl =================================================================== RCS file: /home/cvs/xml-axis-wsif/java/samples/stockquote/wsifservice/Stockquote.wsdl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Stockquote.wsdl 6 Jun 2002 08:28:47 -0000 1.1 +++ Stockquote.wsdl 14 Jun 2002 14:47:16 -0000 1.2 @@ -108,7 +108,7 @@ jndiProviderURL="file://C:/JNDI-Directory"/> </port> <port name="NativeJmsPort" binding="tns:NativeJmsBinding"> - <jms:address jndiDestinationName="JmsStockQuoteQueue" + <jms:address jndiDestinationName="NativeJmsRequestQueue" destinationStyle="queue" jndiConnectionFactoryName="WSIFSampleQCF" initialContextFactory="com.sun.jndi.fscontext.RefFSContextFactory" 1.1 xml-axis-wsif/java/src/org/apache/wsif/util/jms/NativeJMSRequestListener.java Index: NativeJMSRequestListener.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "WSIF" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, 2002, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package org.apache.wsif.util.jms; import org.apache.wsif.WSIFOperation; import org.apache.wsif.WSIFException; import org.apache.wsif.WSIFCorrelationId; import org.apache.wsif.WSIFCorrelationService; import org.apache.wsif.util.WSIFCorrelationServiceLocator; import org.apache.wsif.base.WSIFDefaultCorrelationService; import org.apache.wsif.util.jms.*; import org.apache.wsif.util.jms.WSIFJMSFinderForJndi; import org.apache.wsif.logging.*; import addressbook.wsiftypes.AddressBook; import addressbook.wsiftypes.Address; import addressbook.wsiftypes.Phone; import stockquote.wsifservice.StockquotePT; import stockquote.wsiftypes.StockQuote; import java.io.Serializable; import java.util.*; import javax.jms.*; /** * Used to simulate the remote service for native JMS requests. * TODO this should be in the test package but the wsif.util.JMS classes aren't visable */ public class NativeJMSRequestListener extends JMS2HTTPBridgeDestination { static final String startType = JMS2HTTPBridgeDestination.COLDSTART; static final String initialContextFactory = "com.sun.jndi.fscontext.RefFSContextFactory"; static final String jndiUrl = "file://C:/JNDI-Directory"; static final String sampleName = null; static final String queueConnectionFactory = "WSIFSampleQCF"; static final String readQueue = null; static final String httpUrlString = "http://localhost:8080/soap/servlet/rpcrouter"; private Thread listener; AddressBook ab = new AddressBook(); StockQuote sq = new StockQuote(); private WSIFJMSListener list = new WSIFJMSListener() { public void onException(JMSException arg1) { Tr.entry(this, arg1); System.out.println("Caught an exception!"); arg1.printStackTrace(); Tr.exit(); } public void onMessage(Message message) { Tr.entry(this, message); processResponse(message); Tr.exit(); } }; public NativeJMSRequestListener(String msgQ) throws WSIFException { super( new WSIFJMSFinderForJndi( null, initialContextFactory, jndiUrl, WSIFJMSFinder.STYLE_QUEUE, queueConnectionFactory, msgQ), null, WSIFJMSConstants.WAIT_FOREVER, startType); listener = new Thread() { public void run() { try { listen( list ); } catch (WSIFException ex) { ex.printStackTrace(); } } }; listener.start(); } /** * Create a listener thread to listen for messages. This waits forever until it gets * an InterruptedException. * @param listener is the JMS message and exception callback interface implementation * @param queue to listen on */ public void listen(WSIFJMSListener listener, Queue queue) throws WSIFException { Tr.entry(this, listener, queue); areWeClosed(); try { QueueReceiver qr = session.createReceiver(queue); qr.setMessageListener(listener); connection.setExceptionListener(listener); connection.start(); for (int i = 1; !Thread.interrupted(); i++) { Thread.yield(); Thread.sleep(5000); System.out.println("JMSAsyncListener waiting... " + i); } } catch (JMSException je) { je.printStackTrace(); throw new WSIFException( je.getMessage() ); } catch (InterruptedException ignored) { System.out.println("JMSAsyncListener Exitting"); } Tr.exit(); } public void stop() { listener.interrupt(); } private void processResponse(Message msg) { System.out.println( "NativeJMSRequestListener got msg:" + msg ); try { String op = msg.getStringProperty( "WSDL_Operation" ); if ( "addEntry".equals( op ) ) { abAddEntry( (ObjectMessage)msg ); } else if ( "getAddressFromName".equals( op ) ) { Address addr = abGetAddressFromName( (ObjectMessage)msg ); sendReply( msg, addr ); } else if ( "getQuote".equals( op ) ) { float value = sqGetQuote( (ObjectMessage)msg ); sendReply( msg, new Float( value ) ); } else { System.err.println( "unknown op=" + op ); } } catch (Exception ex) { ex.printStackTrace(); } } private void abAddEntry(ObjectMessage msg) throws JMSException { HashMap hm = (HashMap) msg.getObject(); String name = (String)hm.get( "name" ); Address addr = (Address)hm.get( "address" ); ab.addEntry( name, addr ); } private Address abGetAddressFromName(ObjectMessage msg) throws JMSException { HashMap hm = (HashMap) msg.getObject(); String name = (String)hm.get( "name" ); return ab.getAddressFromName( name ); } private float sqGetQuote(ObjectMessage msg) throws Exception { HashMap hm = (HashMap) msg.getObject(); String name = (String)hm.get( "symbol" ); return sq.getQuote( name ); } private void sendReply(Message msg, Object response) throws Exception { Message replyMsg = session.createObjectMessage(); ((ObjectMessage)replyMsg).setObject((Serializable) response ); String s = "WSDL_PortType_NS"; replyMsg.setStringProperty( s, msg.getStringProperty( s ) ); s = "WSDL_PortType_Local"; replyMsg.setStringProperty( s, msg.getStringProperty( s ) ); s = "WSDL_Operation"; replyMsg.setStringProperty( s, msg.getStringProperty( s ) ); s = "WSDL_Input"; replyMsg.setStringProperty( s, msg.getStringProperty( s ) ); s = "WSDL_Output"; replyMsg.setStringProperty( s, msg.getStringProperty( s ) ); String replyq = ((Queue)msg.getJMSReplyTo()).getQueueName().substring( 9 ); String id = msg.getJMSMessageID(); replyMsg.setJMSCorrelationID( id ); WSIFJMSDestination dest = new WSIFJMSDestination( new WSIFJMSFinderForJndi(null, initialContextFactory, jndiUrl, WSIFJMSFinder.STYLE_QUEUE, queueConnectionFactory, replyq ) ); dest.send( replyMsg, id ); } } 1.1 xml-axis-wsif/java/test/jms/NativeJMSTest.java Index: NativeJMSTest.java =================================================================== /* * The Apache Software License, Version 1.1 * * * Copyright (c) 2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "WSIF" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 2001, 2002, International * Business Machines, Inc., http://www.apache.org. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package jms; import junit.framework.*; import addressbook.wsiftypes.AddressBook; import addressbook.wsiftypes.Address; import addressbook.wsiftypes.Phone; import stockquote.wsifservice.StockquotePT; import stockquote.wsiftypes.StockQuote; import org.apache.wsif.*; import org.apache.wsif.util.*; import org.apache.wsif.base.*; import org.apache.wsif.util.jms.*; import javax.jms.*; import javax.mail.MessagingException; import org.apache.wsif.providers.jms.*; import util.TestUtilities; import com.ibm.mq.jms.MQQueueConnectionFactory; import java.util.HashMap; /** * Junit test to test the NativeJMSProvider * * need to use the wsifjmssetup.bat and wsifmqset.bat * */ public class NativeJMSTest extends TestCase { NativeJMSRequestListener nativeReqListener; public static String name1 = "Purdue Boilermaker"; public static Address addr1 = new Address( 1, "University Drive", "West Lafayette", "IN", 47907, new Phone(765, "494", "4900")); public NativeJMSTest(String name) { super(name); } public static void main(String[] args) { junit.textui.TestRunner.run(suite()); } public static Test suite() { return new TestSuite(NativeJMSTest.class); } public void setUp() { TestUtilities.setUpExtensionsAndProviders(); try { nativeReqListener = new NativeJMSRequestListener( TestUtilities.getWsifProperty("wsif.nativejms.requestq") ); } catch (WSIFException ex) { ex.printStackTrace(); } } public void tearDown() { if ( nativeReqListener != null ) nativeReqListener.stop(); } public void testStockQuote() { StockQuote(); } //public void testAddressBook() { // AddressBook_addEntry(); // AddressBook_getAddressFromName(); //} /** * Query Stockquote sample */ public void StockQuote() { String portType = "Stockquote"; String portName = "NativeJmsPort"; String operationName = "getQuote"; String wsdlLocation = TestUtilities.getWsdlPath("java\\samples\\stockquote\\wsifservice") + "Stockquote.wsdl"; System.out.println("\n=== StockQuote"); try { WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService(wsdlLocation, null, // serviceNS null, // serviceName null, // "http://www.ibm.com/namespace/wsif/samples/stockquote", // portTypeNS portType); // portTypeName WSIFPort port = service.getPort(portName); WSIFOperation operation = port.createOperation(operationName); WSIFMessage context = new WSIFDefaultMessage(); context.setObjectPart( WSIFConstants.CONTEXT_JMS_PREFIX + "JMSReplyTo", TestUtilities.getWsifProperty("wsif.nativejms.responseq") ); operation.setContext( context ); WSIFMessage input = operation.createInputMessage(); input.setName("GetQuoteInput"); input.setObjectPart("symbol", "" ); WSIFMessage output = operation.createOutputMessage(); WSIFMessage fault = operation.createFaultMessage(); System.out.println( "Executing executeRequestResponseAsync operation put: " + operationName); try { boolean ok = operation.executeRequestResponseOperation(input, output, fault ); System.out.println("Sent req ok=" + ok ); float value = ((Float)output.getObjectPart( "quote" )).floatValue(); System.out.println("Found value = " + value); assertTrue( value == -1.0F ); } catch (Exception ex) { ex.printStackTrace(); } } catch (Exception e) { System.err.println("StockQuote (" + portName + ") caught exception " + e); e.printStackTrace(); assertTrue(false); } } /** * AddressBook sample */ public void AddressBook_addEntry() { String portType = "AddressBook"; String portName = "NativeJmsPort"; String operationName = "addEntry"; String wsdlLocation = TestUtilities.getWsdlPath("java\\samples\\addressbook\\wsifservice") + "AddressBook.wsdl"; System.out.println("\n=== AddressBook_addEntry"); try { WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService(wsdlLocation, null, // serviceNS null, // serviceName null, // "http://www.ibm.com/namespace/wsif/samples/ab", // portTypeNS portType); // portTypeName WSIFPort port = service.getPort(portName); /** * add address */ // invoke send request WSIFOperation operation = port.createOperation(operationName); WSIFMessage context = new WSIFDefaultMessage(); context.setObjectPart( WSIFConstants.CONTEXT_JMS_PREFIX + "JMSReplyTo", TestUtilities.getWsifProperty("wsif.nativejms.responseq") ); operation.setContext( context ); WSIFMessage input = operation.createInputMessage(); input.setObjectPart("name", name1); input.setObjectPart("address", addr1); operation.executeInputOnlyOperation(input); System.out.println("Put message.....: '" + name1 + "'"); } catch (Exception e) { System.err.println("AddressBookTest(" + portName + ") caught exception " + e); e.printStackTrace(); assertTrue(false); } } /** * AddressBook */ public void AddressBook_getAddressFromName() { String portType = "AddressBook"; String portName = "NativeJmsPort"; String operationName = "getAddressFromName"; String wsdlLocation = TestUtilities.getWsdlPath("java\\samples\\addressbook\\wsifservice") + "AddressBook.wsdl"; System.out.println("\n=== AddressBook_getAddressFromName"); try { WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); WSIFService service = factory.getService(wsdlLocation, null, // serviceNS null, // serviceName null, // "http://www.ibm.com/namespace/wsif/samples/ab", // portTypeNS portType); // portTypeName WSIFPort port = service.getPort(portName); String inputMsgName = "GetAddressFromNameRequest"; String outputMsgName = "GetAddressFromNameResponse"; WSIFOperation operation = port.createOperation(operationName, inputMsgName, outputMsgName); WSIFMessage context = new WSIFDefaultMessage(); context.setObjectPart( WSIFConstants.CONTEXT_JMS_PREFIX + "JMSReplyTo", TestUtilities.getWsifProperty("wsif.nativejms.responseq") ); operation.setContext( context ); WSIFMessage input = operation.createInputMessage(); WSIFMessage output = operation.createOutputMessage(); WSIFMessage fault = operation.createFaultMessage(); input.setObjectPart("name", name1); System.out.println( "Executing executeRequestResponseAsync operation put: " + operationName + ":" + inputMsgName + ":" + outputMsgName); Object correlId = null; try { boolean ok = operation.executeRequestResponseOperation(input, output, fault ); System.out.println("Sent req ok=" + ok ); Address addressResponse = (Address) output.getObjectPart("address"); System.out.println("Found address = " + addressResponse); assertTrue( addr1.equals(addressResponse) ); } catch (Exception ex) { ex.printStackTrace(); } System.out.println("output=" + output ); } catch (Exception e) { System.err.println("AddressBook (" + portName + ") caught exception " + e); e.printStackTrace(); assertTrue(false); } } }