On Thu, Oct 18, 2012 at 4:39 PM, snowindy <blackorange...@gmail.com> wrote: > 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. >
I dont think people understand what you are saying here? eg It seems like you must return a String, but then why do you use a ProcessError object then? Why not just a String? > > > -- > 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. -- Claus Ibsen ----------------- Red Hat, Inc. FuseSource is now part of Red Hat Email: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen