Dear experienced Camel users! Please tell me

*1) What is wrong in my design in general? (I am sure it is not optimal)
2) What is a correct way to use POJOs in an Exchange body?*

My Grails web-application needs to interact to a remote web-service with
some intermediate steps:

-Create request xml
-Validate this xml
-Sign xml with dsig
-Send signed xml to ths web-service
-Validate response signature
-Validate response XML
-Process response

Each step may throw an exception, which must be shown at a page. Like this:
"Error occured at step StepName, error message: Message".

So I guess my preferable pattern is "Request-Reply".

I am trying to assemble a camel route using a set of processors. Each
processor is wrapped in .doTry() like this one.

*from("direct:sendServiceCatalog")
    .doTry()
        .process(new Processor() {

            @Override
            public void process(Exchange arg0) throws Exception {
                System.out.println("PROCESSING");
                throw new RuntimeException("Nice try");

            }
        })
        .to("mock:result")
    .doCatch(Exception.class)
        .process(
            new ExceptionStageDetectorProcessor(
                    SendServiceCatalogStage.FORM_XML))
        .to("mock:catch")
    .end();*


ExceptionStageDetectorProcessor.java class is pretty simple:

*public class ExceptionStageDetectorProcessor implements Processor {

    public ExceptionStageDetectorProcessor(SendServiceCatalogStage stage) {
        this.stage = stage;
    }

    public SendServiceCatalogStage getStage() {
        return stage;
    }

    private SendServiceCatalogStage stage;

    @Override
    public void process(Exchange exchange) throws Exception {
        Throwable caughtException = (Throwable) exchange
                .getProperty(Exchange.EXCEPTION_CAUGHT);

        exchange.getOut().setBody(new ProcessError(stage, caughtException));
    }
}
*

It almost worked! :)

The problem is that the new body ProcessError cannot be used, when exception
occurs returning object is an error string, not a ProcessError object. If I
try to set a simple string .setBody("FOO") returning object is "FOO"
exactly.



--
View this message in context: 
http://camel.465427.n5.nabble.com/Camel-application-design-question-tp5721248.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to