Hi Michal, for sure it's a possiblity to add JMS-specific properties to transport the servicename. The reason why we have made your decision against this, is that we want to support multiple transport layers without changes. I know that you can handle this problem with different axis transport handler, but I'am not sure if other implementations have the same capabilities. If sometime in the future there a standard way to transport the service name over JMS we will adopt to it, but as long (I think) we will use the header solution. Regards Oliver
-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Gesendet: Do 13.02.2003 14.38 Uhr
An: [EMAIL PROTECTED]
Cc:
Betreff: AW: AW: AW: How to set JMS transport destination service
Hi Oliver,
I'm using document type of SOAP message for sending. And I've also
looked into the source code of JMSSender.java file and found some
interesting part of code.
byte[] call(JMSEndpoint endpoint, byte[] message, long
timeout,HashMap properties) throws Exception {
...
jmsMessage.writeBytes(message);
jmsMessage.setJMSReplyTo(reply);
int deliveryMode = extractDeliveryMode(properties);
int priority = extractPriority(properties);
long timeToLive = extractTimeToLive(properties);
if(properties != null && !properties.isEmpty())
setProperties(properties, jmsMessage);
send(endpoint.getDestination(m_session), jmsMessage,
deliveryMode,priority, timeToLive);
...
SOAP message is serialized and new JMSMessage is created. This is
normal, but according to this code, you could add ObjectProperties to
this newly created JMSMessage. Function setProperties is coded in
folowing way:
private void setProperty(String property, Object value, Message
message) throws JMSException {
...
if(property.equals(JMSConstants.JMS_CORRELATION_ID))
message.setJMSCorrelationID((String)value);
else if(property.equals
(JMSConstants.JMS_CORRELATION_ID_AS_BYTES))
message.setJMSCorrelationIDAsBytes((byte[])value);
else if(property.equals(JMSConstants.JMS_TYPE)) message.setJMSType
((String)value);
else message.setObjectProperty(property, value);
...
The last line is really great. It adds your property to JMSMessage.
In this way you can pass your service name and other properties you
might need. The only problem is that HashMap of properties is
hardcoded to contain only following properties (BUT this can be
changed :-)) In case it would be modified to include also other
properties its no problem to add also IP address and other context
information about client.
....
HashMap props = new HashMap();
if(context.containsProperty(JMSConstants.PRIORITY)) props.put
(JMSConstants.PRIORITY,context.getPropert(JMSConstants.PRIORITY));
if(context.containsProperty(JMSConstants.DELIVERY_MODE)) props.put
(JMSConstants.DELIVERY_MODE,context.getPropert
(JMSConstants.DELIVERY_MODE));
if(context.containsProperty(JMSConstants.TIME_TO_LIVE)) props.put
(JMSConstants.TIME_TO_LIVE,context.getProperty
(JMSConstants.TIME_TO_LIVE));
return props;
....
Cheers,
Michal
--------------
Subject: AW: AW: AW: How to set JMS transport destination service
From: "Oliver Adler" <Oliver.Adler () SYRACOM ! DE>
Date: 2003-02-13 11:48:58
[Download message RAW]
Hi Michal,
the way how to figure out which service you have to invoke on server
side depents on \
the soap type. For a SOAP-RPC service are rules defined in the SOAP-
spec. For a \
DOCUMENT-style service NOT. http uses (at the moment) the soapaction.
But with SOAP \
1.2 the soapaction is deprecated. The specs says only that it is up
to the service \
provider to figure out which service to call. (BTW Axis uses the
namespace of the \
first body element to find the service). We use a soap header to
transfer the \
servicename. As far as I know there is no standard way to do this
over JMS. Regards
Oliver
--------------------
Poslouchejte Radio Impuls a vyhrajte v�kendy pro dva v evropsk�ch
metropol�ch. V�ce na Radiu Impuls a http://www.netimpuls.cz!
<<winmail.dat>>
