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
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.
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.
- 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
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.
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
We can then get the validation status flag and validation messages by applying simple XPath expressions on the validaitonResult variable.
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.
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.
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.