JIRA

  • Log In Access more options
    • Online Help
    • GreenHopper Help
    • Agile Answers
    • Use Agile By Default
    • Keyboard Shortcuts
    • About JIRA
    • JIRA Credits
    • What’s New
  • Dashboards Access more options (Alt+d)
  • Projects Access more options (Alt+p)
  • Issues Access more options (Alt+i)
  • Agile Access more options (Alt+g)
  • Create Issue
  • Mule
  • MULE-5511

xpath-node evaluator throws an exception if the input type is org.w3c.dom.Document

  • Agile Board
  • More Actions
  • Views
    • XML
    • Word
    • Printable

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Fixed
  • Affects Version/s: 2.2.6 (EE only), 3.1.1
  • Fix Version/s: 2.2.8 (EE only), 3.1.2, 3.2.0
  • Component/s: Modules: XML, XSLT, XPath, SXC
  • Labels:
    None
  • User impact:
    Medium
  • Configuration:
    Hide

    <?xml version="1.0" encoding="UTF-8"?>
    <mule xmlns="http://www.mulesource.org/schema/mule/core/2.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:spring="http://www.springframework.org/schema/beans"
    xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.2"
    xmlns:mxml="http://www.mulesource.org/schema/mule/xml/2.2"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
    http://www.mulesource.org/schema/mule/vm/2.2 http://www.mulesource.org/schema/mule/vm/2.2/mule-vm.xsd
    http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/mule-xml.xsd">

    <mxml:namespace-manager>
    <mxml:namespace uri="http://ricston.com/" prefix="r"/>
    </mxml:namespace-manager>

    <mxml:xml-to-dom-transformer name="xmlToDomDocumentTransformer" returnClass="org.w3c.dom.Document"/>

    <model>

    <service name="testService">
    <inbound>
    <vm:inbound-endpoint path="test" synchronous="true">
    <transformers>
    <transformer ref="xmlToDomDocumentTransformer"/>
    <expression-transformer>
    <return-argument custom-evaluator="xpath-node" expression="//r:sayHello" evaluator="custom"/>
    </expression-transformer>
    </transformers>
    </vm:inbound-endpoint>
    </inbound>

    </service>
    </model>
    </mule>

    Show
    <?xml version="1.0" encoding="UTF-8"?> <mule xmlns="http://www.mulesource.org/schema/mule/core/2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.2" xmlns:mxml="http://www.mulesource.org/schema/mule/xml/2.2" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd http://www.mulesource.org/schema/mule/vm/2.2 http://www.mulesource.org/schema/mule/vm/2.2/mule-vm.xsd http://www.mulesource.org/schema/mule/xml/2.2 http://www.mulesource.org/schema/mule/xml/2.2/mule-xml.xsd"> <mxml:namespace-manager> <mxml:namespace uri="http://ricston.com/" prefix="r"/> </mxml:namespace-manager> <mxml:xml-to-dom-transformer name="xmlToDomDocumentTransformer" returnClass="org.w3c.dom.Document"/> <model> <service name="testService"> <inbound> <vm:inbound-endpoint path="test" synchronous="true"> <transformers> <transformer ref="xmlToDomDocumentTransformer"/> <expression-transformer> <return-argument custom-evaluator="xpath-node" expression="//r:sayHello" evaluator="custom"/> </expression-transformer> </transformers> </vm:inbound-endpoint> </inbound> </service> </model> </mule>
  • Log Output:
    Hide
    [04-05 13:11:33] ERROR DefaultServiceExceptionStrategy [main]:
    ********************************************************************************
    Message : Failed to invoke org.mule.component.simple.PassThroughComponent component for: SedaService{testService}. Component that caused exception is: SedaService{testService}. Message payload is of type: DocumentImpl
    Type : org.mule.api.service.ServiceException
    Code : MULE_ERROR--2
    Payload : [#document: null]
    JavaDoc : http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/service/ServiceException.html
    ********************************************************************************
    Exception stack is:
    1. WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. (org.w3c.dom.DOMException)
    com.sun.org.apache.xerces.internal.dom.ParentNode:352 (null)
    2. Failed to evaluate XPath expression: "//r:sayHello" (org.mule.api.MuleRuntimeException)
    org.mule.module.xml.expression.AbstractXPathExpressionEvaluator:93 (http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/MuleRuntimeException.html)
    3. Failed to invoke org.mule.component.simple.PassThroughComponent component for: SedaService{testService}. Component that caused exception is: SedaService{testService}. Message payload is of type: DocumentImpl (org.mule.api.service.ServiceException)
    org.mule.component.AbstractComponent:152 (http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/service/ServiceException.html)
    ********************************************************************************

    Root Exception stack trace:
    org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
    at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:352)
    at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284)
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:389)
    at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
    at org.mule.module.xml.expression.XPathNodeExpressionEvaluator.extractResultFromNode(XPathNodeExpressionEvaluator.java:57)
    at org.mule.module.xml.expression.AbstractXPathExpressionEvaluator.extractResultsFromNodes(AbstractXPathExpressionEvaluator.java:142)
    at org.mule.module.xml.expression.AbstractXPathExpressionEvaluator.evaluate(AbstractXPathExpressionEvaluator.java:77)
    at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:170)
    at org.mule.expression.transformers.ExpressionArgument.evaluate(ExpressionArgument.java:115)
    at org.mule.expression.transformers.ExpressionTransformer.transform(ExpressionTransformer.java:52)
    at org.mule.transformer.AbstractMessageAwareTransformer.doTransform(AbstractMessageAwareTransformer.java:68)
    at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:254)
    at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:645)
    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:606)
    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:599)
    at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:328)
    at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:323)
    at org.mule.component.simple.PassThroughComponent.doInvoke(PassThroughComponent.java:27)
    at org.mule.component.AbstractComponent.invokeInternal(AbstractComponent.java:133)
    at org.mule.component.AbstractComponent.invoke(AbstractComponent.java:161)
    at org.mule.service.AbstractService.invokeComponent(AbstractService.java:921)
    at org.mule.model.seda.SedaService.doSend(SedaService.java:256)
    at org.mule.service.AbstractService.sendEvent(AbstractService.java:499)
    at org.mule.DefaultMuleSession.sendEvent(DefaultMuleSession.java:359)
    at org.mule.routing.inbound.DefaultInboundRouterCollection.send(DefaultInboundRouterCollection.java:228)
    at org.mule.routing.inbound.DefaultInboundRouterCollection.route(DefaultInboundRouterCollection.java:188)
    at org.mule.transport.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:382)
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:258)
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:203)
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:177)
    at org.mule.transport.vm.VMMessageReceiver.onCall(VMMessageReceiver.java:107)
    at org.mule.transport.vm.VMMessageDispatcher$2.doInTransaction(VMMessageDispatcher.java:133)
    at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:117)
    at org.mule.transport.vm.VMMessageDispatcher.doSend(VMMessageDispatcher.java:136)
    at org.mule.transport.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:167)
    at org.mule.transport.AbstractConnector.send(AbstractConnector.java:2167)
    at org.mule.endpoint.DefaultOutboundEndpoint.send(DefaultOutboundEndpoint.java:97)
    at org.mule.DefaultMuleSession.sendEvent(DefaultMuleSession.java:332)
    at org.mule.module.client.MuleClient.send(MuleClient.java:649)
    at org.mule.module.client.MuleClient.send(MuleClient.java:595)
    at com.ricston.w3c.W3CDocumentXPathNodeEvaluatorTestCase.testW3CDocument(W3CDocumentXPathNodeEvaluatorTestCase.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at org.mule.tck.AbstractMuleTestCase.runBare(AbstractMuleTestCase.java:287)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at org.mule.tck.AbstractMuleTestCase.run(AbstractMuleTestCase.java:266)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecut...

    ********************************************************************************
    Show
    [04-05 13:11:33] ERROR DefaultServiceExceptionStrategy [main]: ******************************************************************************** Message : Failed to invoke org.mule.component.simple.PassThroughComponent component for: SedaService{testService}. Component that caused exception is: SedaService{testService}. Message payload is of type: DocumentImpl Type : org.mule.api.service.ServiceException Code : MULE_ERROR--2 Payload : [#document: null] JavaDoc : http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/service/ServiceException.html ******************************************************************************** Exception stack is: 1. WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. (org.w3c.dom.DOMException) com.sun.org.apache.xerces.internal.dom.ParentNode:352 (null) 2. Failed to evaluate XPath expression: "//r:sayHello" (org.mule.api.MuleRuntimeException) org.mule.module.xml.expression.AbstractXPathExpressionEvaluator:93 (http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/MuleRuntimeException.html) 3. Failed to invoke org.mule.component.simple.PassThroughComponent component for: SedaService{testService}. Component that caused exception is: SedaService{testService}. Message payload is of type: DocumentImpl (org.mule.api.service.ServiceException) org.mule.component.AbstractComponent:152 (http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/service/ServiceException.html) ******************************************************************************** Root Exception stack trace: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:352) at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284) at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.insertBefore(CoreDocumentImpl.java:389) at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235) at org.mule.module.xml.expression.XPathNodeExpressionEvaluator.extractResultFromNode(XPathNodeExpressionEvaluator.java:57) at org.mule.module.xml.expression.AbstractXPathExpressionEvaluator.extractResultsFromNodes(AbstractXPathExpressionEvaluator.java:142) at org.mule.module.xml.expression.AbstractXPathExpressionEvaluator.evaluate(AbstractXPathExpressionEvaluator.java:77) at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:170) at org.mule.expression.transformers.ExpressionArgument.evaluate(ExpressionArgument.java:115) at org.mule.expression.transformers.ExpressionTransformer.transform(ExpressionTransformer.java:52) at org.mule.transformer.AbstractMessageAwareTransformer.doTransform(AbstractMessageAwareTransformer.java:68) at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:254) at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:645) at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:606) at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:599) at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:328) at org.mule.DefaultMuleEvent.transformMessage(DefaultMuleEvent.java:323) at org.mule.component.simple.PassThroughComponent.doInvoke(PassThroughComponent.java:27) at org.mule.component.AbstractComponent.invokeInternal(AbstractComponent.java:133) at org.mule.component.AbstractComponent.invoke(AbstractComponent.java:161) at org.mule.service.AbstractService.invokeComponent(AbstractService.java:921) at org.mule.model.seda.SedaService.doSend(SedaService.java:256) at org.mule.service.AbstractService.sendEvent(AbstractService.java:499) at org.mule.DefaultMuleSession.sendEvent(DefaultMuleSession.java:359) at org.mule.routing.inbound.DefaultInboundRouterCollection.send(DefaultInboundRouterCollection.java:228) at org.mule.routing.inbound.DefaultInboundRouterCollection.route(DefaultInboundRouterCollection.java:188) at org.mule.transport.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:382) at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:258) at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:203) at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:177) at org.mule.transport.vm.VMMessageReceiver.onCall(VMMessageReceiver.java:107) at org.mule.transport.vm.VMMessageDispatcher$2.doInTransaction(VMMessageDispatcher.java:133) at org.mule.transaction.TransactionTemplate.execute(TransactionTemplate.java:117) at org.mule.transport.vm.VMMessageDispatcher.doSend(VMMessageDispatcher.java:136) at org.mule.transport.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:167) at org.mule.transport.AbstractConnector.send(AbstractConnector.java:2167) at org.mule.endpoint.DefaultOutboundEndpoint.send(DefaultOutboundEndpoint.java:97) at org.mule.DefaultMuleSession.sendEvent(DefaultMuleSession.java:332) at org.mule.module.client.MuleClient.send(MuleClient.java:649) at org.mule.module.client.MuleClient.send(MuleClient.java:595) at com.ricston.w3c.W3CDocumentXPathNodeEvaluatorTestCase.testW3CDocument(W3CDocumentXPathNodeEvaluatorTestCase.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java:134) at org.mule.tck.AbstractMuleTestCase.runBare(AbstractMuleTestCase.java:287) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at org.mule.tck.AbstractMuleTestCase.run(AbstractMuleTestCase.java:266) at junit.framework.TestSuite.runTest(TestSuite.java:232) at junit.framework.TestSuite.run(TestSuite.java:227) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecut... ********************************************************************************
  • Similar Issues:
    None

Description

When you use an xpath-node expression evaluator on an org.w3c.dom.Document, the evaluator will throw the following exception:

WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it. (org.w3c.dom.DOMException)
com.sun.org.apache.xerces.internal.dom.ParentNode:352

Fix is very easy, all we have to do is import the node to be copied in the new document in the class XPathNodeExpressionEvaluator.

As an explanation, you can look at the dom4j section of the extractResultFromNode() method. In the dom4j section, we get the result and detach it from the current document to create a new document. We must do the same when we have a w3c Document, however, instead of doing detach(), we should execute importNode().

  • Options
    • Sort By Name
    • Sort By Date
    • Ascending
    • Descending
    • Download All

Attachments

  1. Hide
    Zip Archive
    mule-w3c-xpath-node-issue.zip
    05/Apr/11 06:31 AM
    11 kB
    Alan Cassar
    1. File
      mule-w3c-xpath-node-issue/.../XPathNodeExpressionEvaluator.class 3 kB
    2. File
      mule-w3c-xpath-node-issue/.../W3CDocumentXPathNodeEvaluatorTestCase.class 2 kB
    3. XML File
      mule-w3c-xpath-node-issue/pom.xml 1 kB
    4. Java Source File
      mule-w3c-xpath-node-issue/.../XPathNodeExpressionEvaluator.java 2 kB
    5. XML File
      mule-w3c-xpath-node-issue/.../mule-config.xml 2 kB
    6. Java Source File
      mule-w3c-xpath-node-issue/.../W3CDocumentXPathNodeEvaluatorTestCase.java 0.8 kB
    7. XML File
      mule-w3c-xpath-node-issue/.../request.xml 0.3 kB
    Download Zip
    Show
    Zip Archive
    mule-w3c-xpath-node-issue.zip
    05/Apr/11 06:31 AM
    11 kB
    Alan Cassar
  2. Text File
    patch.txt
    05/Apr/11 06:31 AM
    0.8 kB
    Alan Cassar

Issue Links

is blocked by

Bug - A problem which impairs or prevents the functions of the product. MULE-5319 Problem using splitter in flow for 3.1

  • Critical - Crashes, loss of data, severe memory leak.
  • Closed - The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.

Activity

  • All
  • Comments
  • Work Log
  • History
  • Activity
  • Transitions
  • Commits
  • Source
  • Builds

People

  • Assignee:
    Dirk Olmes
    Reporter:
    Alan Cassar
Vote (0)
Watch (0)

Dates

  • Created:
    05/Apr/11 06:30 AM
    Updated:
    01/Jun/11 01:35 PM
    Resolved:
    09/Apr/11 03:13 PM

Agile

  • View on Board
  • Atlassian JIRA (v5.0.7#734-sha1:8ad78a6)
  • Report a problem
  • Powered by a free Atlassian JIRA open source license for MuleForge. Try JIRA - bug tracking software for your team.