1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
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.
|