done
Asankha C. Perera wrote:
> Can someone please apply this patch to Axis2
>
> This includes a fix to support JMS Text messages in addition to Binary
> messages (else, on the server side a class cast exception was thrown)
> and to make the JMS sender uses the TRANSPORT_URL property if set, and
> use the To address only if its not specified. This would be required
> for Synapse.
>
> thanks
> asankha
>
>
>------------------------------------------------------------------------
>
>Index: modules/core/src/org/apache/axis2/transport/jms/JMSSender.java
>===================================================================
>--- modules/core/src/org/apache/axis2/transport/jms/JMSSender.java
>(revision 413826)
>+++ modules/core/src/org/apache/axis2/transport/jms/JMSSender.java
>(working copy)
>@@ -22,10 +22,12 @@
> import org.apache.axiom.soap.SOAPEnvelope;
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
>+import org.apache.axis2.addressing.AddressingConstants;
> import org.apache.axis2.client.Options;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.context.OperationContext;
>+import org.apache.axis2.context.MessageContextConstants;
> import org.apache.axis2.description.Parameter;
> import org.apache.axis2.description.TransportOutDescription;
> import org.apache.axis2.handlers.AbstractHandler;
>@@ -199,7 +201,16 @@
> }
> }
>
>- String endpointAddress = msgContext.getTo() != null ?
>msgContext.getTo().getAddress() : null;
>+ String endpointAddress = (String) msgContext
>+ .getProperty(MessageContextConstants.TRANSPORT_URL);
>+ if (endpointAddress == null &&
>+ msgContext.getTo() != null &&
>+ !AddressingConstants.Submission.WSA_ANONYMOUS_URL
>+ .equals(msgContext.getTo().getAddress()) &&
>+ !AddressingConstants.Final.WSA_ANONYMOUS_URL
>+ .equals(msgContext.getTo().getAddress())) {
>+ endpointAddress = msgContext.getTo().getAddress();
>+ }
> boolean waitForResponse = false;
>
> if (dest == null) {
>Index: modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java
>===================================================================
>--- modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java
>(revision 413826)
>+++ modules/core/src/org/apache/axis2/transport/jms/SimpleJMSListener.java
>(working copy)
>@@ -184,8 +184,8 @@
> public void onMessage(javax.jms.Message message) {
> try {
> // pass off the message to a worker as a BytesMessage
>- SimpleJMSWorker worker = new
>SimpleJMSWorker(configurationContext, this,
>- (BytesMessage) message);
>+ SimpleJMSWorker worker = new SimpleJMSWorker
>+ (configurationContext, this, message);
>
> // do we allow multi-threaded workers?
> if (doThreads) {
>Index: modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java
>===================================================================
>--- modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java
>(revision 413826)
>+++ modules/core/src/org/apache/axis2/transport/jms/SimpleJMSWorker.java
>(working copy)
>@@ -41,6 +41,8 @@
> import org.apache.commons.logging.LogFactory;
>
> import javax.jms.BytesMessage;
>+import javax.jms.Message;
>+import javax.jms.TextMessage;
> import javax.xml.namespace.QName;
> import javax.xml.parsers.FactoryConfigurationError;
> import javax.xml.stream.XMLInputFactory;
>@@ -59,10 +61,10 @@
> private static final Log log = LogFactory.getLog(SimpleJMSWorker.class);
> private ConfigurationContext configurationContext;
> SimpleJMSListener listener;
>- BytesMessage message;
>+ Message message;
>
> public SimpleJMSWorker(ConfigurationContext configurationContext,
> SimpleJMSListener listener,
>- BytesMessage message) {
>+ Message message) {
> this.listener = listener;
> this.message = message;
> this.configurationContext = configurationContext;
>@@ -179,20 +181,38 @@
> * This is where the incoming message is processed.
> */
> public void run() {
>- InputStream in ;
>+ InputStream in = null;
>
> try {
>-
> // get the incoming msg content into a byte array
>- byte[] buffer = new byte[8 * 1024];
>- ByteArrayOutputStream out = new ByteArrayOutputStream();
>+ if (message instanceof BytesMessage) {
>+ byte[] buffer = new byte[8 * 1024];
>+ ByteArrayOutputStream out = new ByteArrayOutputStream();
>
>- for (int bytesRead = message.readBytes(buffer); bytesRead != -1;
>- bytesRead = message.readBytes(buffer)) {
>- out.write(buffer, 0, bytesRead);
>+ BytesMessage byteMsg = (BytesMessage) message;
>+ for (int bytesRead = byteMsg.readBytes(buffer); bytesRead !=
>-1;
>+ bytesRead = byteMsg.readBytes(buffer)) {
>+ out.write(buffer, 0, bytesRead);
>+ }
>+ in = new ByteArrayInputStream(out.toByteArray());
>+
>+ } else if (message instanceof TextMessage) {
>+ TextMessage txtMsg = (TextMessage) message;
>+ String contentType = message.getStringProperty("contentType");
>+ if (contentType != null) {
>+ String charSetEnc =
>+ TransportUtils.getCharSetEncoding(contentType);
>+ in = new
>ByteArrayInputStream(txtMsg.getText().getBytes(charSetEnc));
>+ } else {
>+ in = new
>ByteArrayInputStream(txtMsg.getText().getBytes());
>+ }
>+
>+ } else {
>+ log.error("Unsupported JMS Message type : " + message);
>+ log.error(Messages.getMessage("exception00"));
> }
>
>- in = new ByteArrayInputStream(out.toByteArray());
>+
> } catch (Exception e) {
> log.error(Messages.getMessage("exception00"), e);
> e.printStackTrace();
>
>
>
>
>------------------------------------------------------------------------
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
--
Thanks,
Deepal
................................................................
~Future is Open~
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]