[mule-user] handling exception in xsd validation

0 views
Skip to first unread message

Davide Piazza

unread,
Dec 7, 2007, 12:51:52 PM12/7/07
to us...@mule.codehaus.org
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.html
Payload               : [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)

********************************************************************************

Andrew Perepelytsya

unread,
Dec 7, 2007, 12:53:51 PM12/7/07
to us...@mule.codehaus.org
Have you tried to put an exception strategy on the file connector?

Davide Piazza

unread,
Dec 17, 2007, 10:09:36 AM12/17/07
to us...@mule.codehaus.org
Thanks Andrew,
it worked :)
But now I would like to remove the original file from the input folder otherwise in the next poll mule would process it again.
How could I do that?

thanks
Davide.


2007/12/7, Andrew Perepelytsya <aper...@gmail.com>:

Andrew Perepelytsya

unread,
Dec 17, 2007, 10:21:25 AM12/17/07
to us...@mule.codehaus.org
ExceptionStrategy?

Davide Piazza

unread,
Dec 17, 2007, 12:35:14 PM12/17/07
to us...@mule.codehaus.org
Yes, indeed ;)
I was just wondering if there were a config to do that without coding and subclassing DefaultExceptionStrategy.
Thanks for the help
Davide.

2007/12/17, Andrew Perepelytsya < aper...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages