You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by ru...@apache.org on 2007/03/28 12:42:23 UTC
svn commit: r523268 - in /webservices/synapse/trunk/java/modules:
core/src/main/java/org/apache/synapse/core/axis2/
core/src/main/java/org/apache/synapse/mediators/base/
extensions/src/main/java/org/apache/synapse/mediators/transform/
Author: ruwan
Date: Wed Mar 28 03:42:00 2007
New Revision: 523268
URL: http://svn.apache.org/viewvc?view=rev&rev=523268
Log:
Fixing SYNAPSE-85
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyServiceMessageReceiver.java Wed Mar 28 03:42:00 2007
@@ -76,7 +76,7 @@
Mediator faultSequence = synCtx.getSequence(proxy.getTargetFaultSequence());
if (faultSequence != null) {
- log.debug("setting the fault-sequence of the " +
+ log.debug("Setting the fault-sequence of the " +
"proxy service to MessageContext");
synCtx.pushFaultHandler(new MediatorFaultHandler(
synCtx.getSequence(proxy.getTargetFaultSequence())));
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/SynapseCallbackReceiver.java Wed Mar 28 03:42:00 2007
@@ -28,6 +28,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.Constants;
import org.apache.synapse.FaultHandler;
+import org.apache.synapse.SynapseException;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.axiom.soap.SOAPFault;
@@ -50,7 +51,7 @@
public void receive(MessageContext messageCtx) throws AxisFault {
if (messageCtx.getOptions() != null && messageCtx.getOptions().getRelatesTo() != null) {
- String messageID = messageCtx.getOptions().getRelatesTo().getValue();
+ String messageID = messageCtx.getOptions().getRelatesTo().getValue();
Callback callback = (Callback) callbackStore.remove(messageID);
RelatesTo[] relates = messageCtx.getRelationships();
@@ -66,7 +67,7 @@
} else {
// TODO invoke a generic synapse error handler for this message
log.warn("Synapse received a response for the request with message Id : " +
- messageID + " But a callback has not been registered to process this response");
+ messageID + " But a callback has not been registered to process this response");
}
} else {
@@ -78,13 +79,13 @@
/**
* Handle the response or error (during a failed send) message received for an outgoing request
*
- * @param response the Axis2 MessageContext that has been received and has to be handled
+ * @param response the Axis2 MessageContext that has been received and has to be handled
* @param synapseOutMsgCtx the corresponding (outgoing) Synapse MessageContext for the above
- * Axis2 MC, that holds Synapse specific information such as the error handler stack and
- * local properties etc.
+ * Axis2 MC, that holds Synapse specific information such as the error handler stack and
+ * local properties etc.
*/
private void handleMessage(MessageContext response,
- org.apache.synapse.MessageContext synapseOutMsgCtx) {
+ org.apache.synapse.MessageContext synapseOutMsgCtx) {
Object o = response.getProperty("sending_fault");
if (o != null && Boolean.TRUE.equals(o)) {
@@ -97,14 +98,14 @@
SOAPFault fault = response.getEnvelope().getBody().getFault();
Exception e = fault.getException();
if (e == null) {
- e = new Exception(fault.toString());
+ e = new Exception(fault.toString());
}
- ((FaultHandler) faultStack.pop()).handleFault(synapseOutMsgCtx,e);
+ ((FaultHandler) faultStack.pop()).handleFault(synapseOutMsgCtx, e);
}
} else {
-
+
// there can always be only one instance of an Endpoint in the faultStack of a message
// if the send was successful, so remove it before we proceed any further
Stack faultStack = synapseOutMsgCtx.getFaultStack();
@@ -115,14 +116,14 @@
if (log.isDebugEnabled()) {
log.debug("Synapse received an asynchronous response message");
log.debug("Received To: " +
- (response.getTo() != null ? response.getTo().getAddress() : "null"));
+ (response.getTo() != null ? response.getTo().getAddress() : "null"));
log.debug("SOAPAction: " +
- (response.getSoapAction() != null ? response.getSoapAction() : "null"));
+ (response.getSoapAction() != null ? response.getSoapAction() : "null"));
log.debug("Body : \n" + response.getEnvelope());
}
MessageContext axisOutMsgCtx =
- ((Axis2MessageContext)synapseOutMsgCtx).getAxis2MessageContext();
+ ((Axis2MessageContext) synapseOutMsgCtx).getAxis2MessageContext();
response.setOperationContext(axisOutMsgCtx.getOperationContext());
response.getAxisMessage().setParent(
@@ -133,9 +134,9 @@
response.setServerSide(true);
response.setProperty(Constants.ISRESPONSE_PROPERTY, Boolean.TRUE);
response.setProperty(MessageContext.TRANSPORT_OUT,
- axisOutMsgCtx.getProperty(MessageContext.TRANSPORT_OUT));
+ axisOutMsgCtx.getProperty(MessageContext.TRANSPORT_OUT));
response.setProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO,
- axisOutMsgCtx.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
+ axisOutMsgCtx.getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO));
response.setTransportIn(axisOutMsgCtx.getTransportIn());
response.setTransportOut(axisOutMsgCtx.getTransportOut());
@@ -143,15 +144,15 @@
response.setDoingREST(axisOutMsgCtx.isDoingREST());
if (axisOutMsgCtx.getMessageID() != null) {
response.setRelationships(
- new RelatesTo[] {new RelatesTo(axisOutMsgCtx.getMessageID())});
+ new RelatesTo[]{new RelatesTo(axisOutMsgCtx.getMessageID())});
}
// create the synapse message context for the response
Axis2MessageContext synapseInMessageContext =
- new Axis2MessageContext(
- response,
- synapseOutMsgCtx.getConfiguration(),
- synapseOutMsgCtx.getEnvironment());
+ new Axis2MessageContext(
+ response,
+ synapseOutMsgCtx.getConfiguration(),
+ synapseOutMsgCtx.getEnvironment());
synapseInMessageContext.setResponse(true);
synapseInMessageContext.setTo(null);
@@ -162,12 +163,21 @@
while (iter.hasNext()) {
Object key = iter.next();
synapseInMessageContext.setProperty(
- (String) key, synapseOutMsgCtx.getProperty((String) key));
+ (String) key, synapseOutMsgCtx.getProperty((String) key));
}
// send the response message through the synapse mediation flow
- synapseOutMsgCtx.getEnvironment().
- injectMessage(synapseInMessageContext);
+ try {
+ synapseOutMsgCtx.getEnvironment().injectMessage(synapseInMessageContext);
+ } catch (SynapseException syne) {
+ if (!synapseInMessageContext.getFaultStack().isEmpty()) {
+ ((FaultHandler) synapseInMessageContext
+ .getFaultStack().pop()).handleFault(synapseInMessageContext, syne);
+ } else {
+ log.error("Synapse encountered an exception, " +
+ "No error handlers found - [Message Dropped]\n" + syne.getMessage());
+ }
+ }
}
}
@@ -176,13 +186,13 @@
int insertPos = 0;
RelatesTo[] newRelates = new RelatesTo[relates.length];
- for (int i=0; i<relates.length; i++) {
+ for (int i = 0; i < relates.length; i++) {
RelatesTo current = relates[i];
boolean found = false;
- for (int j=0; j<newRelates.length && j<insertPos; j++) {
+ for (int j = 0; j < newRelates.length && j < insertPos; j++) {
if (newRelates[j].equals(current) ||
- newRelates[j].getValue().equals(current.getValue())) {
+ newRelates[j].getValue().equals(current.getValue())) {
found = true;
break;
}
Modified: webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java Wed Mar 28 03:42:00 2007
@@ -69,20 +69,25 @@
* @return as per standard mediator result
*/
public boolean mediate(MessageContext synCtx) {
+
log.debug("Sequence mediator <" + (name == null ? "anonymous" : name) + "> :: mediate()");
+
boolean shouldTrace = shouldTrace(synCtx.getTracingState());
if (key == null) {
// Setting Required property to collect the sequence statistics
- boolean isStatisticsEnable = (org.apache.synapse.Constants.STATISTICS_ON == statisticsEnable);
+ boolean isStatisticsEnable
+ = (org.apache.synapse.Constants.STATISTICS_ON == statisticsEnable);
if (isStatisticsEnable) {
- StatisticsStack sequenceStack = (StatisticsStack) synCtx.getProperty(Constants.SEQUENCE_STATISTICS_STACK);
+ StatisticsStack sequenceStack
+ = (StatisticsStack) synCtx.getProperty(Constants.SEQUENCE_STATISTICS_STACK);
if (sequenceStack == null) {
sequenceStack = new SequenceStatisticsStack();
synCtx.setProperty(Constants.SEQUENCE_STATISTICS_STACK, sequenceStack);
}
String seqName = (name == null ? "anonymous" : name);
boolean isFault =synCtx.getEnvelope().getBody().hasFault();
- sequenceStack.put(seqName, System.currentTimeMillis(), !synCtx.isResponse(), isStatisticsEnable,isFault);
+ sequenceStack.put(seqName,System.currentTimeMillis(),
+ !synCtx.isResponse(), isStatisticsEnable,isFault);
}
try {
if (shouldTrace) {
@@ -91,6 +96,7 @@
// push the errorHandler sequence into the current message as the fault handler
if (errorHandler != null) {
+ log.debug("Setting the onError handler for the sequence");
synCtx.pushFaultHandler(
new MediatorFaultHandler(synCtx.getSequence(errorHandler)));
}
Modified: webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java?view=diff&rev=523268&r1=523267&r2=523268
==============================================================================
--- webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java (original)
+++ webservices/synapse/trunk/java/modules/extensions/src/main/java/org/apache/synapse/mediators/transform/XSLTMediator.java Wed Mar 28 03:42:00 2007
@@ -59,26 +59,35 @@
private static final Log log = LogFactory.getLog(XSLTMediator.class);
private static final Log trace = LogFactory.getLog(Constants.TRACE_LOGGER);
- /** The property key/name which refers to the XSLT to be used for the transformation */
+ /**
+ * The property key/name which refers to the XSLT to be used for the transformation
+ */
private String xsltKey = null;
- /** The (optional) XPath expression which yeilds the source element for a transformation */
+ /**
+ * The (optional) XPath expression which yeilds the source element for a transformation
+ */
private AXIOMXPath source = null;
- /** Any parameters which should be passed into the XSLT transformation */
+ /**
+ * Any parameters which should be passed into the XSLT transformation
+ */
private List properties = new ArrayList();
/**
* The Transformer instance used to perform XSLT transformations. This is not thread-safe
+ *
* @see javax.xml.transform.Transformer
*/
private Transformer transformer = null;
- /** Lock used to ensure thread-safe creation and use of the above Transformer */
+ /**
+ * Lock used to ensure thread-safe creation and use of the above Transformer
+ */
private final Object transformerLock = new Object();
public static final String DEFAULT_XPATH = "//s11:Envelope/s11:Body/child::*[position()=1] | " +
- "//s12:Envelope/s12:Body/child::*[position()=1]";
+ "//s12:Envelope/s12:Body/child::*[position()=1]";
public XSLTMediator() {
// create the default XPath
@@ -94,24 +103,30 @@
/**
* Transforms this message (or its element specified as the source) using the
* given XSLT transformation
+ *
* @param synCtx the current message where the transformation will apply
* @return true always
*/
public boolean mediate(MessageContext synCtx) {
- log.debug("XSLT mediator mediate()");
- boolean shouldTrace = shouldTrace(synCtx.getTracingState());
- if (shouldTrace) {
- trace.trace("Start : XSLT mediator");
- }
- log.debug("Performing XSLT transformation against property with key : " + xsltKey);
- performXLST(synCtx,shouldTrace);
- if (shouldTrace) {
- trace.trace("Start : XSLT mediator");
+ try {
+ log.debug("XSLT mediator mediate()");
+ boolean shouldTrace = shouldTrace(synCtx.getTracingState());
+ if (shouldTrace) {
+ trace.trace("Start : XSLT mediator");
+ }
+ log.debug("Performing XSLT transformation against property with key : " + xsltKey);
+ performXLST(synCtx, shouldTrace);
+ if (shouldTrace) {
+ trace.trace("Start : XSLT mediator");
+ }
+ return true;
+ } catch (Exception e) {
+ handleException("Unable to do the transformation");
}
- return true;
+ return false;
}
- private void performXLST(MessageContext msgCtx,boolean shouldTrace) {
+ private void performXLST(MessageContext msgCtx, boolean shouldTrace) {
Source transformSrc = null;
ByteArrayOutputStream baosForTarget = new ByteArrayOutputStream();
@@ -131,7 +146,7 @@
// create a byte array output stream and serialize the source node into it
ByteArrayOutputStream baosForSource = new ByteArrayOutputStream();
XMLStreamWriter xsWriterForSource = XMLOutputFactory.newInstance().
- createXMLStreamWriter(baosForSource);
+ createXMLStreamWriter(baosForSource);
sourceNode.serialize(xsWriterForSource);
transformSrc = new StreamSource(new ByteArrayInputStream(baosForSource.toByteArray()));
@@ -146,27 +161,27 @@
// if the xsltKey refers to a dynamic property
if (dp != null && dp.isDynamic()) {
if (!dp.isCached() || dp.isExpired()) {
- synchronized(transformerLock) {
+ synchronized (transformerLock) {
try {
transformer = TransformerFactory.newInstance().
- newTransformer(Util.getStreamSource(
- msgCtx.getConfiguration().getEntry(xsltKey)
- ));
+ newTransformer(Util.getStreamSource(
+ msgCtx.getConfiguration().getEntry(xsltKey)
+ ));
} catch (TransformerConfigurationException e) {
handleException("Error creating XSLT transformer using : " + xsltKey, e);
}
}
}
- // if the property is not a DynamicProperty, we will create a transformer only once
+ // if the property is not a DynamicProperty, we will create a transformer only once
} else {
if (transformer == null) {
- synchronized(transformerLock) {
+ synchronized (transformerLock) {
try {
transformer = TransformerFactory.newInstance().
- newTransformer(
- Util.getStreamSource(
- msgCtx.getConfiguration().getEntry(xsltKey)));
+ newTransformer(
+ Util.getStreamSource(
+ msgCtx.getConfiguration().getEntry(xsltKey)));
} catch (TransformerConfigurationException e) {
handleException("Error creating XSLT transformer using : " + xsltKey, e);
}
@@ -179,7 +194,7 @@
transformer.transform(transformSrc, transformTgt);
StAXOMBuilder builder = new StAXOMBuilder(
- new ByteArrayInputStream(baosForTarget.toByteArray()));
+ new ByteArrayInputStream(baosForTarget.toByteArray()));
OMElement result = builder.getDocumentElement();
if (shouldTrace) {
trace.trace("Transformation result : " + result.toString());
@@ -189,7 +204,7 @@
}
// replace the sourceNode with the result.
- sourceNode.insertSiblingAfter( result );
+ sourceNode.insertSiblingAfter(result);
sourceNode.detach();
} catch (TransformerException e) {
@@ -217,7 +232,7 @@
return (OMNode) ((List) o).get(0); // Always fetches *only* the first
} else {
handleException("The evaluation of the XPath expression "
- + source + " must result in an OMNode");
+ + source + " must result in an OMNode");
}
} catch (JaxenException e) {
handleException("Error evaluating XPath " + source + " on message");
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org