Unable to render {include} The included page could not be found.
Unable to render {include} The included page could not be found.
<implementation.xquery>
Tuscany provides an implementation type to support XQuery. With this extension, the business logic can be implemented by XQuery scripts.
The XML configuration
<implementation.xquery> is declared under namespace "http://tuscany.apache.org/xmlns/sca/1.0". The location attribute specifies the XQuery script. It can be a file or resource name against the current classloader.
<component name="QuoteJoinComponent" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"> <tuscany:implementation.xquery location="META-INF/sca/quote_join.xq" /> <reference name="quoteCalculator" target="QuoteCalculatorComponent" /> </component>
Some examples
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace="http://quote.xquery/client" xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" xmlns:xq="http://quote.xquery/client" name="xqueryquotewsclient"> ... <component name="QuoteJoinComponent"> <tuscany:implementation.xquery location="META-INF/sca/quote_join.xq" /> <reference name="quoteCalculator" target="QuoteCalculatorComponent" /> </component> <component name="QuoteJoinPropertiesComponent"> <tuscany:implementation.xquery location="META-INF/sca/quote_join_properties.xq" /> <!-- Reset the default namespace as the sub-elements under pri:priceQuote are unqualified --> <property name="priceQuoteDoc"> <pri:priceQuote xmlns:pri="http://www.example.org/price" xmlns=""> <customerName>Acme Inc</customerName> <shipAddress street="12 Springs Rd" city="Morris Plains" state="nj" zip="07960" /> <priceRequests> <priceRequest> <widgetId>12</widgetId> <price>1.0</price> </priceRequest> <priceRequest> <widgetId>134</widgetId> <price>34.1</price> </priceRequest> <priceRequest> <widgetId>211</widgetId> <price>10.0</price> </priceRequest> </priceRequests> </pri:priceQuote> </property> <!-- Reset the default namespace as the sub-elements under ava:availQuote are unqualified --> <property name="availQuoteDoc"> <ava:availQuote xmlns:ava="http://www.example.org/avail" xmlns=""> <availRequest> <widgetId>12</widgetId> <requestedQuantity>10</requestedQuantity> <quantityAvail>true</quantityAvail> <shipDate>2003-03-22</shipDate> </availRequest> <availRequest> <widgetId>134</widgetId> <requestedQuantity>345</requestedQuantity> <quantityAvail>false</quantityAvail> <shipDate>BackOrder</shipDate> </availRequest> <availRequest> <widgetId>211</widgetId> <requestedQuantity>100</requestedQuantity> <quantityAvail>true</quantityAvail> <shipDate>2003-04-21</shipDate> </availRequest> </ava:availQuote> </property> <property name="taxRate">0.1</property> <reference name="quoteCalculator" target="QuoteCalculatorComponent" /> </component> <component name="QuoteJoinExternalReferencesComponent"> <tuscany:implementation.xquery location="META-INF/sca/quote_join_external_references.xq" /> <reference name="quoteCalculator" target="QuoteCalculatorComponent" /> <reference name="priceQuoteProvider" target="PriceQuoteProviderComponent" /> </component> ... </composite>
Decalre SCA services/references/properties using XQuery namespaces
Please note you can use the following syntax in the XQuery script to declare SCA services, references, and properties.
- scaservice:java/<java_interface_name>
- scareference:java/<java_interface_name>
- scaproperty:xml/<namespace>:<localName>
- scaproperty:java/<java_class_name>
declare namespace quoteJoin="scaservice:java/xquery.quote.PropertiesQuoteJoin"; declare namespace quoteCalculator="scareference:java/xquery.quote.QuoteCalculator"; declare namespace priceQuoteDoc="scaproperty:xml/http://www.example.org/price:priceQuote"; declare namespace availQuoteDoc="scaproperty:xml/http://www.example.org/avail:availQuote"; declare namespace taxRate="scaproperty:java/java.lang.Float"; declare namespace pri="http://www.example.org/price"; declare namespace ava="http://www.example.org/avail"; declare namespace quo="http://www.example.org/quote"; declare variable $quoteCalculator external; declare variable $priceQuoteDoc external; declare variable $availQuoteDoc external; declare variable $taxRate external; declare function quoteJoin:joinPriceAndAvailQuotes() { <quo:quote> <quo:name>{ data($priceQuoteDoc/pri:priceQuote/customerName) }</quo:name> <quo:address>{ concat($priceQuoteDoc/pri:priceQuote/shipAddress/@street , ",", $priceQuoteDoc/pri:priceQuote/shipAddress/@city ,",", fn:upper-case($priceQuoteDoc/pri:priceQuote/shipAddress/@state) , ",", $priceQuoteDoc/pri:priceQuote/shipAddress/@zip) }</quo:address> { for $priceRequest in $priceQuoteDoc/pri:priceQuote/priceRequests/priceRequest, $availRequest in $availQuoteDoc/ava:availQuote/availRequest where data($priceRequest/widgetId) = data($availRequest/widgetId) return <quo:quoteResponse> <quo:widgetId>{ data($priceRequest/widgetId) }</quo:widgetId> <quo:unitPrice>{ data($priceRequest/price) }</quo:unitPrice> <quo:requestedQuantity>{ data($availRequest/requestedQuantity) }</quo:requestedQuantity> <quo:fillOrder>{ data($availRequest/quantityAvail) }</quo:fillOrder> { for $shipDate in $availRequest/shipDate return <quo:shipDate>{ data($shipDate) }</quo:shipDate> } <quo:taxRate>{ $taxRate }</quo:taxRate> <quo:totalCost>{ quoteCalculator:calculateTotalPrice( $quoteCalculator, $taxRate, $availRequest/requestedQuantity, $priceRequest/price, $availRequest/quantityAvail) }</quo:totalCost> </quo:quoteResponse> } </quo:quote> };