Schematron Validation in Oracle BPEL using Custom XPath Function

In one of my earlier post i had shown how we can use the Schematron feature to validate XML content in the Mediator component of Oracle SOA Suite 11g.

The article can be found at the link below

https://beatechnologies.wordpress.com/2011/04/06/using-schematron-in-oracle-soa-suite-11g-for-validating-xml/

However the mechanism to validate an XML content inside a BPEL or BPMN component is not available as of now. In this blog entry I would like to show how we can achieve it in either a BPEL or a BPM process using a Custom Xpath Function.

I have found these blogs most informative and wonderful on how to create your own Custom XPath function in Oracle SOA Suite.

http://blogs.oracle.com/bwb/entry/creating_custom_xpath_functions_using

http://blogs.oracle.com/reynolds/entry/building_your_own_path

I would try to show how we can use the custom XPath (link to the Jar) function from within a BPEL process that invokes the behind the scene Java classes to provide a validation output. Preview the screenshot below as how the custom XPath will appear in JDeveloper.

image

  • Download the SchematronXpath.jar from the location in this link.
  • Open JDeveloper and Click on Tools->Preferences->SOA.
  • Add the SchematronXpath.jar and click OK. We will need to restart JDeveloper in order for this change to take effect.
  • Upon restarting we can see that the custom XPath function is available in the Functions pallette under User Defined Extension Functions

image

The validateSchematron function accepts the xml source and the corresponding Schematron file against which the xml content should be validated.

The output of the function contains a Static XML describing the validation status and validation messages (consisting of validation errors or warnings if any).

See a sample of the validation Output.

<ValidationOutput>
<ValidationFlag>false</ValidationFlag>
<ValidationMessage>(1).The value of the sum attribute should be the sum of all the values in the item child elements.</ValidationMessage>

The next thing to get this custom function executing at runtime in SOA Suite we need to add it to the SOA suite extension libraries.

  • Copy the SchematronXpath.jar jar file to the <MIDDLEWARE_HOME>/Oracle_SOA1/soa/modules/oracle.soa.ext_11.1.1 directory on the SOA Suite installation.
  • Run ant in that directory (setting JAVA_HOME if necessary) by executing <MIDDLEWARE_HOME>/modules/org.apache.ant_1.7.1/bin/ant.

Another option is to add the jar file in the BPEL runtime manually using the following steps.

  • Go to <Middleware Home>\Oracle_SOA1\soa\modules\oracle.soa.bpel_11.1.1 directory of your Oracle SOA Suite installation.
  • Copy the SchematronXpath.jar in the above directory
  • Unjar the oracle.soa.bpel.jar and edit the MANIFEST.MF to add an entry of the above jar in the classpath.
  • We then need to restart the SOA Suite to get it to recognize the jar in its classpath.

I then created a BPEL process that would invoke the custom XPath function to validate the content of its input. Also placed the schematron file inside a custom folder inside the BPEL project so that we can refer to it using the ora:doc(‘validationFiles/ValidateItemSum.sch’) function using an Assign activity.

image

The val:validateSchematron(Element xmlSource, Element schemaSource) takes any xml input converted as Node/Element and the validation schema.

I then used a variable called validationResult of type xsd:anyType to get the validation response from the XPath

image

We can then get the validation status flag and validation messages by applying simple XPath expressions on the validaitonResult variable.

image

Once we deploy out BPEL process to a running SOA server we can also test it with a few input and see the results.

We first test the Happy test case where we pass two Items with values that add up to the sum attribute. As defined in the schematron file this should pass the validation and it does as is seen in the response.

image

Test the composite again but this time with Items values which doesn’t add up to the value of the sum attribute.

This time the validation returns a false flag along with the Assert message defined in the schematron file.

image

If you have any questions and concerns for this particular approach please use the comment section below.

Also let me know in case if you are interested in the source code for the Custom XPath Java code that is demonstrated in this article.

The BPEL process used in this demo can be downloaded from this link.

Jar file for the CustomXpath function.

.

16 thoughts on “Schematron Validation in Oracle BPEL using Custom XPath Function

  1. Pingback: Using Schematron in Oracle SOA Suite 11g for Validating XML « Oracle Technologies Premier

  2. Great Post and a very useful approach when considering the use with BPEL.

    However the links to the examples seem to be broken. The customer xPath jar file is OK (as per the commented above), however the BPEL sample link is broken. Would it be possibe to facilitate uploading this or sending via email?

    Many Thanks
    Dave

    Like

    • Hi Dave,

      Thanks for your valuable comments. I did upload the project and the jar in Google Docs but i guess it messed up the downloadable links. I have uploaded the projects elsewhere now. See if you can download them. Otherwise i would be happy to email it.

      Like

      • Thanks for uploading those, I now have both files.

        However are these pertinent to a specific SOA Version? (mainly the custom xpath jar)? I am using SOA 11.1.1.5.0.

        The reason I ask is when I run your sample out of the box, I receive an internal xpath error with the SOA Log files at runtime. This is the same error as I receive in an example I created previously (using your xpath jar file). When looking through the stack trace it mentions errors such as “oracle.xml.xpath.XPathException: Expected Node-set in Path Expression.”

        Hence if you have had this example working previously, it may be something with my environment or versions. FYI I have included the xpath jar in the oracle.soa.ext_11.1.1 library

        Like

  3. Great Post. Thanks so much for sharing this.
    Tell me, what were the advantages for you of executing the Schematron validation from within BPEL as opposed to using the native Oracle Mediator Schematron validation ? In which cases could this be beneficial?

    Like

    • Thanks Chris,
      As such there are no advantages or disadvantages of using/not using Schematron in Oracle BPEL. Normally you will go with validations in the Mediator component if it is being done when the input message is being received or an output message is being sent. In cases where you would require validations in between a process, this is done in BPEL.

      Hope it helps
      Arun

      Like

  4. Great Post. Thanks so much for sharing this.
    Tell me, what were the advantages for you of executing the Schematron validation from within BPEL as opposed to using the native Oracle Mediator Schematron validation ? In which cases could this be beneficial?

    Like

  5. Pingback: Publicación completa

Post your comments and suggestions here

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s