static JmsDestinationImpl getJMSReplyToInternal ( JsJmsMessage _msg , List < SIDestinationAddress > rrp , SICoreConnection _siConn ) throws JMSException { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . entry ( tc , "getJMSReplyToInternal" , new Object [ ] { _msg , rrp , _siConn } ) ; JmsDestinationImpl tempReplyTo = null ; // Case a) - check for JMS specific data in compressed byte form. byte [ ] replyURIBytes = _msg . getJmsReplyTo ( ) ; if ( replyURIBytes != null ) { tempReplyTo = ( JmsDestinationImpl ) JmsInternalsFactory . getMessageDestEncodingUtils ( ) . getDestinationFromMsgRepresentation ( replyURIBytes ) ; } if ( tempReplyTo == null ) { // Cases b) & c) both depend on there being a reverse routing path, otherwise // there is no replyTo. // lookup the name of the dest in the reverse routing path SIDestinationAddress sida = null ; if ( rrp . size ( ) > 0 ) { // The last element of the RRP becomes the reply to destination int lastDestInRRP = rrp . size ( ) - 1 ; sida = rrp . get ( lastDestInRRP ) ; // Case b) - if we have a live connection, we can use that to query the dest type if ( _siConn != null ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "Determine reply dest type using SICoreConnection" ) ; try { // get the destination configuration & type DestinationConfiguration destConfig = _siConn . getDestinationConfiguration ( sida ) ; DestinationType destType = destConfig . getDestinationType ( ) ; if ( destType == DestinationType . TOPICSPACE ) { tempReplyTo = new JmsTopicImpl ( ) ; } else { tempReplyTo = new JmsQueueImpl ( ) ; } } catch ( SIException sice ) { // No FFDC code needed // d246604 Trace exceptions, but don't throw on. Fall back to // case c) below. if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { SibTr . debug ( tc , "failed to look up dest type because of " + sice ) ; SibTr . debug ( tc , "detail " , sice ) ; } } } // Case c) - Guess based on the discriminator if ( tempReplyTo == null ) { // 239238 - make a stab at determining whether it's a queue or topic // reply destination based on the reply disciminator. if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) SibTr . debug ( tc , "Guess reply dest type using reply discriminator" ) ; String replyDiscrim = _msg . getReplyDiscriminator ( ) ; if ( ( replyDiscrim == null ) || ( "" . equals ( replyDiscrim ) ) ) { tempReplyTo = new JmsQueueImpl ( ) ; } else { tempReplyTo = new JmsTopicImpl ( ) ; } } } } // Now fill in the fields that were hidden in the reply header. if ( tempReplyTo != null ) { populateReplyToFromHeader ( tempReplyTo , _msg , rrp ) ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "getJMSReplyToInternal" , tempReplyTo ) ; return tempReplyTo ; }
Static method that allows a replyTo destination to be obtained from a JsJmsMessage a ReverseRoutingPath and an optional JMS Core Connection object .