Quote Xquery Sample | |
=================== | |
This sample covers the most important integration scenarios for the xquery | |
implementation type and its corresponding saxon data bindings. | |
If you just want to run it to see what happens open two command prompts (one for the server | |
and the other for the client), navigate to this sample directory and do: | |
Command Prompt 1: | |
ant | |
ant run-server | |
Command Prompt 2: | |
ant run | |
OR if you don't have ant, on Windows do | |
In the directory samples\quote-xquery use the JDK 1.5 java command to run the class xquery.quote.XQueryQuoteClient | |
Linux: java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-quote-xquery.jar xquery.quote.XQueryQuoteServer | |
Linux: java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-quote-xquery.jar xquery.quote.XQueryQuoteClient | |
Windows: java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-quote-xquery.jar xquery.quote.XQueryQuoteServer | |
Windows: java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-quote-xquery.jar xquery.quote.XQueryQuoteClient | |
Results | |
---------- | |
The sample when run should simply display on the standard output some startup messages followed by: | |
The compilation: | |
Buildfile: build.xml | |
init: | |
generate-sdo: | |
[java] >> Generating code | |
[java] >> Generating packages | |
[java] >> Generating package QuotePackageImpl | |
[java] >> Generating Java interface org.example.quote.QuoteFactory | |
[java] >> Generating /TargetProject/org/example/quote/QuoteFactory.java | |
[java] >> Examining old /TargetProject/org/example/quote/QuoteFactory.java | |
[java] >> Generating Java class org.example.quote.impl.QuoteFactoryImpl | |
[java] >> Generating /TargetProject/org/example/quote/impl/QuoteFactoryImpl.java | |
[java] >> Examining old /TargetProject/org/example/quote/impl/QuoteFactoryImpl.java | |
[java] >> Generating Quote | |
[java] >> Generating Java interface org.example.quote.Quote | |
[java] >> Generating /TargetProject/org/example/quote/Quote.java | |
[java] >> Examining old /TargetProject/org/example/quote/Quote.java | |
[java] >> Generating Java class org.example.quote.impl.QuoteImpl | |
[java] >> Generating /TargetProject/org/example/quote/impl/QuoteImpl.java | |
[java] >> Examining old /TargetProject/org/example/quote/impl/QuoteImpl.java | |
[java] >> Generating Response | |
[java] >> Generating Java interface org.example.quote.QuoteResponse | |
[java] >> Generating /TargetProject/org/example/quote/QuoteResponse.java | |
[java] >> Examining old /TargetProject/org/example/quote/QuoteResponse.java | |
[java] >> Generating Java class org.example.quote.impl.QuoteResponseImpl | |
[java] >> Generating /TargetProject/org/example/quote/impl/QuoteResponseImpl.java | |
[java] >> Examining old /TargetProject/org/example/quote/impl/QuoteResponseImpl.java | |
[java] >> Generating code | |
[java] >> Generating packages | |
[java] >> Generating package AvailPackageImpl | |
[java] >> Generating Java interface org.example.avail.AvailFactory | |
[java] >> Generating /TargetProject/org/example/avail/AvailFactory.java | |
[java] >> Examining old /TargetProject/org/example/avail/AvailFactory.java | |
[java] >> Generating Java class org.example.avail.impl.AvailFactoryImpl | |
[java] >> Generating /TargetProject/org/example/avail/impl/AvailFactoryImpl.java | |
[java] >> Examining old /TargetProject/org/example/avail/impl/AvailFactoryImpl.java | |
[java] >> Generating Quote | |
[java] >> Generating Java interface org.example.avail.AvailQuote | |
[java] >> Generating /TargetProject/org/example/avail/AvailQuote.java | |
[java] >> Examining old /TargetProject/org/example/avail/AvailQuote.java | |
[java] >> Generating Java class org.example.avail.impl.AvailQuoteImpl | |
[java] >> Generating /TargetProject/org/example/avail/impl/AvailQuoteImpl.java | |
[java] >> Examining old /TargetProject/org/example/avail/impl/AvailQuoteImpl.java | |
[java] >> Generating Request | |
[java] >> Generating Java interface org.example.avail.AvailRequest | |
[java] >> Generating /TargetProject/org/example/avail/AvailRequest.java | |
[java] >> Examining old /TargetProject/org/example/avail/AvailRequest.java | |
[java] >> Generating Java class org.example.avail.impl.AvailRequestImpl | |
[java] >> Generating /TargetProject/org/example/avail/impl/AvailRequestImpl.java | |
[java] >> Examining old /TargetProject/org/example/avail/impl/AvailRequestImpl.java | |
[java] >> Generating code | |
[java] >> Generating packages | |
[java] >> Generating package PricePackageImpl | |
[java] >> Generating Java interface org.example.price.PriceFactory | |
[java] >> Generating /TargetProject/org/example/price/PriceFactory.java | |
[java] >> Examining old /TargetProject/org/example/price/PriceFactory.java | |
[java] >> Generating Java class org.example.price.impl.PriceFactoryImpl | |
[java] >> Generating /TargetProject/org/example/price/impl/PriceFactoryImpl.java | |
[java] >> Examining old /TargetProject/org/example/price/impl/PriceFactoryImpl.java | |
[java] >> Generating Quote | |
[java] >> Generating Java interface org.example.price.PriceQuote | |
[java] >> Generating /TargetProject/org/example/price/PriceQuote.java | |
[java] >> Examining old /TargetProject/org/example/price/PriceQuote.java | |
[java] >> Generating Java class org.example.price.impl.PriceQuoteImpl | |
[java] >> Generating /TargetProject/org/example/price/impl/PriceQuoteImpl.java | |
[java] >> Examining old /TargetProject/org/example/price/impl/PriceQuoteImpl.java | |
[java] >> Generating Request | |
[java] >> Generating Java interface org.example.price.PriceRequest | |
[java] >> Generating /TargetProject/org/example/price/PriceRequest.java | |
[java] >> Examining old /TargetProject/org/example/price/PriceRequest.java | |
[java] >> Generating Java class org.example.price.impl.PriceRequestImpl | |
[java] >> Generating /TargetProject/org/example/price/impl/PriceRequestImpl.java | |
[java] >> Examining old /TargetProject/org/example/price/impl/PriceRequestImpl.java | |
[java] >> Generating Requests | |
[java] >> Generating Java interface org.example.price.PriceRequests | |
[java] >> Generating /TargetProject/org/example/price/PriceRequests.java | |
[java] >> Examining old /TargetProject/org/example/price/PriceRequests.java | |
[java] >> Generating Java class org.example.price.impl.PriceRequestsImpl | |
[java] >> Generating /TargetProject/org/example/price/impl/PriceRequestsImpl.java | |
[java] >> Examining old /TargetProject/org/example/price/impl/PriceRequestsImpl.java | |
[java] >> Generating Ship Address | |
[java] >> Generating Java interface org.example.price.ShipAddress | |
[java] >> Generating /TargetProject/org/example/price/ShipAddress.java | |
[java] >> Examining old /TargetProject/org/example/price/ShipAddress.java | |
[java] >> Generating Java class org.example.price.impl.ShipAddressImpl | |
[java] >> Generating /TargetProject/org/example/price/impl/ShipAddressImpl.java | |
[java] >> Examining old /TargetProject/org/example/price/impl/ShipAddressImpl.java | |
compile: | |
[jar] Building jar: C:\Apache\tuscany-sca-1.0-incubating-SNAPSHOT\samples\quote-xquery\target\sample-quote-xquery.jar | |
BUILD SUCCESSFUL | |
The service side: | |
run-server: | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.core.StandardEngine start | |
[java] INFO: Starting Servlet Engine: Apache Tomcat/6.0.10 | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.ContextConfig defaultWebConfig | |
[java] INFO: No default web.xml | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.DigesterFactory register | |
[java] WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.DigesterFactory register | |
[java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_1.dtd | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.DigesterFactory register | |
[java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_2.dtd | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.DigesterFactory register | |
[java] WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_0.xsd | |
[java] Sep 18, 2007 1:14:16 PM org.apache.catalina.startup.DigesterFactory register | |
[java] WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xsd | |
[java] Sep 18, 2007 1:14:17 PM org.apache.coyote.http11.Http11Protocol init | |
[java] INFO: Initializing Coyote HTTP/1.1 on http-8085 | |
[java] Sep 18, 2007 1:14:17 PM org.apache.coyote.http11.Http11Protocol start | |
[java] INFO: Starting Coyote HTTP/1.1 on http-8085 | |
[java] Sep 18, 2007 1:14:17 PM org.apache.tuscany.sca.http.tomcat.TomcatServer addServletMapping | |
[java] INFO: Added Servlet mapping: http://localhost:8085/QuoteJoinService | |
[java] Sep 18, 2007 1:14:17 PM org.apache.tuscany.sca.http.tomcat.TomcatServer addServletMapping | |
[java] INFO: Added Servlet mapping: http://localhost:8085/AvailQuoteProviderService | |
[java] XQuery Quote server started (press enter to shutdown) | |
[java] Sep 18, 2007 1:16:54 PM org.apache.coyote.http11.Http11Protocol destroy | |
[java] INFO: Stopping Coyote HTTP/1.1 on http-8085 | |
BUILD SUCCESSFUL | |
Total time: 2 minutes 51 seconds | |
The client side: | |
Buildfile: build.xml | |
run: | |
[java] Input quote for the price list: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <priceQuote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pri="http://www.example.org/price" xsi:type="pri:PriceQuote"> | |
[java] <customerName>Acme Inc</customerName> | |
[java] <shipAddress street="12 Springs Rd" city="Morris Plains" state="nj" zip="07960"/> | |
[java] <priceRequests> | |
[java] <priceRequest> | |
[java] <widgetId>12</widgetId> | |
[java] <price>1.0</price> | |
[java] </priceRequest> | |
[java] <priceRequest> | |
[java] <widgetId>134</widgetId> | |
[java] <price>34.1</price> | |
[java] </priceRequest> | |
[java] <priceRequest> | |
[java] <widgetId>211</widgetId> | |
[java] <price>10.0</price> | |
[java] </priceRequest> | |
[java] </priceRequests> | |
[java] </priceQuote> | |
[java] | |
[java] Input quote for the availability: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <availQuote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ava="http://www.example.org/avail" xsi:type="ava:AvailQuote"> | |
[java] <availRequest> | |
[java] <widgetId>12</widgetId> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <quantityAvail>true</quantityAvail> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] </availRequest> | |
[java] <availRequest> | |
[java] <widgetId>134</widgetId> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <quantityAvail>false</quantityAvail> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] </availRequest> | |
[java] <availRequest> | |
[java] <widgetId>211</widgetId> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <quantityAvail>true</quantityAvail> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] </availRequest> | |
[java] </availQuote> | |
[java] | |
[java] | |
[java] Output quote from local join: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:quo="http://www.example.org/quote" xsi:type="quo:Quote"> | |
[java] <name>Acme Inc</name> | |
[java] <address>12 Springs Rd,Morris Plains,NJ,07960</address> | |
[java] <quoteResponse> | |
[java] <widgetId>12</widgetId> | |
[java] <unitPrice>1.0</unitPrice> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>11.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>134</widgetId> | |
[java] <unitPrice>34.1</unitPrice> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <fillOrder>false</fillOrder> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>0.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>211</widgetId> | |
[java] <unitPrice>10.0</unitPrice> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>1100.0</totalCost> | |
[java] </quoteResponse> | |
[java] </quote> | |
[java] | |
[java] | |
[java] Output quote from local join (second invokation): | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:quo="http://www.example.org/quote" xsi:type="quo:Quote"> | |
[java] <name>Acme Inc</name> | |
[java] <address>12 Springs Rd,Morris Plains,NJ,07960</address> | |
[java] <quoteResponse> | |
[java] <widgetId>12</widgetId> | |
[java] <unitPrice>1.0</unitPrice> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] <taxRate>0.2</taxRate> | |
[java] <totalCost>12.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>134</widgetId> | |
[java] <unitPrice>34.1</unitPrice> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <fillOrder>false</fillOrder> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] <taxRate>0.2</taxRate> | |
[java] <totalCost>0.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>211</widgetId> | |
[java] <unitPrice>10.0</unitPrice> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] <taxRate>0.2</taxRate> | |
[java] <totalCost>1200.0</totalCost> | |
[java] </quoteResponse> | |
[java] </quote> | |
[java] | |
[java] | |
[java] Output quote from web service join: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:quo="http://www.example.org/quote" xsi:type="quo:Quote"> | |
[java] <name>Acme Inc</name> | |
[java] <address>12 Springs Rd,Morris Plains,NJ,07960</address> | |
[java] <quoteResponse> | |
[java] <widgetId>12</widgetId> | |
[java] <unitPrice>1.0</unitPrice> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>11.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>134</widgetId> | |
[java] <unitPrice>34.1</unitPrice> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <fillOrder>false</fillOrder> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>0.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>211</widgetId> | |
[java] <unitPrice>10.0</unitPrice> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>1100.0</totalCost> | |
[java] </quoteResponse> | |
[java] </quote> | |
[java] | |
[java] | |
[java] Output quote from properties join: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:quo="http://www.example.org/quote" xsi:type="quo:Quote"> | |
[java] <name>Acme Inc</name> | |
[java] <address>12 Springs Rd,Morris Plains,NJ,07960</address> | |
[java] <quoteResponse> | |
[java] <widgetId>12</widgetId> | |
[java] <unitPrice>1.0</unitPrice> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>11.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>134</widgetId> | |
[java] <unitPrice>34.1</unitPrice> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <fillOrder>false</fillOrder> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>0.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>211</widgetId> | |
[java] <unitPrice>10.0</unitPrice> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>1100.0</totalCost> | |
[java] </quoteResponse> | |
[java] </quote> | |
[java] | |
[java] | |
[java] Output quote from external references join: | |
[java] <?xml version="1.0" encoding="ASCII"?> | |
[java] <quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:quo="http://www.example.org/quote" xsi:type="quo:Quote"> | |
[java] <name>Acme Inc</name> | |
[java] <address>12 Springs Rd,Morris Plains,NJ,07960</address> | |
[java] <quoteResponse> | |
[java] <widgetId>12</widgetId> | |
[java] <unitPrice>1.0</unitPrice> | |
[java] <requestedQuantity>10</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-03-22</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>11.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>134</widgetId> | |
[java] <unitPrice>34.1</unitPrice> | |
[java] <requestedQuantity>345</requestedQuantity> | |
[java] <fillOrder>false</fillOrder> | |
[java] <shipDate>BackOrder</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>0.0</totalCost> | |
[java] </quoteResponse> | |
[java] <quoteResponse> | |
[java] <widgetId>211</widgetId> | |
[java] <unitPrice>10.0</unitPrice> | |
[java] <requestedQuantity>100</requestedQuantity> | |
[java] <fillOrder>true</fillOrder> | |
[java] <shipDate>2003-04-21</shipDate> | |
[java] <taxRate>0.1</taxRate> | |
[java] <totalCost>1100.0</totalCost> | |
[java] </quoteResponse> | |
[java] </quote> | |
[java] | |
BUILD SUCCESSFUL | |
Total time: 16 seconds | |
Sample Overview | |
--------------- | |
1. There is a central component for invoking the different | |
scenarios: QuoteJoinLocalComponent | |
2. It provides the following cases: | |
- invoke XQuery component in the current assembly, by providing all needed | |
information as input parameters | |
- invoke XQuery component in external assembly, which is exposed as a web | |
service | |
- invoke XQuery component in the current assembly, which retrieves the needed | |
information from the component properties | |
- invoke XQuery component in the current assembly, which retrieves the needed | |
information from its references to other components: | |
- one of the components is in the current assembly | |
- the other component is in anther assembly and it is exposed (and accessed) | |
as web service | |
3. All of the XQuery components have reference to a component for calculation of the | |
total price | |
4. SDO is used for data interchange | |
src/main/resources | |
wsdl | |
AvailQuote.xsd | |
PriceQuote.xsd | |
Quote.xsd | |
quotejoin.wsdl | |
META-INF | |
sca | |
quote_join_external_references.xq --- the external references xquery script | |
quote_join_properties.xq --- the property-based join xquery script | |
quote_join.xq --- the join xquery script | |
xqueryquotews.composite --- composite file for the client side | |
xqueryquotewsclient.composite --- composite file for the service side | |
build.xml - the Ant build file | |
pom.xml - the Maven build file | |
Building And Running The Sample Using Ant | |
----------------------------------------- | |
cd quote-xquery | |
ant compile | |
ant run-server | |
you should see: | |
Buildfile: build.xml | |
run: | |
Building And Running The Sample Using Maven | |
------------------------------------------- | |
With either the binary or source distributions the sample can be built and run | |
using Maven as follows. | |
cd quote-xquery | |
mvn | |
This shows that the Junit test cases have run successfully. |