Umair Khalid
Umair Khalid

Reputation: 579

WSO2 ESB 4.8.1. Xpath substring function to get ERROR_DETAIL message

I am getting following type of messages in ERROR_DETAIL property in wso2 esb 4.8.1.

Message:

<ErrorDetail>org.xml.sax.SAXParseException; cvc-type.3.1.3: The value '' of element 'ds1:HomecomingDate' is not valid.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.elementLocallyValidType(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.processElementContent(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.endElement(Unknown Source)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.generateEvents(OMXMLReader.java:279)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.generateEvents(OMXMLReader.java:251)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.generateEvents(OMXMLReader.java:251)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.generateEvents(OMXMLReader.java:251)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.parse(OMXMLReader.java:171)
    at org.apache.axiom.om.impl.serialize.OMXMLReader.parse(OMXMLReader.java:161)
    at org.apache.xerces.jaxp.validation.ValidatorHandlerImpl.validate(Unknown Source)
    at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
    at javax.xml.validation.Validator.validate(Unknown Source)
    at org.apache.synapse.mediators.builtin.ValidateMediator.mediate(ValidateMediator.java:183)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.template.TemplateMediator.mediate(TemplateMediator.java:77)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:129)
    at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:78)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:196)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)</ErrorDetail>

What to retrieve: I want to get the meaningful message always, like in this case:

The value '' of element 'ds1:HomecomingDate' is not valid.

Every message contains the following line at the start:

org.xml.sax.SAXParseException;

and in every message, stack trace start from this line:

at org.apache.xerces.

so i want to get the message in between. I tried with the following property mediator but haven't got any luck.

<property xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" name="DesiredValue" expression="fn:substring(get-property('ERROR_DETAIL'),1,fn:substring-before(get-property('ERROR_DETAIL'),"org.apache."))" scope="default" type="STRING"></property>

Upvotes: 1

Views: 2980

Answers (2)

Rajitha Bhanuka
Rajitha Bhanuka

Reputation: 842

We can do like this

<property name="MSISDN" scope="default" type="STRING" value="94710000000"/>

<property expression="fn:substring($ctx:MSISDN, 3)"
              name="MSISDN_WITHOUT_COUNTRY_CODE" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>

The output would be 710000000

Upvotes: 2

Balaji Sengeni
Balaji Sengeni

Reputation: 254

Can you try below properties:

<property xmlns:ns="http://org.apache.synapse/xsd" name="Cause" expression="get-property('ERROR_MESSAGE')"/>

<property xmlns:ns="http://org.apache.synapse/xsd" name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>

Upvotes: 0

Related Questions