Hi Nariman,

I have tested the scenario according to your specification.
In the error sequence SOAP body is not present in ESB 4.9.0.
This is a bug in ESB 4.9.0. We will raise a public Jira for this and fix it
in the next release.


Thanks,
Madhuranga.


*Madhuranga Sampath Bandara*
Software Engineer

WSO2, Inc.;http://wso2.com/
<http://www.google.com/url?q=http%3A%2F%2Fwso2.com%2F&sa=D&sntz=1&usg=AFQjCNGJuLRux6KkJwXKVUCYOtEsNCmIAQ>
lean.enterprise.middleware
Mobile: +94722241065

On Mon, Nov 23, 2015 at 4:44 PM, Nariman Abdullayev (TD) <
[email protected]> wrote:

> Hello,
>
> Could someone help me with this issue? I cannot understand why SOAP
> message is lost after an http exception
>
> Thank in advance,
>
> Nariman.
>
>
> On 11/17/2015 09:05 AM, Nariman Abdullayev (TD) wrote:
>
> Hi Madhuranga,
>
> Thank you for the sample. There is actually full envelope body in your
> example. Using your sample I was able to understand what cause an empty
> envelope in onError sequence.
>
> if you add just two additional parameters to the endpoint:
>
> <timeout>
>     <duration>5000</duration>
>     <responseAction>fault</responseAction>
>  </timeout>
>
> So that endpoint timeout becomes 5 seconds and after timeout an error must
> be thrown (otherwise error sequence is not called)
>
> and point an endpoint to some url which is actually reply after more than
> 5 seconds...
> For example, I achieve timeout using this simple php script:
>
> <?php
> ob_start();
> sleep(40);
> header("Content-type:  text/xml;charset=ISO-8859-1");
> echo '<methodResponse>XXX</methodResponse>';
> ob_end_flush();
> ?>
>
> In this case, when timeout occurs, I get empty envelope...
>
> log file sample, with configured timeout:
>
> [2015-11-16 22:15:10,982]  INFO - LogMediator To:
> /services/InOnlyProxy.InOnlyProxyHttpSoap12Endpoint, MessageID:
> urn:uuid:90c7f86d-d11a-4b13-a058-82c9900fefc4, Direction: request,
>  retry_count = null, Envelope: <?xml version='1.0'
> encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=
> <http://schemas.xmlsoap.org/soap/envelope/>
> "http://schemas.xmlsoap.org/soap/envelope/";
> <http://schemas.xmlsoap.org/soap/envelope/>
> ><soapenv:Body/></soapenv:Envelope>
> [2015-11-16 22:15:10,987]  WARN - TimeoutHandler Expiring message ID :
> urn:uuid:8358adc3-08e7-425b-ab62-3419a477439a; dropping message after
> timeout of : 5 seconds
> [2015-11-16 22:15:25,978]  INFO - LogMediator To:
> /services/InOnlyProxy.InOnlyProxyHttpSoap12Endpoint, MessageID:
> urn:uuid:01b3c6df-ed0d-4ab5-82fd-5630fb24a115, Direction: request,
>  retry_count = 1, Envelope: <?xml version='1.0'
> encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=
> <http://schemas.xmlsoap.org/soap/envelope/>
> "http://schemas.xmlsoap.org/soap/envelope/";
> <http://schemas.xmlsoap.org/soap/envelope/>
> ><soapenv:Body/></soapenv:Envelope>
> [2015-11-16 22:15:25,980]  WARN - TimeoutHandler Expiring message ID :
> urn:uuid:caacc0ec-5750-4580-9eb6-27be7b593be2; dropping message after
> timeout of : 5 seconds
> [2015-11-16 22:15:37,416]  WARN - SynapseCallbackReceiver Synapse received
> a response for the request with message Id :
> urn:uuid:8358adc3-08e7-425b-ab62-3419a477439a But a callback
>  is not registered (anymore) to process this response
> [2015-11-16 22:15:40,978]  INFO - LogMediator To:
> /services/InOnlyProxy.InOnlyProxyHttpSoap12Endpoint, MessageID:
> urn:uuid:9561bc27-15aa-4523-bf26-404761983f11, Direction: request,
>  retry_count = 2.0, Envelope: <?xml version='1.0'
> encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=
> <http://schemas.xmlsoap.org/soap/envelope/>
> "http://schemas.xmlsoap.org/soap/envelope/";
> <http://schemas.xmlsoap.org/soap/envelope/>
> ><soapenv:Body/></soapenv:Envelope>
> [2015-11-16 22:15:40,979]  WARN - TimeoutHandler Expiring message ID :
> urn:uuid:80fdc5ae-b31f-42c6-9be6-358c93d8bb4a; dropping message after
> timeout of : 5 seconds
>
> If I deploy the same project to 4.8.1 the SOAP body is not lost. However,
> in 4.9.0 SOAP body is not available.. So the question is why there is such
> a difference? is it done on purpose?
>
> for the reference, my endpoint xml:
> <endpoint name="SimpleStockQuoteService" xmlns=
> <http://ws.apache.org/ns/synapse>"http://ws.apache.org/ns/synapse";
> <http://ws.apache.org/ns/synapse>>
>   <address uri="http://localhost/index.php"; <http://localhost/index.php>>
>               <timeout>
>       <duration>5000</duration>
>      <responseAction>fault</responseAction>
>     </timeout>
>             <suspendOnFailure>
>                 <errorCodes>-1</errorCodes>
>                 <progressionFactor>1.0</progressionFactor>
>             </suspendOnFailure>
>             <markForSuspension>
>                 <errorCodes>-1</errorCodes>
>             </markForSuspension>
>         </address>
> </endpoint>
>
>
> Thanks in advance,
>
> Nariman.
>
>
> On 11/15/2015 08:53 AM, Madhuranga Bandara wrote:
>
> Hi Nariman,
>
> I have tried this in a ESB 4.9.0 fresh pack. Given below is my ESB
> configuration. I could access the SOAP envelop from
> "SimpleSQFault" onError sequence.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions xmlns="http://ws.apache.org/ns/synapse";>
>     <registry provider="org.wso2.carbon.mediation.registry.WSO2Registry">
>         <parameter name="cachableDuration">15000</parameter>
>     </registry>
>     <taskManager
> provider="org.wso2.carbon.mediation.ntask.NTaskTaskManager"/>
>     <proxy name="InOnlyProxy" startOnLoad="true" trace="disable"
> transports="https http">
>         <target>
>             <inSequence>
>                 <property name="target.endpoint"
> value="SimpleStockQuoteService"/>
>                 <sequence key="SimpleSQSender"/>
>             </inSequence>
>             <outSequence>
>                 <send/>
>             </outSequence>
>         </target>
>     </proxy>
>     <endpoint name="SimpleStockQuoteService">
>         <address uri="
> http://127.0.0.1:9000/services/SimpleStockQuoteService";>
>             <suspendOnFailure>
>                 <errorCodes>-1</errorCodes>
>                 <progressionFactor>1.0</progressionFactor>
>             </suspendOnFailure>
>             <markForSuspension>
>                 <errorCodes>-1</errorCodes>
>             </markForSuspension>
>         </address>
>     </endpoint>
>     <sequence name="SimpleSQFault">
>         <log level="full">
>             <property expression="get-property('retry_count')"
>                 name="retry_count"
>                 xmlns:ns="http://org.apache.synapse/xsd"; xmlns:ns3="
> http://org.apache.synapse/xsd"/>
>         </log>
>         <filter xmlns:ns="http://org.apache.synapse/xsd";
>             xmlns:ns3="http://org.apache.synapse/xsd";
> xpath="get-property('retry_count')">
>             <then>
>                 <property
>                     expression="number(get-property('retry_count'))+1"
>                     name="retry_count" scope="default"/>
>                 <filter xpath="get-property('retry_count') > 10">
>                     <then>
>                         <log>
>                             <property
>                                 expression="get-property('retry_count')"
> name="Dropping--Count"/>
>                         </log>
>                         <drop/>
>                     </then>
>                 </filter>
>             </then>
>             <else>
>                 <property name="retry_count" scope="default" value="1"/>
>                 <clone continueParent="true">
>                     <target>
>                         <sequence>
>                             <makefault version="soap11">
>                                 <code value="tns:Receiver" xmlns:tns="
> http://www.w3.org/2003/05/soap-envelope"/>
>                                 <reason
> expression="get-property('ERROR_MESSAGE')"/>
>                             </makefault>
>                             <send/>
>                             <drop/>
>                         </sequence>
>                     </target>
>                 </clone>
>             </else>
>         </filter>
>         <clone>
>             <target>
>                 <sequence>
>                     <store messageStore="SimpleMS"/>
>                 </sequence>
>             </target>
>         </clone>
>     </sequence>
>     <sequence name="SimpleSQSender" onError="SimpleSQFault">
>         <send>
>             <endpoint key="SimpleStockQuoteService"/>
>         </send>
>     </sequence>
>     <sequence name="fault">
>         <!-- Log the message at the full log level with the ERROR_MESSAGE
> and the ERROR_CODE-->
>         <log level="full">
>             <property name="MESSAGE" value="Executing default 'fault'
> sequence"/>
>             <property expression="get-property('ERROR_CODE')"
> name="ERROR_CODE"/>
>             <property expression="get-property('ERROR_MESSAGE')"
> name="ERROR_MESSAGE"/>
>         </log>
>         <!-- Drops the messages by default if there is a fault -->
>         <drop/>
>     </sequence>
>     <sequence name="main">
>         <in>
>             <!-- Log all messages passing through -->
>             <log level="full"/>
>             <!-- ensure that the default configuration only sends if it is
> one of samples -->
>             <!-- Otherwise Synapse would be an open proxy by default
> (BAD!)               -->
>             <filter regex="http://localhost:9000.*";
> source="get-property('To')">
>                 <!-- Send the messages where they have been sent (i.e.
> implicit "To" EPR) -->
>                 <send/>
>             </filter>
>         </in>
>         <out>
>             <send/>
>         </out>
>         <description>The main sequence for the message
> mediation</description>
>     </sequence>
>     <messageStore name="SimpleMS"/>
>     <messageProcessor
>
> class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor"
>         messageStore="SimpleMS" name="Processor">
>         <parameter name="interval">3000</parameter>
>         <parameter name="sequence">SimpleSQSender</parameter>
>     </messageProcessor>
>     <!-- You can add any flat sequences, endpoints, etc.. to this
> synapse.xml file if you do
>     *not* want to keep the artifacts in several files -->
> </definitions>
>
>
> Given below is the ESB Console output. You can see that the soap envelop
> can be access from onError sequence.
> This goes up to count 10. I have attached only part of it. Try it using
> different SOAP envelop.
>
> [2015-11-15 10:10:08,814]  WARN - ConnectCallback Connection refused or
> failed for : /127.0.0.1:9000
> [2015-11-15 10:10:08,817]  INFO - LogMediator To: /services/InOnlyProxy,
> WSAction: urn:getQuote, SOAPAction: urn:getQuote, MessageID:
> urn:uuid:63621a67-6906-48eb-af86-b8ee617d2afa, Direction: request,
> retry_count = null, Envelope: <?xml version='1.0'
> encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="
> http://schemas.xmlsoap.org/soap/envelope/"; xmlns:xsd="
> http://services.samples/xsd"; xmlns:ser="http://services.samples
> "><soapenv:Body>
>       <ser:getQuote>
>          <ser:request>
>             <xsd:symbol>WSO2</xsd:symbol>
>          </ser:request>
>       </ser:getQuote>
>    </soapenv:Body></soapenv:Envelope>
> [2015-11-15 10:10:11,176]  WARN - ConnectCallback Connection refused or
> failed for : /127.0.0.1:9000
> [2015-11-15 10:10:11,177]  INFO - LogMediator To: /services/InOnlyProxy,
> WSAction: urn:getQuote, SOAPAction: urn:getQuote, MessageID:
> urn:uuid:ca4e81a3-8dac-4e86-a845-f251a48353de, Direction: request,
> retry_count = 1, Envelope: <?xml version='1.0'
> encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="
> <http://schemas.xmlsoap.org/soap/envelope/>
> http://schemas.xmlsoap.org/soap/envelope/";><soapenv:Body>
>       <ser:getQuote xmlns:ser=" <http://services.samples>
> http://services.samples";>
>          <ser:request>
>             <xsd:symbol xmlns:xsd=" <http://services.samples/xsd>
> http://services.samples/xsd";>WSO2</xsd:symbol>
>          </ser:request>
>       </ser:getQuote>
>    </soapenv:Body></soapenv:Envelope>
>
>
> Thanks,
> Madhuranga.
>
>
> *Madhuranga Sampath Bandara*
> Software Engineer
>
> WSO2, Inc.;http://wso2.com/
> <http://www.google.com/url?q=http%3A%2F%2Fwso2.com%2F&sa=D&sntz=1&usg=AFQjCNGJuLRux6KkJwXKVUCYOtEsNCmIAQ>
> lean.enterprise.middleware
> Mobile: +94722241065
>
> On Fri, Nov 13, 2015 at 6:45 PM, Nariman Abdullayev (TD) <
> [email protected]> wrote:
>
>> Hi,
>>
>> I have a registered onError sequence.
>>
>> In version 4.8.1 SOAP envelop is available in onError sequence while in
>> 4.9.0 it is not.
>>
>> in order to access SOAP message content in 4.9.0 after error (in onError
>> sequence) I always have to copy it to some temp variable initially. it is
>> very inconvenient.
>>
>> could it be a bug or is it a new "feature" of 4.9.0?
>>
>>
>> this is my fault sequence. if i remove enrich mediator envelope comes
>> empty from the sequence with an error. Without enrich mediator message
>> contains empty soap envelope. It can be seen in the output of the log
>> mediator and in the message stored in RabbitMQ backend. Actually, it is
>> onError sequence of XXXXNotifySendSequence sequence (I added them both for
>> the reference). in case of failure I store the message in an external
>> queue, then using sampling message I processor read messages from queue and
>> to process them again. the idea is taken from -
>> http://charith.wickramaarachchi.org/2012/05/another-message-redelivery-pattern-with.html
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <sequence name="XXXXNotifyErrorSequence" trace="disable" 
>> xmlns="http://ws.apache.org/ns/synapse"; <http://ws.apache.org/ns/synapse>>
>>     <log level="full">
>>                     <property name="mssg" expression="get-property('mssg')"/>
>>                     <property name="retry_count" 
>> expression="get-property('retry_count')"/>
>>                 </log>
>>   <filter xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"; 
>> <http://www.w3.org/2003/05/soap-envelope> xpath="get-property('mssg')">
>>     <then>
>>       <enrich>
>>         <source clone="true" property="mssg" type="property"/>
>>         <target type="envelope"/>
>>       </enrich>
>>       <property name="mssg" action="remove"/>
>>     </then>
>>     <else/>
>>   </filter>
>>
>>
>>
>>   <filter xmlns:ns="http://org.apache.synapse/xsd"; 
>> <http://org.apache.synapse/xsd> 
>> xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"; 
>> <http://www.w3.org/2003/05/soap-envelope> 
>> xmlns:ns3="http://org.apache.synapse/xsd"; <http://org.apache.synapse/xsd> 
>> xpath="get-property('retry_count')">
>>         <then>
>>             <property name="retry_count" 
>> expression="number(get-property('retry_count'))+1" scope="default" 
>> type="STRING"/>
>>             <filter xpath="get-property('retry_count') > 5">
>>                 <then>
>>                     <log>
>>                         <property name="Dropping--Count" 
>> expression="get-property('retry_count')"/>
>>                     </log>
>>                     <drop/>
>>                 </then>
>>                 <else>
>>                     <sequence key="XXXXNotifySendSequence"/>
>>                 </else>
>>             </filter>
>>         </then>
>>         <else>
>>             <property name="retry_count" value="1" scope="default" 
>> type="STRING"/>
>>             <clone continueParent="true">
>>                 <target>
>>                     <sequence>
>>                         <makefault version="soap11">
>>                             <code 
>> xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/"; 
>> <http://schemas.xmlsoap.org/soap/envelope/> 
>> value="soap11Env:VersionMismatch"/>
>>                             <reason 
>> expression="get-property('ERROR_MESSAGE')"/>
>>                         </makefault>
>>                         <send/>
>>                     </sequence>
>>                 </target>
>>             </clone>
>>         </else>
>>     </filter>
>>
>>     <clone>
>>         <target>
>>             <sequence>
>>                 <log level="custom">
>>                     <property name="STORE" value="store the message"/>
>>                 </log>
>>                 <store messageStore="XXXXRabbitMQNative"/>
>>             </sequence>
>>         </target>
>>     </clone>
>>
>> </sequence>
>>
>> this is the sequence calling onError sequence. I emulate http timeout in 
>> HTTPEndpoint to trigger onError sequence invocation
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <sequence name="XXXXNotifySendSequence"
>>   onError="XXXXNotifyErrorSequence" trace="disable" 
>> xmlns="http://ws.apache.org/ns/synapse"; <http://ws.apache.org/ns/synapse>>
>>   <log level="full">
>>     <property name="XXXX" value="request start"/>
>>   </log>
>>   <enrich>
>>     <source clone="true" type="envelope"/>
>>     <target property="mssg" type="property"/>
>>   </enrich>
>>   <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" 
>> value="true"/>
>>   <call>
>>     <endpoint key="HTTPEndpoint"/>
>>   </call>
>>   <log level="full">
>>     <property name="XXXX" value="request end"/>
>>   </log>
>> </sequence>
>>
>> Nariman.
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
>
> _______________________________________________
> Dev mailing [email protected]http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>
>
> _______________________________________________
> Dev mailing list
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to