Author: asankha
Date: Mon Apr 23 01:28:22 2007
New Revision: 531376
URL: http://svn.apache.org/viewvc?view=rev&rev=531376
Log:
fix sample # 5
Enhance error message for NIO level transport errors
Fix property mediator to properly send back response soap messages when marked
as a RESPONSE on the synapse MC
Modified:
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/core/axis2/TimeoutHandler.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_5.xml
webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html
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=531376&r1=531375&r2=531376
==============================================================================
---
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
Mon Apr 23 01:28:22 2007
@@ -111,7 +111,7 @@
}
// set an error code to the message context, so that error
sequences can filter
// using that property to determine the cause of error
- synapseOutMsgCtx.setProperty("error-code",
Constants.SENDING_FAULT);
+ synapseOutMsgCtx.setProperty(Constants.ERROR_CODE,
Constants.SENDING_FAULT);
((FaultHandler)
faultStack.pop()).handleFault(synapseOutMsgCtx, e);
}
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/TimeoutHandler.java
Mon Apr 23 01:28:22 2007
@@ -81,7 +81,7 @@
// add an error code to the message context, so
that error sequences
// can identify the cause of error
- msgContext.setProperty("error-code",
Constants.TIME_OUT);
+ msgContext.setProperty(Constants.ERROR_CODE,
Constants.TIME_OUT);
Stack faultStack = msgContext.getFaultStack();
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/PropertyMediator.java
Mon Apr 23 01:28:22 2007
@@ -83,6 +83,14 @@
if (scope == null) {
//Setting property into the Synapse Context
smc.setProperty(name, resultValue);
+
+ // do not commit response by default in the server process
+ if (Constants.RESPONSE.equals(name)) {
+ org.apache.axis2.context.MessageContext axisMsgCtx =
+ ((Axis2MessageContext) smc).getAxis2MessageContext();
+ axisMsgCtx.getOperationContext().setProperty(
+ org.apache.axis2.Constants.RESPONSE_WRITTEN,
"SKIP");
+ }
} else if (Constants.SCOPE_DEFAULT.equals(scope)) {
//Setting property into the Synapse Context
smc.setProperty(name, resultValue);
Modified:
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
---
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
(original)
+++
webservices/synapse/trunk/java/modules/nhttp/src/org/apache/axis2/transport/nhttp/HttpCoreNIOSender.java
Mon Apr 23 01:28:22 2007
@@ -33,6 +33,7 @@
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
+import org.apache.axis2.util.MessageContextBuilder;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
@@ -405,8 +406,12 @@
// this fault is NOT caused by the endpoint while
processing. so we have to
// inform that this is a sending error (e.g. endpoint
failure) and handle it
// differently at the message receiver.
- MessageContext nioFaultMessageContext = new AxisEngine
-
(mc.getConfigurationContext()).createFaultMessageContext(mc,
request.getException());
+
+ Exception exception = request.getException();
+ MessageContext nioFaultMessageContext =
+ MessageContextBuilder.createFaultMessageContext(
+ /** this is not a mistake I do NOT want
getMessage()*/
+ mc, new AxisFault(exception.toString(),
exception));
nioFaultMessageContext.setProperty("sending_fault",
Boolean.TRUE);
mr.receive(nioFaultMessageContext);
Modified:
webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
--- webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
(original)
+++ webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_4.xml
Mon Apr 23 01:28:22 2007
@@ -35,10 +35,6 @@
<property name="message"
expression="get-property('ERROR_MESSAGE')"/>
<!--<property name="detail"
expression="get-property('ERROR_DETAIL')"/>-->
</log>
- <makefault>
- <code value="tns:Receiver"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
- <reason expression="get-property('ERROR_MESSAGE')"/>
- </makefault>
<drop/>
</sequence>
Modified:
webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_5.xml
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_5.xml?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
--- webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_5.xml
(original)
+++ webservices/synapse/trunk/java/repository/conf/sample/synapse_sample_5.xml
Mon Apr 23 01:28:22 2007
@@ -1,9 +1,7 @@
<!-- introduction to error handling -->
<definitions xmlns="http://ws.apache.org/ns/synapse">
- <!-- the default fault handling sequence used by Synapse - named 'fault'
-->
<sequence name="myFaultHandler">
- <!-- create a custom fault message -->
<makefault>
<code value="tns:Receiver"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
<reason expression="get-property('ERROR_MESSAGE')"/>
@@ -14,31 +12,19 @@
<send/>
</sequence>
- <!-- default message handling sequence used by Synapse - named 'main' -->
<sequence name="main" onError="myFaultHandler">
<in>
<switch source="//m0:getQuote/m0:request/m0:symbol"
xmlns:m0="http://services.samples/xsd">
- <case regex="IBM">
- <send>
- <endpoint name="simple">
- <address
uri="http://localhost:9000/soap/SimpleStockQuoteService"/>
- </endpoint>
- </send>
- </case>
<case regex="MSFT">
- <send>
- <endpoint name="bogusHost">
+ <send><endpoint name="bogusHost">
<address
uri="http://bogus:9000/soap/NonExistentStockQuoteService"/>
- </endpoint>
- </send>
+ </endpoint></send>
</case>
<case regex="SUN">
- <send>
- <endpoint name="bogusPort">
+ <send><endpoint name="bogusPort">
<address
uri="http://localhost:9009/soap/NonExistentStockQuoteService"/>
- </endpoint>
- </send>
+ </endpoint></send>
</case>
</switch>
<drop/>
Modified: webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html?view=diff&rev=531376&r1=531375&r2=531376
==============================================================================
--- webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html
(original)
+++ webservices/synapse/trunk/java/src/site/resources/Synapse_Samples.html Mon
Apr 23 01:28:22 2007
@@ -138,7 +138,7 @@
<ol>
<li>Smart Client mode</li>
<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/
- </pre>
+ </pre>
<li>Using Synapse as a HTTP Proxy</li>
<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dprxurl=http://localhost:8080/</pre>
<pre></pre>
@@ -316,8 +316,7 @@
<send/>
</out>
</sequence>
-</definitions>
- </pre>
+</definitions></pre>
<p><strong>Objective: Illustrates local registry entry definitions, reusable
endpoints and sequences</strong></p>
@@ -427,8 +426,7 @@
Synapse cannot find an error handler, it looks up for a sequence named
'fault'. Thus the 'fault' sequence can be seen executing, and writing the
generic error message into the logs. </p>
-<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT
-</pre>
+<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
<pre>[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
[HttpServerWorker-1] ERROR IndirectEndpoint - Reference to non-existent
endpoint for key : bogus
[HttpServerWorker-1] DEBUG MediatorFaultHandler - MediatorFaultHandler ::
handleFault
@@ -440,8 +438,7 @@
invoked, and it specifies 'sunErrorHandler' as its error handler. Hence when
the send fails, now you could see the proper error handler invocation and the
custom error message as follows:</p>
-<pre>
-ant stockquote -Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=SUN
+<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=SUN
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator
<sunSequence> :: mediate()
[HttpServerWorker-1] DEBUG SequenceMediator - Setting the onError handler for
the sequence
@@ -452,10 +449,71 @@
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator
<sunErrorHandler> :: mediate()
[HttpServerWorker-1] DEBUG AbstractListMediator - Implicit Sequence
<SequenceMediator> :: mediate()
[HttpServerWorker-1] DEBUG LogMediator - Log mediator :: mediate()
-[HttpServerWorker-1] INFO LogMediator - text = An unexpected error occured
for stock SUN, message = Reference to non-existent endpoint for key : sunPort
-</pre>
+[HttpServerWorker-1] INFO LogMediator - text = An unexpected error occured
for stock SUN, message = Reference to non-existent endpoint for key :
sunPort</pre>
+
+<h2>Sample 5:</h2>
+<pre><definitions xmlns="http://ws.apache.org/ns/synapse">
+
+ <sequence name="myFaultHandler">
+ <makefault>
+ <code value="tns:Receiver"
xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
+ <reason expression="get-property('ERROR_MESSAGE')"/>
+ </makefault>
+
+ <property name="RESPONSE" value="true"/>
+ <header name="To" expression="get-property('ReplyTo')"/>
+ <send/>
+ </sequence>
+
+ <sequence name="main" onError="myFaultHandler">
+ <in>
+ <switch source="//m0:getQuote/m0:request/m0:symbol"
+ xmlns:m0="http://services.samples/xsd">
+ <case regex="MSFT">
+ <send><endpoint name="bogusHost">
+ <address
uri="http://bogus:9000/soap/NonExistentStockQuoteService"/>
+ </endpoint></send>
+ </case>
+ <case regex="SUN">
+ <send><endpoint name="bogusPort">
+ <address
uri="http://localhost:9009/soap/NonExistentStockQuoteService"/>
+ </endpoint></send>
+ </case>
+ </switch>
+ <drop/>
+ </in>
+
+ <out>
+ <send/>
+ </out>
+ </sequence>
+
+</definitions></pre>
+
+<p><strong>Objective: Makefault mediator and sending back error responses
+</strong></p>
+
+<p><strong>Pre-Requisites:</strong><br>
+Start the Synapse configuration numbered 4: i.e. synapse -sample 5<br>
+Start the Axis2 server and deploy the SimpleStockQuoteService if not already
+done</p>
+
+<p>When the MSFT stock quote is requested, an unknown host exception would be
+caused, and a connection refuxed exception would be caused for the SUN stock.
+This information is captured and returned back to the original client as a
+SOAP fault in this example.</p>
+<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=MSFT</pre>
+
+<p>Returns:</p>
+<pre><soapenv:Fault
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode><faultstring>java.net.UnknownHostException:
bogus</faultstring><detail /></soapenv:Fault></pre>
+
+<p>And</p>
+<pre>ant stockquote
-Daddurl=http://localhost:9000/soap/SimpleStockQuoteService
-Dtrpurl=http://localhost:8080/ -Dsymbol=SUN</pre>
+
+<p>Returns:</p>
+<pre><soapenv:Fault
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><faultcode>soapenv:Client</faultcode><faultstring>java.net.ConnectException:
Connection refused</faultstring><detail
/></soapenv:Fault></pre>
-<h2><a name="Sample6">Sample 5:</a></h2>
+<h2><a name="Sample6">Sample 6:</a></h2>
<pre><synapse xmlns="http://ws.apache.org/ns/synapse">
<!-- illustration of various mediators : header, in and out mediators
-->
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]