Saturday, November 20, 2010

XML-22045 when running composite in SOA Suite 11g

Problem:

We deployed a custom developed XPath function to SOA Suite 11g. However, when executing the composite that uses the XPath function, we received the following error:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Header/>
   <env:Body>
      <env:Fault>
         <faultcode>env:Server</faultcode>
         <faultstring>XPath expression failed to execute.
An error occurs while processing the XPath expression; the expression is ora:processXSLT('xsl/transform2.xsl',bpws:getVariableData('inputVariable','payload')).
The XPath expression failed to execute; the reason was: javax.xml.transform.TransformerException: &lt;Line 4, Column 80>: XML-22045: (Error) Extension function error: Class not found '

      Missing class: customFunctions.utilDateTime.getFullDateTime

    Dependent class: oracle.xml.xpath.XSLExtFunctions
             Loader: sun.misc.Launcher$AppClassLoader@1523237480
        Code-Source: /u01/app/oracle/middleware/oracle_common/modules/oracle.xdk_11.1.0/xmlparserv2.jar
      Configuration: /u01/app/oracle/middleware/oracle_common/modules/oracle.xdk_11.1.0/xmlparserv2.jar

This load was initiated at default.composite.AhmedDomainID.soa_14c55a6c-c0b4-408b-80d3-8279a546dae1:1.0 using the loadClass() method.
'.
Check the detailed root cause described in the exception message text and verify that the XPath query is correct.</faultstring>
         <faultactor/>
         <detail>
            <exception/>
         </detail>
      </env:Fault>
   </env:Body>
</env:Envelope>
Solution:

The following file is updated when configuring your custom XPath:
$ORACLE_HOME/soa/modules/oracle.soa.ext_11.1.1/classes/META-INF/ext-soa-xpath-functions-config.xml
This XPath function was migrated from 10g to 11g, but we recreated the Java classes. Thus, our namespace prefix was no longer the same.

Our original namespace prefix:
xmlns:utl="http://www.oracle.com/XSL/Transform/java/customFunctions.utilDateTime.getFullDateTime"
The updated, and working, prefix (conforming better to Oracle's standard):
xmlns:utl="http://www.oracle.com/XSL/Transform/java/com.collaxa.cube.xml.xpath.dom.functions.getDateTimeWithMilliseconds"
After this modification, we bounced, re-ran, and all worked fine.

Applicable Versions:
  • Oracle SOA Suite 11g (11.1.1.x)

No comments: