DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
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>
};