Holder Pattern Service Sample | |
====================================== | |
This sample demonstrates an SCA service that uses a web service binding. The | |
web service binding has been generated from a given WSDL file: | |
src/main/resources/wsdl/orderservice.wsdl | |
The generated binding has been placed in src/main/java/org/examle/orderservice | |
and was generated via the JDK tool wsimport and the command: | |
wsimport -d orderservice -keep orderservice.wsdl | |
The interesting feature of this sample is that the generated service interface, | |
OrderService, contains a method with the signature: | |
public void reviewOrder( | |
@WebParam(name = "myData", targetNamespace = "", mode = WebParam.Mode.INOUT) | |
javax.xml.ws.Holder<Order> orderData); | |
The orderData parameter is an input/output parameter that is provided by the caller, | |
updated by the service, and returned to the caller. The business object is updated | |
in place, a common pattern in web services, and not returned as a response. Tuscany | |
can handle limited instances of this pattern. | |
The README in the samples directory (the directory above this) provides | |
general instructions about building and running samples. Take a look there | |
first. | |
If you just want to run it to see what happens open a command prompt, navigate | |
to this sample directory and do: | |
ant run | |
OR if you don't have ant, on Windows do | |
java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-holder-ws-service.jar org.example.orderservice.OrderServiceTestCase | |
and on *nix do | |
java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-holder-ws-service.jar org.example.orderservice.OrderServiceTestCase | |
Sample Overview | |
--------------- | |
The sample provides a single component that is wired to a service with a | |
web service binding. | |
holder-ws-service/ | |
src/ | |
main/ | |
java/ | |
org/ | |
example/ | |
orderservice | |
*.java - Web service binding generated from | |
HelloWorldServiceComponent | |
resources/ | |
wsdl/ | |
orderservice.wsdl - the service description that describes | |
the exposed service | |
orderws.composite - the SCA assembly that uses this service | |
test/ | |
java/ | |
helloworld/ | |
org/ | |
example/ | |
orderservice/ | |
OrderServiceTestCase.java - JUnit test case | |
build.xml - the Ant build file | |
pom.xml - the Maven build file | |
Building And Running The Sample Using Ant | |
----------------------------------------- | |
With the binary distribution the sample can be built and run using Ant using the | |
following commands | |
cd holder-ws-service | |
ant compile | |
ant run | |
You should see the following output from the run target. | |
run: | |
[java] 14-Jan-2008 14:18:47 org.apache.tuscany.sca.http.jetty.JettyServer a | |
ddServletMapping | |
[java] INFO: Added Servlet mapping: http://L3AW203:8085/HelloWorldService | |
[java] HelloWorld server started (press enter to shutdown) | |
As this point the SCA service is exposed as a web service by a web server | |
started automatically by the SCA runtime. To stop the server just press | |
enter. | |
To exercise the service run up the helloworld-ws-reference sample. Take a look at | |
the README in that sample and you will see you need the following commands | |
cd holder-ws-reference | |
ant 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. When using Maven you don't need to run the helloworld- | |
ws-reference sample as Maven includes a simple ping test to make sure that the | |
service is available | |
cd holder-ws-service | |
mvn | |
You should see the following output from the test phase. | |
------------------------------------------------------- | |
T E S T S | |
------------------------------------------------------- | |
Running org.example.orderservice.OrderServiceTestCase | |
Jan 21, 2009 9:31:11 AM org.apache.tuscany.sca.node.impl.NodeImpl <init> | |
INFO: Creating node: META-INF/sca-deployables/orderws.composite | |
Jan 21, 2009 9:31:13 AM org.apache.tuscany.sca.node.impl.NodeImpl configureNode | |
INFO: Loading contribution: file:/E:/t/branches/sca-java-1.x/samples/holder-ws-webservice/target/classes/ | |
Jan 21, 2009 9:31:14 AM org.apache.tuscany.sca.node.impl.NodeImpl configureNode | |
INFO: Loading composite: file:/E:/t/branches/sca-java-1.x/samples/holder-ws-webservice/target/classes/META-INF/sca-deployables/orderws.composite | |
Jan 21, 2009 9:31:14 AM org.apache.tuscany.sca.node.impl.NodeImpl start | |
INFO: Starting node: META-INF/sca-deployables/orderws.composite | |
- No JMS connection factories are defined.Will not listen for any JMS messages | |
Jan 21, 2009 9:31:15 AM org.apache.catalina.core.StandardEngine start | |
INFO: Starting Servlet Engine: Apache Tomcat/6.0.14 | |
Jan 21, 2009 9:31:15 AM org.apache.catalina.startup.ContextConfig defaultWebConfig | |
INFO: No default web.xml | |
Jan 21, 2009 9:31:15 AM org.apache.coyote.http11.Http11Protocol init | |
INFO: Initializing Coyote HTTP/1.1 on http-8085 | |
Jan 21, 2009 9:31:15 AM org.apache.coyote.http11.Http11Protocol start | |
INFO: Starting Coyote HTTP/1.1 on http-8085 | |
- No JMS connection factories are defined.Will not listen for any JMS messages | |
Jan 21, 2009 9:31:15 AM org.apache.tuscany.sca.http.tomcat.TomcatServer addServletMapping | |
INFO: Added Servlet mapping: http://T602010:8085/OrderService | |
>>> Order submitted=Order[customerId=cust1234,orderId=0,total=50.0,status=Created] | |
>>> OrderService.reviewOrder return=Order[customerId=cust1234,orderId=0,total=50.0,status=Approved] | |
>>> Order returned=Order[customerId=cust1234,orderId=0,total=50.0,status=Approved] | |
Jan 21, 2009 9:31:16 AM org.apache.tuscany.sca.node.impl.NodeImpl stop | |
INFO: Stopping node: META-INF/sca-deployables/orderws.composite | |
Jan 21, 2009 9:31:17 AM org.apache.tuscany.sca.http.tomcat.TomcatServer removeServletMapping | |
INFO: Removed Servlet mapping: http://T602010:8085/OrderService | |
Jan 21, 2009 9:31:17 AM org.apache.coyote.http11.Http11Protocol destroy | |
INFO: Stopping Coyote HTTP/1.1 on http-8085 | |
Note the console output with ">>>" prefix. This shows that an order was submitted in | |
the "Created" state, handled by the OrderService reviewOrder method, and returned in | |
the "Approved" state. This shows that the Junit test cases have run successfully. |