Author: veithen
Date: Sun Oct 26 16:22:44 2008
New Revision: 708060
URL: http://svn.apache.org/viewvc?rev=708060&view=rev
Log:
SYNAPSE-304: Modified the JMS transport to use message builders instead of
BaseUtils#setSOAPEnvelope.
Modified:
webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/format/TextMessageBuilderAdapter.java
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
webservices/commons/trunk/modules/transport/modules/tests/src/test/java/org/apache/axis2/transport/jms/JMSTransportTest.java
webservices/commons/trunk/modules/transport/src/site/xdoc/jms.xml
Modified:
webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/format/TextMessageBuilderAdapter.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/format/TextMessageBuilderAdapter.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/format/TextMessageBuilderAdapter.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/base/src/main/java/org/apache/axis2/format/TextMessageBuilderAdapter.java
Sun Oct 26 16:22:44 2008
@@ -23,8 +23,12 @@
import java.io.Reader;
import java.io.StringReader;
+import javax.mail.internet.ContentType;
+import javax.mail.internet.ParseException;
+
import org.apache.axiom.om.OMElement;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.builder.Builder;
import org.apache.axis2.context.MessageContext;
@@ -51,10 +55,19 @@
public OMElement processDocument(Reader reader, String contentType,
MessageContext messageContext) throws
AxisFault {
- // TODO: check that using the default charset encoding and leaving the
content type unaltered is a valid strategy
- return processDocument(
- new ReaderInputStream(reader,
MessageContext.DEFAULT_CHAR_SET_ENCODING),
- contentType, messageContext);
+ String charset;
+ try {
+ ContentType ct = new ContentType(contentType);
+ charset = ct.getParameter("charset");
+ } catch (ParseException ex) {
+ charset = null;
+ }
+ if (charset == null) {
+ charset = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+ }
+
messageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
charset);
+ return processDocument(new ReaderInputStream(reader, charset),
contentType,
+ messageContext);
}
public OMElement processDocument(String content, String contentType,
Modified:
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSConstants.java
Sun Oct 26 16:22:44 2008
@@ -81,7 +81,10 @@
* The Parameter name indicating the JMS connection factory JNDI name
*/
public static final String CONFAC_JNDI_NAME_PARAM =
"transport.jms.ConnectionFactoryJNDIName";
-
+ /**
+ * The parameter indicating the expected content type for messages
received by the service.
+ */
+ public static final String CONTENT_TYPE_PARAM =
"transport.jms.contentType";
//------------ message context / transport header properties and client
options ------------
/**
Modified:
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSMessageReceiver.java
Sun Oct 26 16:22:44 2008
@@ -15,7 +15,6 @@
*/
package org.apache.axis2.transport.jms;
-import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.transport.base.threads.WorkerPool;
import org.apache.axis2.transport.base.BaseUtils;
@@ -203,11 +202,16 @@
}
}
- String contentType =
- JMSUtils.getInstace().getProperty(message,
BaseConstants.CONTENT_TYPE);
+ String contentType = null;
+ if (service != null) {
+ contentType =
(String)service.getParameterValue(JMSConstants.CONTENT_TYPE_PARAM);
+ }
+ if (contentType == null) {
+ contentType
+ = JMSUtils.getInstace().getProperty(message,
BaseConstants.CONTENT_TYPE);
+ }
- // set the message payload to the message context
- JMSUtils.getInstace().setSOAPEnvelope(message, msgContext,
contentType);
+ JMSUtils.setSOAPEnvelope(message, msgContext, contentType);
jmsListener.handleIncomingMessage(
msgContext,
Modified:
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSSender.java
Sun Oct 26 16:22:44 2008
@@ -520,7 +520,11 @@
String contentType = JMSUtils.getInstace().getProperty(message,
BaseConstants.CONTENT_TYPE);
- JMSUtils.getInstace().setSOAPEnvelope(message, responseMsgCtx,
contentType);
+ try {
+ JMSUtils.setSOAPEnvelope(message, responseMsgCtx, contentType);
+ } catch (JMSException ex) {
+ throw AxisFault.makeFault(ex);
+ }
// responseMsgCtx.setServerSide(true);
handleIncomingMessage(
Modified:
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/jms/src/main/java/org/apache/axis2/transport/jms/JMSUtils.java
Sun Oct 26 16:22:44 2008
@@ -16,22 +16,34 @@
package org.apache.axis2.transport.jms;
import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
+import org.apache.axis2.builder.Builder;
import org.apache.axis2.builder.BuilderUtil;
+import org.apache.axis2.builder.SOAPBuilder;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.description.ParameterIncludeImpl;
+import org.apache.axis2.format.TextMessageBuilder;
+import org.apache.axis2.format.TextMessageBuilderAdapter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.axis2.transport.TransportUtils;
import org.apache.axis2.transport.base.BaseConstants;
import org.apache.axis2.transport.base.BaseUtils;
import javax.jms.*;
import javax.jms.Queue;
+import javax.mail.internet.ContentType;
+import javax.mail.internet.ParseException;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.Reference;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.stream.XMLStreamException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -296,6 +308,64 @@
}
}
+ public static void setSOAPEnvelope(Message message, MessageContext
msgContext, String contentType) throws AxisFault, JMSException {
+ if (message instanceof BytesMessage) {
+ if (contentType == null) {
+ log.debug("No content type specified; assuming
application/octet-stream.");
+ contentType = "application/octet-stream";
+ } else {
+ // Extract the charset encoding from the content type and
+ // set the CHARACTER_SET_ENCODING property as e.g. SOAPBuilder
relies on this.
+ String charSetEnc = null;
+ try {
+ if (contentType != null) {
+ charSetEnc = new
ContentType(contentType).getParameter("charset");
+ }
+ } catch (ParseException ex) {
+ // ignore
+ }
+
msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
charSetEnc);
+ }
+
+ SOAPEnvelope envelope;
+ try {
+ envelope = TransportUtils.createSOAPMessage(msgContext,
+ new BytesMessageInputStream((BytesMessage)message),
contentType);
+ } catch (XMLStreamException ex) {
+ handleException("Error parsing XML", ex);
+ return; // Make compiler happy
+ }
+ msgContext.setEnvelope(envelope);
+ } else if (message instanceof TextMessage) {
+ String type;
+ if (contentType == null) {
+ log.debug("No content type specified; assuming text/plain.");
+ type = contentType = "text/plain";
+ } else {
+ int index = contentType.indexOf(';');
+ if (index > 0) {
+ type = contentType.substring(0, index);
+ } else {
+ type = contentType;
+ }
+ }
+ Builder builder = BuilderUtil.getBuilderFromSelector(type,
msgContext);
+ if (builder == null) {
+ builder = new SOAPBuilder();
+ }
+ TextMessageBuilder textMessageBuilder;
+ if (builder instanceof TextMessageBuilder) {
+ textMessageBuilder = (TextMessageBuilder)builder;
+ } else {
+ textMessageBuilder = new TextMessageBuilderAdapter(builder);
+ }
+ String content = ((TextMessage)message).getText();
+ OMElement documentElement
+ = textMessageBuilder.processDocument(content, contentType,
msgContext);
+
msgContext.setEnvelope(TransportUtils.createSOAPEnvelope(documentElement));
+ }
+ }
+
/**
* Get an InputStream to the JMS message payload
*
Modified:
webservices/commons/trunk/modules/transport/modules/tests/src/test/java/org/apache/axis2/transport/jms/JMSTransportTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/tests/src/test/java/org/apache/axis2/transport/jms/JMSTransportTest.java?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/tests/src/test/java/org/apache/axis2/transport/jms/JMSTransportTest.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/tests/src/test/java/org/apache/axis2/transport/jms/JMSTransportTest.java
Sun Oct 26 16:22:44 2008
@@ -48,8 +48,6 @@
"(&(test=AsyncXML)(messageType=SOAP11)(data=ASCII))" +
"(&(test=EchoXML)(messageType=POX)(data=ASCII))))");
- // SYNAPSE-304:
-
suite.addExclude("(&(test=AsyncTextPlain)(client=jms)(jmsType=bytes))");
// SYNAPSE-436:
suite.addExclude("(&(test=EchoXML)(replyDestType=topic)(endpoint=axis))");
Modified: webservices/commons/trunk/modules/transport/src/site/xdoc/jms.xml
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/src/site/xdoc/jms.xml?rev=708060&r1=708059&r2=708060&view=diff
==============================================================================
--- webservices/commons/trunk/modules/transport/src/site/xdoc/jms.xml (original)
+++ webservices/commons/trunk/modules/transport/src/site/xdoc/jms.xml Sun Oct
26 16:22:44 2008
@@ -52,72 +52,44 @@
<section name="Service configuration">
<table class="bodyTable">
<tr>
- <th>
- Parameter
- </th>
- <th>
- Require
- </th>
- <th>
- Description
- </th>
- </tr>
- <tr>
- <td>
- transport.jms.ConnectionFactory
- </td>
- <td>
- Optional
- </td>
- <td>
- The JMS connection factory definition (from axis2.xml) to
be used to
- listen for messages for this service
- </td>
- </tr>
- <tr>
- <td>
- transport.jms.Destination
- </td>
- <td>
- Optional
- </td>
- <td>
- The JMS destination name (Defaults to a Queue with the
service name)
- </td>
- </tr>
- <tr>
- <td>
- transport.jms.DestinationType
- </td>
- <td>
- Optional
- </td>
- <td>
- The JMS destination type. Accept values 'queue' or 'topic'
(default:
- queue)
- </td>
- </tr>
- <tr>
- <td>
- transport.jms.ReplyDestination
- </td>
- <td>
- Optional
- </td>
- <td>
- The destination where a reply will be posted
- </td>
- </tr>
- <tr>
- <td>
- transport.jms.Wrapper
- </td>
- <td>
- Optional
- </td>
- <td>
- The wrapper element for the JMS message
- </td>
+ <th>Parameter</th>
+ <th>Require</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>transport.jms.ConnectionFactory</td>
+ <td>Optional</td>
+ <td>The JMS connection factory definition (from axis2.xml)
to be used to
+ listen for messages for this service.</td>
+ </tr>
+ <tr>
+ <td>transport.jms.Destination</td>
+ <td>Optional</td>
+ <td>The JMS destination name (Defaults to a Queue with the
service name).</td>
+ </tr>
+ <tr>
+ <td>transport.jms.DestinationType</td>
+ <td>Optional</td>
+ <td>The JMS destination type. Accept values 'queue' or
'topic' (default:
+ queue).</td>
+ </tr>
+ <tr>
+ <td>transport.jms.ReplyDestination</td>
+ <td>Optional</td>
+ <td>The destination where a reply will be posted.</td>
+ </tr>
+ <tr>
+ <td>transport.jms.contentType</td>
+ <td>Optional</td>
+ <td>The expected content type of the received messages.
This parameter is
+ only useful if the messages don't have a Content-Type
property. If this parameter
+ is not specified and the messages don't have a
Content-Type, they will be processed
+ as application/octet-stream or text/plain, depending on
the JMS message type.</td>
+ </tr>
+ <tr>
+ <td>transport.jms.Wrapper</td>
+ <td>Optional</td>
+ <td>The wrapper element for the JMS message.</td>
</tr>
</table>
<p>Sample services.xml:</p>