THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
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.
The XML configuration
<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="QuoteJoinLocalComponent"> <implementation.java class="xquery.quote.QuoteJoinLocalImpl" /> <reference name="quoteJoin" target="QuoteJoinComponent" /> <reference name="propertiesQuoteJoin" target="QuoteJoinPropertiesComponent" /> <reference name="externalServicesQuoteJoin" target="QuoteJoinExternalReferencesComponent" /> </component> <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> <component name="QuoteCalculatorComponent"> <implementation.java class="xquery.quote.QuoteCalculatorImpl" /> </component> <component name="PriceQuoteProviderComponent"> <implementation.java class="xquery.quote.PriceQuoteProviderImpl" /> </component> <reference name="availQuoteProvider" promote="QuoteJoinExternalReferencesComponent/availQuoteProvider"> <interface.java interface="xquery.quote.AvailQuoteProviderService" /> <binding.ws wsdlElement="http://quote.xquery#wsdl.port(AvailQuoteProviderService/AvailQuoteProviderSoapPort)" /> </reference> <reference name="quoteJoinWs" promote="QuoteJoinLocalComponent/quoteJoinWs"> <interface.java interface="xquery.quote.QuoteJoin" /> <binding.ws wsdlElement="http://quote.xquery#wsdl.port(QuoteJoinService/QuoteJoinSoapPort)" /> </reference> </composite>
The XQuery sample
declare namespace quoteJoin="scaservice:java/xquery.quote.QuoteJoin"; declare namespace quoteCalculator="scareference:java/xquery.quote.QuoteCalculator"; declare namespace quo="http://www.example.org/quote"; declare variable $quoteCalculator external; declare function quoteJoin:joinPriceAndAvailQuotes($priceQuoteDoc, $availQuoteDoc, $taxRate) { <quo:quote> <quo:name>{ data($priceQuoteDoc/priceQuote/customerName) }</quo:name> <quo:address>{ concat($priceQuoteDoc/priceQuote/shipAddress/@street , ",", $priceQuoteDoc/priceQuote/shipAddress/@city ,",", fn:upper-case($priceQuoteDoc/priceQuote/shipAddress/@state) , ",", $priceQuoteDoc/priceQuote/shipAddress/@zip) }</quo:address> { for $priceRequest in $priceQuoteDoc/priceQuote/priceRequests/priceRequest, $availRequest in $availQuoteDoc/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> };