diff options
Diffstat (limited to 'sca-java-1.x/trunk/samples/holder-ws-service')
16 files changed, 1301 insertions, 0 deletions
diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/README b/sca-java-1.x/trunk/samples/holder-ws-service/README new file mode 100644 index 0000000000..8c91a1b92d --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/README @@ -0,0 +1,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.
diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/build.xml b/sca-java-1.x/trunk/samples/holder-ws-service/build.xml new file mode 100644 index 0000000000..12d466172b --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/build.xml @@ -0,0 +1,72 @@ +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<project name="holder-ws-service" default="compile"> + <property name="test.class" value="org.example.orderservice.OrderServiceServer" /> + <property name="test.jar" value="sample-holder-ws-service.jar" /> + + <target name="init"> + <mkdir dir="target/classes"/> + </target> + + <target name="compile" depends="init"> + <javac srcdir="src/main/java" + destdir="target/classes" + debug="on" + source="1.5" + target="1.5"> + <classpath> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + </classpath> + </javac> + <copy todir="target/classes"> + <fileset dir="src/main/resources"/> + </copy> + <jar destfile="target/${test.jar}" basedir="target/classes"> + <manifest> + <attribute name="Main-Class" value="${test.class}" /> + </manifest> + </jar> + </target> + + <target name="run-classes"> + <java classname="${test.class}" + fork="true"> + <classpath> + <pathelement path="target/classes"/> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + </classpath> + </java> + </target> + + <target name="run"> + <java classname="${test.class}" + fork="true"> + <classpath> + <pathelement path="target/${test.jar}"/> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + </classpath> + </java> + </target> + + <target name="clean"> + <delete quiet="true" includeemptydirs="true"> + <fileset dir="target"/> + </delete> + </target> +</project> diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/pom.xml b/sca-java-1.x/trunk/samples/holder-ws-service/pom.xml new file mode 100644 index 0000000000..09ccdc413b --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/pom.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. +--> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca</artifactId> + <version>1.6-SNAPSHOT</version> + <relativePath>../../pom.xml</relativePath> + </parent> + <artifactId>sample-holder-ws-service</artifactId> + <name>Apache Tuscany SCA Holder Input/Output Web Service Sample</name> + + <repositories> + <repository> + <id>apache.incubator</id> + <url>http://people.apache.org/repo/m2-incubating-repository</url> + </repository> + </repositories> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-embedded</artifactId> + <version>1.6-SNAPSHOT</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>1.6-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-ws-axis2</artifactId> + <version>1.6-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + <version>1.6-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.5</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <finalName>${artifactId}</finalName> + </build> + +</project> diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ObjectFactory.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ObjectFactory.java new file mode 100644 index 0000000000..4b5dffbcfa --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ObjectFactory.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.xml.bind.annotation.XmlRegistry; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the org.example.orderservice package. + * <p>An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.example.orderservice + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link ReviewOrderResponse } + * + */ + public ReviewOrderResponse createReviewOrderResponse() { + return new ReviewOrderResponse(); + } + + /** + * Create an instance of {@link Order } + * + */ + public Order createOrder() { + return new Order(); + } + + /** + * Create an instance of {@link ReviewOrder } + * + */ + public ReviewOrder createReviewOrder() { + return new ReviewOrder(); + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Order.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Order.java new file mode 100644 index 0000000000..76caa96d92 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Order.java @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for order complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType name="order"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="customerId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="status" type="{http://www.example.org/OrderService/}status" minOccurs="0"/> + * <element name="total" type="{http://www.w3.org/2001/XMLSchema}double"/> + * <element name="orderId" type="{http://www.w3.org/2001/XMLSchema}int"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "order", propOrder = { + "customerId", + "status", + "total", + "orderId" +}) +public class Order { + + protected String customerId; + protected Status status; + protected double total; + protected int orderId; + + /** + * Gets the value of the customerId property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getCustomerId() { + return customerId; + } + + /** + * Sets the value of the customerId property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setCustomerId(String value) { + this.customerId = value; + } + + /** + * Gets the value of the status property. + * + * @return + * possible object is + * {@link Status } + * + */ + public Status getStatus() { + return status; + } + + /** + * Sets the value of the status property. + * + * @param value + * allowed object is + * {@link Status } + * + */ + public void setStatus(Status value) { + this.status = value; + } + + /** + * Gets the value of the total property. + * + */ + public double getTotal() { + return total; + } + + /** + * Sets the value of the total property. + * + */ + public void setTotal(double value) { + this.total = value; + } + + /** + * Gets the value of the orderId property. + * + */ + public int getOrderId() { + return orderId; + } + + /** + * Sets the value of the orderId property. + * + */ + public void setOrderId(int value) { + this.orderId = value; + } + + // Added manually from wsimport generated class to improve debugging. + public String toString() { + return "Order[customerId=" + customerId + ",orderId=" + orderId + ",total=" + total + ",status=" + status.value() + "]"; + } +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService.java new file mode 100644 index 0000000000..f0d2b5caa1 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.jws.WebService; +import javax.xml.bind.annotation.XmlSeeAlso; +import javax.xml.ws.Holder; +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.1.1 in JDK 6 + * Generated source version: 2.1 + * + */ +@WebService(name = "OrderService", targetNamespace = "http://www.example.org/OrderService/") +@XmlSeeAlso({ + ObjectFactory.class +}) +public interface OrderService { + + + /** + * + * @param myData + */ + @WebMethod(action = "http://www.example.org/OrderService/reviewOrder") + @RequestWrapper(localName = "reviewOrder", targetNamespace = "http://www.example.org/OrderService/", className = "org.example.orderservice.ReviewOrder") + @ResponseWrapper(localName = "reviewOrderResponse", targetNamespace = "http://www.example.org/OrderService/", className = "org.example.orderservice.ReviewOrderResponse") + public void reviewOrder( + @WebParam(name = "myData", targetNamespace = "", mode = WebParam.Mode.INOUT) + Holder<Order> myData); + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceImpl.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceImpl.java new file mode 100644 index 0000000000..e4ae074437 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceImpl.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.example.orderservice; + +// import org.osoa.sca.annotations.Service; +import java.util.Random; + +import javax.jws.WebMethod; +import javax.jws.WebParam; +import javax.xml.ws.Holder; +import javax.xml.ws.RequestWrapper; +import javax.xml.ws.ResponseWrapper; + +/** + * This class implements the OrderService service. + */ +// @Service(OrderService.class) +public class OrderServiceImpl implements OrderService { + + /** This dummy implementation approves or rejects orders: + * < 100 - always approved. + * 100-1100 - randomly approved. Probability = (1100 - amount)/10 + * >1100 - always rejected. + */ + // public Order reviewOrder(Order order) { + @WebMethod(action = "http://www.example.org/OrderService/reviewOrder") + @RequestWrapper(localName = "reviewOrder", targetNamespace = "http://www.example.org/OrderService/", className = "org.example.orderservice.ReviewOrder") + @ResponseWrapper(localName = "reviewOrderResponse", targetNamespace = "http://www.example.org/OrderService/", className = "org.example.orderservice.ReviewOrderResponse") + public void reviewOrder( + @WebParam(name = "myData", targetNamespace = "", mode = WebParam.Mode.INOUT) + Holder<Order> myData) { + Order order = myData.value; + double total = order.getTotal(); + if ( total < 100.0 ) { + order.setStatus( Status.APPROVED ); + } else if ( total > 1100.0 ) { + order.setStatus( Status.REJECTED ); + } else { + int probability = (int) ((-100.0 + total) / 10.0); + Random approver = new Random(); + if ( approver.nextInt( 100 ) < probability ) + order.setStatus( Status.APPROVED ); + else + order.setStatus( Status.REJECTED ); + } + System.out.println( ">>> OrderService.reviewOrder return=" + order ); + // return order; + } +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceServer.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceServer.java new file mode 100644 index 0000000000..053fbde729 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderServiceServer.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.example.orderservice; + +import java.io.IOException; +import javax.xml.ws.Holder; +import org.apache.tuscany.sca.host.embedded.SCADomain; + +/** + * Tests that the order server responds. + */ +public class OrderServiceServer { + + private SCADomain scaDomain; + + public static void main(String[] args) throws Exception { + OrderServiceServer oss = new OrderServiceServer(); + + oss.startServer(); + oss.testOrderReviewApproved(); + oss.testOrderReviewRejected(); + oss.testOrderReviewRandom(); + oss.stopServer(); + } + + + public void startServer() throws Exception { + scaDomain = SCADomain.newInstance("META-INF/sca-deployables/orderws.composite"); + } + + public void testOrderReviewApproved() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust1234"); + order.setTotal( 50.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + } + + + public void testOrderReviewRejected() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust2345"); + order.setTotal( 50000.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + } + + public void testOrderReviewRandom() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust3456"); + order.setTotal( 600.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + } + + + public void stopServer() throws Exception { + if (scaDomain != null) + scaDomain.close(); + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService_Service.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService_Service.java new file mode 100644 index 0000000000..4a394f2542 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/OrderService_Service.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import java.net.MalformedURLException; +import java.net.URL; +import javax.xml.namespace.QName; +import javax.xml.ws.Service; +import javax.xml.ws.WebEndpoint; +import javax.xml.ws.WebServiceClient; +import javax.xml.ws.WebServiceFeature; + + +/** + * This class was generated by the JAX-WS RI. + * JAX-WS RI 2.1.1 in JDK 6 + * Generated source version: 2.1 + * + */ +@WebServiceClient(name = "OrderService", targetNamespace = "http://www.example.org/OrderService/", wsdlLocation = "META-INF/sca-deployables/orderservice.wsdl") +public class OrderService_Service + extends Service +{ + + private final static URL ORDERSERVICE_WSDL_LOCATION; + + static { + URL url = null; + try { + url = new URL("META-INF/sca-deployables/orderservice.wsdl"); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + ORDERSERVICE_WSDL_LOCATION = url; + } + + public OrderService_Service(URL wsdlLocation, QName serviceName) { + super(wsdlLocation, serviceName); + } + + public OrderService_Service() { + super(ORDERSERVICE_WSDL_LOCATION, new QName("http://www.example.org/OrderService/", "OrderService")); + } + + /** + * + * @return + * returns OrderService + */ + @WebEndpoint(name = "OrderServiceSOAP") + public OrderService getOrderServiceSOAP() { + return (OrderService)super.getPort(new QName("http://www.example.org/OrderService/", "OrderServiceSOAP"), OrderService.class); + } + + /** + * + * @param features + * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values. + * @return + * returns OrderService + */ + @WebEndpoint(name = "OrderServiceSOAP") + public OrderService getOrderServiceSOAP(WebServiceFeature... features) { + return (OrderService)super.getPort(new QName("http://www.example.org/OrderService/", "OrderServiceSOAP"), OrderService.class, features); + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrder.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrder.java new file mode 100644 index 0000000000..f4c1add0dd --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrder.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="myData" type="{http://www.example.org/OrderService/}order"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "myData" +}) +@XmlRootElement(name = "reviewOrder") +public class ReviewOrder { + + @XmlElement(required = true) + protected Order myData; + + /** + * Gets the value of the myData property. + * + * @return + * possible object is + * {@link Order } + * + */ + public Order getMyData() { + return myData; + } + + /** + * Sets the value of the myData property. + * + * @param value + * allowed object is + * {@link Order } + * + */ + public void setMyData(Order value) { + this.myData = value; + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrderResponse.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrderResponse.java new file mode 100644 index 0000000000..4e7187522a --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/ReviewOrderResponse.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="myData" type="{http://www.example.org/OrderService/}order"/> + * </sequence> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "", propOrder = { + "myData" +}) +@XmlRootElement(name = "reviewOrderResponse") +public class ReviewOrderResponse { + + @XmlElement(required = true) + protected Order myData; + + /** + * Gets the value of the myData property. + * + * @return + * possible object is + * {@link Order } + * + */ + public Order getMyData() { + return myData; + } + + /** + * Sets the value of the myData property. + * + * @param value + * allowed object is + * {@link Order } + * + */ + public void setMyData(Order value) { + this.myData = value; + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Status.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Status.java new file mode 100644 index 0000000000..4c16ac26e6 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/Status.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.example.orderservice; + +import javax.xml.bind.annotation.XmlEnum; +import javax.xml.bind.annotation.XmlEnumValue; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for status. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * <p> + * <pre> + * <simpleType name="status"> + * <restriction base="{http://www.w3.org/2001/XMLSchema}string"> + * <enumeration value="Created"/> + * <enumeration value="Submitted"/> + * <enumeration value="Approved"/> + * <enumeration value="Rejected"/> + * </restriction> + * </simpleType> + * </pre> + * + */ +@XmlType(name = "status") +@XmlEnum +public enum Status { + + @XmlEnumValue("Created") + CREATED("Created"), + @XmlEnumValue("Submitted") + SUBMITTED("Submitted"), + @XmlEnumValue("Approved") + APPROVED("Approved"), + @XmlEnumValue("Rejected") + REJECTED("Rejected"); + private final String value; + + Status(String v) { + value = v; + } + + public String value() { + return value; + } + + public static Status fromValue(String v) { + for (Status c: Status.values()) { + if (c.value.equals(v)) { + return c; + } + } + throw new IllegalArgumentException(v); + } + +} diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/package-info.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/package-info.java new file mode 100644 index 0000000000..ac03c52974 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/java/org/example/orderservice/package-info.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.example.org/OrderService/") +package org.example.orderservice; diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/META-INF/sca-deployables/orderws.composite b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/META-INF/sca-deployables/orderws.composite new file mode 100644 index 0000000000..d34891d1af --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/META-INF/sca-deployables/orderws.composite @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://orderservice"
+ xmlns:hw="http://orderservice"
+ name="orderws">
+
+ <component name="OrderServiceComponent">
+ <implementation.java class="org.example.orderservice.OrderServiceImpl" />
+ <service name="OrderService">
+ <interface.wsdl interface="http://www.example.org/OrderService/#wsdl.interface(OrderService)" />
+ <binding.ws uri="http://localhost:8085/OrderService"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/wsdl/orderservice.wsdl b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/wsdl/orderservice.wsdl new file mode 100644 index 0000000000..d016994679 --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/main/resources/wsdl/orderservice.wsdl @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/OrderService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="OrderService" targetNamespace="http://www.example.org/OrderService/">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://www.example.org/OrderService/">
+ <xsd:complexType name="order">
+ <xsd:sequence>
+ <xsd:element name="customerId" type="xsd:string" minOccurs="0" />
+ <xsd:element name="status" type="tns:status" minOccurs="0" />
+ <xsd:element name="total" type="xsd:double" />
+ <xsd:element name="orderId" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:simpleType name="status">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Created" />
+ <xsd:enumeration value="Submitted" />
+ <xsd:enumeration value="Approved" />
+ <xsd:enumeration value="Rejected" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:element name="reviewOrder">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="myData" type="tns:order"
+ minOccurs="1" maxOccurs="1" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="reviewOrderResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="myData" type="tns:order"
+ minOccurs="1" maxOccurs="1" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="reviewOrderRequest">
+ <wsdl:part element="tns:reviewOrder" name="myParameters"/>
+ </wsdl:message>
+ <wsdl:message name="reviewOrderResponse">
+ <wsdl:part element="tns:reviewOrderResponse" name="myResult"/>
+ </wsdl:message>
+ <wsdl:portType name="OrderService">
+ <wsdl:operation name="reviewOrder">
+ <wsdl:input message="tns:reviewOrderRequest"/>
+ <wsdl:output message="tns:reviewOrderResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="OrderServiceSOAP" type="tns:OrderService">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="reviewOrder">
+ <soap:operation soapAction="http://www.example.org/OrderService/reviewOrder"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="OrderService">
+ <wsdl:port binding="tns:OrderServiceSOAP" name="OrderServiceSOAP">
+ <soap:address location="http://www.example.org/"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-java-1.x/trunk/samples/holder-ws-service/src/test/java/org/example/orderservice/OrderServiceTestCase.java b/sca-java-1.x/trunk/samples/holder-ws-service/src/test/java/org/example/orderservice/OrderServiceTestCase.java new file mode 100644 index 0000000000..878e97465e --- /dev/null +++ b/sca-java-1.x/trunk/samples/holder-ws-service/src/test/java/org/example/orderservice/OrderServiceTestCase.java @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.example.orderservice; + +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + + +import java.io.IOException; +import javax.xml.ws.Holder; +import org.apache.tuscany.sca.host.embedded.SCADomain; + +/** + * Tests that the order server responds. + */ +public class OrderServiceTestCase { + + private SCADomain scaDomain; + + @Before + public void startServer() throws Exception { + scaDomain = SCADomain.newInstance("META-INF/sca-deployables/orderws.composite"); + } + + @Test + public void testOrderReviewApproved() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + assertNotNull(orderService); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust1234"); + order.setTotal( 50.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + assertTrue( holder.value.getStatus() == Status.APPROVED ); + } + + @Test + public void testOrderReviewRejected() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + assertNotNull(orderService); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust2345"); + order.setTotal( 50000.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + assertTrue( holder.value.getStatus() == Status.REJECTED ); + } + + @Test + public void testOrderReviewRandom() throws IOException { + OrderService orderService = + scaDomain.getService(OrderService.class, "OrderServiceComponent/OrderService"); + assertNotNull(orderService); + + Order order = new Order(); + order.setStatus( Status.CREATED ); + order.setCustomerId("cust3456"); + order.setTotal( 600.0 ); + + System.out.println( ">>> Order submitted=" + order ); + Holder<Order> holder = new Holder<Order>( order ); + orderService.reviewOrder( holder ); + System.out.println( ">>> Order returned=" + holder.value ); + assertTrue( holder.value.getStatus() != Status.CREATED ); + } + + @After + public void stopServer() throws Exception { + if (scaDomain != null) + scaDomain.close(); + } + +} |