Hi,

The way to do this is the following.

   - Create a servicemix-bean that exclusively does error handling (i.e
check the exchange for Exchange status to be Error/Fault) and writes the
message to a specific directory. The Exception handling bean will typically
be a pass through and only kkick in when an exceptionis received in the
Message Exchange
   - Introduce this bean between the File SU and the Transformer by changing
the target Service in the File SU and the Exception Handling Bean
           File SU --> Exception Processing Bean --> Transformer

An example of this code is

import org.apache.servicemix.jbi.listener.MessageExchangeListener;
import org.apache.servicemix.jbi.util.MessageUtil;

import javax.annotation.Resource;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;

public class ListenerBean implements MessageExchangeListener {

    @Resource
    private DeliveryChannel channel;

    public void onMessageExchange(MessageExchange exchange) throws
MessagingException {
        if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
             NormalizedMessage message = exchange.getMessage("in");
             Source content = message.getContent();
             String body = (new SourceTransformer()).toString(content);
            
            // ***** Write the message to a directory ****
            channel.send(exchange);

        }
    }

}

Hope this helps.

Cheers,

Ashwin...


smo001 wrote:
> 
> 
> Hi all,
> 
> i'v got some questions about the exchange status which is used in the
> Servicemix ESB.
> i'd like to use it to get a user defined handling if an error occurs. My
> projekt is a file - unit which sends the file into a pipeline. the
> pipeline sends it to a xslt - transformer unit which returns the
> transformed message back to the pipeline. 
> 
> on Success: the message will be received to a jms unit which writes the
> message to a messagequeue
> 
> on Error: the file shoud be moved to an other directory. 
> 
> I think, an error could only occur in the  tranformation unit if the xml
> document is not valid. So the component receives the exchange status =
> error back to the pipeline.
> 
> The Filepoller only deletes the file if it got the status done (is it
> write?) . Therefore i think it should be possible to add for example a
> bean with an own class to copy the file to an other directory, but i don't
> know how to implement the bean in the file component.  
> 
> Has anybody en idea how to realize it?
> 
> My filepoller is a simple one like this:
> <beans xmlns:f="http://servicemix.apache.org/file/1.0";
>        xmlns:b="http://servicemix.apache.org/OpenTransToPdf/bridge";>
> 
>   <f:poller
>       service="b:FilePoller"
>       endpoint="FilePoller"
>       file="file:///C:\Servicemix\inbox"
>       targetService="b:Pipeline"
>       period="30000"
>       recursive="true"
>       autoCreateDirectory="true">
>         
>         <property name="filter">
>             <bean class="org.apache.commons.io.filefilter.WildcardFilter">
>                 <constructor-arg value="*.xml" />
>             </bean>
>       </property>
> 
>          <property name="marshaler">
>                   <bean 
>                       
> class="org.apache.servicemix.components.util.DefaultFileMarshaler">     
>               </bean>
>       </property>
>         
>     </f:poller>
> 
> Thanks for your Help 
> Regards Stefan
> 


-----
--- 
Ashwin Karpe, Principal Consultant, PS - Opensource Center of Competence 
Progress Software Corporation
14 Oak Park Drive
Bedford, MA 01730
--- 
+1-972-304-9084 (Office) 
+1-972-971-1700 (Mobile) 
---- 
Blog: http://opensourceknowledge.blogspot.com/


-- 
View this message in context: 
http://www.nabble.com/Exchange-Status-to-handle-Errors-tp21328296p21330058.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to