This documentation is for WSO2 ESB version 4.0.2. View documentation for the latest release.

XQuery Mediator

The XQuery Mediator can be used to perform an XQuery transformation. The key attribute specifies the registry key for looking up XQuery script that can be used to define transformation. The optional target attribute specifies the node of the SOAP message that should be transformed. In case where the target value is not specified, then the first child of the SOAP body is selected. The variable elements define a variable that could be bound to the dynamic context of the XQuery engine in order to access those variables during the XQuery script invocation .

In the variable definition, it is possible to specify just a "literal" value or an XPath expression over the payload or even specify a registry key or a registry key combined with an XPath expression that selects the value of the variable. Using key attribute of the variable, it is possible to bind an XML document located in the registry so that in the transformation that too can be used. The name of the variable corresponds to the name of variable declaration in the XQuery script. The type of the variable must be a valid type defined by the JSR-000225 (XQJ API).



Syntax

<xquery key="string" [target="xpath"]>
    <variable name="string" type="string" [key="string"] [expression="xpath"] [value="string"]/>?
</xquery>

UI Configuration

  • Key Type - Specify either Static or Dynamic Key type.
  • Key - The key that represent the XQuery transformation. It can be chosen either from Configuration Registry or Governance Registry. See more information about the Registry Browser in Namespace.
  • Target - Specify the node of the message that should be transformed using an XPath expression.

    Tip

    Default to the first child of the SOAP body.

    Tip

    You can follow this link to add namespaces if you are providing an expression. You will be provided another panel named "Namespace Editor," where you can provide any number of namespace prefixes and URL that you have used in the XPath expression. See Common Screens and Dialog Boxes.

  • Variables for the XQuery Mediator - Defines values/expressions that could be bound to the dynamic context of the XQuery engine in order to access those variables through the XQuery script.
    • Variable Type - The "type" of the variable must be a valid type defined by the JSR-000225 (XQJ API). Supported Types:
      • XQItemType.XQBASETYPE_INT -> INT
      • XQItemType.XQBASETYPE_INTEGER -> INTEGER
      • XQItemType.XQBASETYPE_BOOLEAN -> BOOLEAN
      • XQItemType.XQBASETYPE_BYTE - > BYTE
      • XQItemType.XQBASETYPE_DOUBLE -> DOUBLE
      • XQItemType.XQBASETYPE_SHORT -> SHORT
      • XQItemType.XQBASETYPE_LONG -> LONG
      • XQItemType.XQBASETYPE_FLOAT -> FLOAT
      • XQItemType.XQBASETYPE_STRING -> STRING
      • XQItemType.XQITEMKIND_DOCUMENT -> DOCUMENT
      • XQItemType.XQITEMKIND_DOCUMENT_ELEMENT -> DOCUMENT_ELEMENT
      • XQItemType.XQITEMKIND_ELEMENT -> ELEMENT
    • Variable Name - The name of the variable. It should correspond to the name of variable declaration in the XQuery script.
    • Value Type - Whether the value of the variable is a static value or an expression.
    • Value / Expression - Static value or the expression.
    • Action - Deletes the variable.

Note

You can configure the Mediator using XML. Click on "switch to source view" in the "Mediator" window.


Examples

1.

<xquery key="xquery\example.xq">
      <variable name="payload" type="ELEMENT"/>
</xquery>

In the above configuration, XQuery script is in the registry and that script can be picked by key xquery\example.xq. There is a one variable name payload and type as ELEMENT. As there is no expression in the variable definitions, default value is the first child of SOAP Body is used as the value of variable ayload. . Within XQuery script you can access this variable by defining declare variable $payload as document-node() external;. Refer sample 390 and 391 for more information.

2.

<variable name="commission" type="ELEMENT" key="misc/commission.xml"></variable>

A variable definitions that pick a XML resource from the registry using key misc/commission.xml and bind in to XQuery Runtime so that it can be accessed with in XQuery script.

3.

<variable name="price" type="DOUBLE" expression="self::node()//m0:return/m0:last/child::text()" xmlns:m0="http://services.samples/xsd"/>

A variable that value is calculated from current message SOAP Payload using an expression.  Value is a type of double in this case.