You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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>
};

  • No labels