Hi,
I want to validate an XML file against its XSD and in case the validation fails move that file in an error directory.
I see that exception-strategy can be use globally or at component level or at connector level.
The validation takes place in the org.mule.routing.outbound.FilteringXmlMessageSplitter router. I tried several combination of different config but my file is never routed to the error directory. I only see the excepted validation exception.
Does anybody a similar scenario working? I suppose yes because I think this is a very tipical one.
TIA
regards
Davide.
<model name="MBoxIngestion">
<exception-strategy
className="org.mule.impl.DefaultExceptionStrategy">
<endpoint address="vm://validerror"></endpoint>
</exception-strategy>
<mule-descriptor name="WorkingFilePoller"
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<endpoint address="file://${
mbox.file.work}"
connector="workingFileConnector">
<filter pattern="*.xml"
className="org.mule.providers.file.filters.FilenameWildcardFilter" />
<properties>
<property name="moveToDirectory"
value="${mbox.file.backup}" />
</properties>
</endpoint>
</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.FilteringXmlMessageSplitter">
<properties>
<property name="splitExpression"
value="/Catalog" />
<property name="validateSchema" value="true" />
<property name="externalSchemaLocation"
value="src/res/musicstore22.xsd" />
</properties>
</router>
</outbound-router>
<!--exception-strategy
className="org.mule.impl.DefaultComponentExceptionStrategy">
<endpoint address="file://${mbox.file.validerror}"
connector="workingFileConnector">
</endpoint>
</exception-strategy-->
</mule-descriptor>
<mule-descriptor name="validError"
implementation="
org.mule.components.simple.BridgeComponent">
<inbound-router>
<endpoint address="vm://validerror"></endpoint>
</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="file://${
mbox.file.validerror}"
connector="validErrorFileConnector">
</endpoint>
</router>
</outbound-router>
</mule-descriptor>
</model>
ERROR 2007-12-07 18:48:46,718 [workingFileConnector.receiver.1] org.mule.impl.DefaultExceptionStrategy:
********************************************************************************
Message : Failed to route event via endpoint: null. Message payload is of type: byte[]
Type : org.mule.umo.routing.RoutingException
Code : MULE_ERROR-39999
JavaDoc :
http://mule.mulesource.org/docs/apidocs/org/mule/umo/routing/RoutingException.htmlPayload : [B@1efb4be
********************************************************************************
Exception stack is:
1. Failed to initialise the payload: org.dom4j.DocumentException: Error on line 4 of document : cvc-complex-type.2.4.a
: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected. Nested exception: cvc-complex-type.2.4.a: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.dom4j.io.SAXReader.read(SAXReader.java:365)
at org.mule.routing.outbound.FilteringXmlMessageSplitter.initialise(FilteringXmlMessageSplitter.java
:149)
at org.mule.routing.outbound.AbstractMessageSplitter.route(AbstractMessageSplitter.java:47)
at org.mule.routing.outbound.OutboundRouterCollection$1.doInTransaction(OutboundRouterCollection.java:66)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at org.mule.routing.outbound.OutboundRouterCollection.route(OutboundRouterCollection.java:71)
at org.mule.routing.inbound.ForwardingConsumer.process
(ForwardingConsumer.java:86)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:86)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(
AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java
:251)
at org.mule.providers.file.FileMessageReceiver.processFile(FileMessageReceiver.java:266)
at org.mule.providers.file.FileMessageReceiver.poll(FileMessageReceiver.java:144)
at org.mule.providers.PollingReceiverWorker.run
(PollingReceiverWorker.java:47)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:595)
Nested exception:
org.xml.sax.SAXParseException: cvc-complex-type.2.4.a
: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java
:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java
:429)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3185)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java
:1831)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java
:330)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument
(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse
(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:365)
at org.mule.routing.outbound.FilteringXmlMessageSplitter.initialise(FilteringXmlMessageSplitter.java
:149)
at org.mule.routing.outbound.AbstractMessageSplitter.route(AbstractMessageSplitter.java:47)
at org.mule.routing.outbound.OutboundRouterCollection$1.doInTransaction(OutboundRouterCollection.java:66)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at org.mule.routing.outbound.OutboundRouterCollection.route(OutboundRouterCollection.java:71)
at org.mule.routing.inbound.ForwardingConsumer.process
(ForwardingConsumer.java:86)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:86)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(
AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java
:251)
at org.mule.providers.file.FileMessageReceiver.processFile(FileMessageReceiver.java:266)
at org.mule.providers.file.FileMessageReceiver.poll(FileMessageReceiver.java:144)
at org.mule.providers.PollingReceiverWorker.run
(PollingReceiverWorker.java:47)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:595)
(java.lang.IllegalArgumentException)
org.mule.routing.outbound.FilteringXmlMessageSplitter
:207 (
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html)
2. Failed to route event via endpoint: null. Message payload is of type: byte[] (
org.mule.umo.routing.RoutingException)
org.mule.routing.outbound.OutboundRouterCollection:75 (
http://mule.mulesource.org/docs/apidocs/org/mule/umo/routing/RoutingException.html
)
********************************************************************************
Root Exception stack trace:
java.lang.IllegalArgumentException: Failed to initialise the payload: org.dom4j.DocumentException
: Error on line 4 of document : cvc-complex-type.2.4.a: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected. Nested exception: cvc-complex-type.2.4.a
: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.dom4j.io.SAXReader.read
(SAXReader.java:365)
at org.mule.routing.outbound.FilteringXmlMessageSplitter.initialise(FilteringXmlMessageSplitter.java:149)
at org.mule.routing.outbound.AbstractMessageSplitter.route(AbstractMessageSplitter.java
:47)
at org.mule.routing.outbound.OutboundRouterCollection$1.doInTransaction(OutboundRouterCollection.java:66)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at org.mule.routing.outbound.OutboundRouterCollection.route
(OutboundRouterCollection.java:71)
at org.mule.routing.inbound.ForwardingConsumer.process(ForwardingConsumer.java:86)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:86)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java
:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:251)
at org.mule.providers.file.FileMessageReceiver.processFile(FileMessageReceiver.java:266)
at org.mule.providers.file.FileMessageReceiver.poll
(FileMessageReceiver.java:144)
at org.mule.providers.PollingReceiverWorker.run(PollingReceiverWorker.java:47)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker
(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:595)
Nested exception:
org.xml.sax.SAXParseException
: cvc-complex-type.2.4.a: Invalid content was found starting with element 'CatalogItems'. One of '{"Musicstore":Date}' is expected.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException
(ErrorHandlerWrapper.java:236)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:172)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java
:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java
:429)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3185)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java
:1831)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java
:330)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument
(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse
(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:365)
at org.mule.routing.outbound.FilteringXmlMessageSplitter.initialise(FilteringXmlMessageSplitter.java
:149)
at org.mule.routing.outbound.AbstractMessageSplitter.route(AbstractMessageSplitter.java:47)
at org.mule.routing.outbound.OutboundRouterCollection$1.doInTransaction(OutboundRouterCollection.java:66)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at org.mule.routing.outbound.OutboundRouterCollection.route(OutboundRouterCollection.java:71)
at org.mule.routing.inbound.ForwardingConsumer.process
(ForwardingConsumer.java:86)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:86)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(
AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java
:251)
at org.mule.providers.file.FileMessageReceiver.processFile(FileMessageReceiver.java:266)
at org.mule.providers.file.FileMessageReceiver.poll(FileMessageReceiver.java:144)
at org.mule.providers.PollingReceiverWorker.run
(PollingReceiverWorker.java:47)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:595)
at org.mule.routing.outbound.FilteringXmlMessageSplitter.initialise
(FilteringXmlMessageSplitter.java:207)
at org.mule.routing.outbound.AbstractMessageSplitter.route(AbstractMessageSplitter.java:47)
at org.mule.routing.outbound.OutboundRouterCollection$1.doInTransaction(OutboundRouterCollection.java
:66)
at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:39)
at org.mule.routing.outbound.OutboundRouterCollection.route(OutboundRouterCollection.java:71)
at org.mule.routing.inbound.ForwardingConsumer.process
(ForwardingConsumer.java:86)
at org.mule.routing.inbound.InboundRouterCollection.route(InboundRouterCollection.java:86)
at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(
AbstractMessageReceiver.java:581)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:322)
at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java
:251)
at org.mule.providers.file.FileMessageReceiver.processFile(FileMessageReceiver.java:266)
at org.mule.providers.file.FileMessageReceiver.poll(FileMessageReceiver.java:144)
at org.mule.providers.PollingReceiverWorker.run
(PollingReceiverWorker.java:47)
at org.mule.impl.work.WorkerContext.run(WorkerContext.java:310)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Thread.java:595)
********************************************************************************