Class: TorqueBox::Messaging::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/torquebox/messaging/message.rb

Constant Summary collapse

DEFAULT_DECODE_ENCODING =

if no encoding specified in the message itself assume the legacy encoding

:marshal_base64
DEFAULT_ENCODE_ENCODING =

if no encoding specified when creating a message and no global defaut set use :marshal

:marshal
ENCODING_PROPERTY =
"__ContentEncoding__"

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(jms_session, payload) ⇒ Message

Returns a new instance of Message.



35
36
37
38
39
40
# File 'lib/torquebox/messaging/message.rb', line 35

def initialize(jms_session, payload)
  @jms_message = self.class::JMS_TYPE == :text ? jms_session.create_text_message :
    jms_session.create_bytes_message
  set_encoding
  encode( payload )
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(*args) ⇒ Object



77
78
79
# File 'lib/torquebox/messaging/message.rb', line 77

def method_missing(*args)
  @jms_message.send(*args)
end

Instance Attribute Details

#jms_messageObject (readonly)

Returns the value of attribute jms_message.



24
25
26
# File 'lib/torquebox/messaging/message.rb', line 24

def jms_message
  @jms_message
end

Class Method Details

.__new__Object



94
# File 'lib/torquebox/messaging/message.rb', line 94

alias :__new__ :new

.class_for_encoding(encoding) ⇒ Object

Raises:

  • (ArgumentError)


124
125
126
127
128
# File 'lib/torquebox/messaging/message.rb', line 124

def class_for_encoding(encoding)
  klass = encoding_map[encoding.to_sym]
  raise ArgumentError.new( "No message class found for encoding '#{encoding}'" ) unless klass
  klass
end

.encoding_mapObject



116
117
118
# File 'lib/torquebox/messaging/message.rb', line 116

def encoding_map
  @encoding_map ||= { }
end

.extract_encoding_from_message(jms_message) ⇒ Object



130
131
132
# File 'lib/torquebox/messaging/message.rb', line 130

def extract_encoding_from_message(jms_message)
  jms_message.get_string_property( ENCODING_PROPERTY )
end

.inherited(subclass) ⇒ Object



96
97
98
99
100
# File 'lib/torquebox/messaging/message.rb', line 96

def inherited(subclass)
  class << subclass
    alias :new :__new__
  end
end

.new(jms_message_or_session, payload = nil, encoding = nil) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/torquebox/messaging/message.rb', line 102

def new(jms_message_or_session, payload = nil, encoding = nil)
  if jms_message_or_session.is_a?( javax.jms::Session )
    encoding ||= ENV['DEFAULT_MESSAGE_ENCODING'] || DEFAULT_ENCODE_ENCODING
    klass = class_for_encoding( encoding.to_sym )
    klass.new( jms_message_or_session, payload )
  else
    encoding = extract_encoding_from_message( jms_message_or_session ) || DEFAULT_DECODE_ENCODING
    klass = class_for_encoding( encoding )
    msg = klass.allocate
    msg.initialize_from_message( jms_message_or_session )
    msg
  end
end

.register_encoding(klass) ⇒ Object



120
121
122
# File 'lib/torquebox/messaging/message.rb', line 120

def register_encoding(klass)
  encoding_map[klass::ENCODING] = klass
end

Instance Method Details

#decodeObject



89
90
91
# File 'lib/torquebox/messaging/message.rb', line 89

def decode
  TorqueBox::Codecs.decode(@jms_message.text, self.class::ENCODING)
end

#encode(message) ⇒ Object



85
86
87
# File 'lib/torquebox/messaging/message.rb', line 85

def encode(message)
  @jms_message.text = TorqueBox::Codecs.encode(message, self.class::ENCODING)
end

#initialize_from_message(jms_message) ⇒ Object



42
43
44
# File 'lib/torquebox/messaging/message.rb', line 42

def initialize_from_message(jms_message)
  @jms_message = jms_message
end

#populate_message_headers(options) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/torquebox/messaging/message.rb', line 50

def populate_message_headers(options)
  return if options.nil?
  options.each do |key, value|
    case key.to_s
    when 'correlation_id' then @jms_message.setJMSCorrelationID(value)
    when 'reply_to'       then @jms_message.setJMSReplyTo(value)
    when 'type'           then @jms_message.setJMSType(value)
    end
  end
end

#populate_message_properties(properties) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/torquebox/messaging/message.rb', line 61

def populate_message_properties(properties)
  return if properties.nil? or properties.empty?
  properties.each do |key, value|
    case value
      when Integer
        @jms_message.set_long_property(key.to_s, value)
      when Float
        @jms_message.set_double_property(key.to_s, value)
      when TrueClass, FalseClass
        @jms_message.set_boolean_property(key.to_s, value)
      else
        @jms_message.set_string_property(key.to_s, value.to_s)
    end
  end
end

#respond_to?(symbol, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/torquebox/messaging/message.rb', line 81

def respond_to?(symbol, include_private = false)
  super || @jms_message.respond_to?(symbol, include_private)
end

#set_encodingObject



46
47
48
# File 'lib/torquebox/messaging/message.rb', line 46

def set_encoding
  @jms_message.set_string_property( ENCODING_PROPERTY, self.class::ENCODING.to_s )
end