summaryrefslogtreecommitdiffstats
path: root/java/sca/contrib/samples/helloworld-ws-service/README
blob: 72417d31604811ea24d23166b9e7e9a96b420d8d (plain)
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.