summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2010-01-27 14:40:10 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2010-01-27 14:40:10 +0000
commit39ef9a4855c593f1ea3a6bb122d5c22a50b371cb (patch)
treef0e08aa22b6c9260d3cb3c7fb0e7b8dea72ae560
parentedce121c4ed65d77bdd4a66501b04fefc0c637f6 (diff)
Copy of the Apache Wink HelloWorld example updated to show an approach to SCA integration
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@903659 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--collaboration/wink-helloworld-sca/build.xml81
-rw-r--r--collaboration/wink-helloworld-sca/pom.xml92
-rw-r--r--collaboration/wink-helloworld-sca/readme.txt15
-rw-r--r--collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/HelloWorld.java76
-rw-r--r--collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAService.java27
-rw-r--r--collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAServiceImpl.java29
-rw-r--r--collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/application14
-rw-r--r--collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.composite34
-rw-r--r--collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.xml48
-rw-r--r--collaboration/wink-helloworld-sca/src/test/java/org/apache/wink/example/helloworld/HelloWorldTest.java81
10 files changed, 497 insertions, 0 deletions
diff --git a/collaboration/wink-helloworld-sca/build.xml b/collaboration/wink-helloworld-sca/build.xml
new file mode 100644
index 0000000000..5461b36423
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/build.xml
@@ -0,0 +1,81 @@
+<?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 name="HelloWorld" default="dist" basedir=".">
+ <description>
+ Ant build file for Wink example Hello World
+ </description>
+
+ <property name="final.war.name" value="HelloWorld.war" />
+ <property name="sdk.jar.name" value="@SDK_JAR_NAME@" />
+
+
+ <!-- set global properties for this build -->
+ <property name="build" location="build" />
+ <property name="build.classes" location="${build}/classes" />
+ <property name="sdk.base" location="${basedir}/../../.." />
+ <property name="sdk.lib" location="${sdk.base}/lib" />
+ <property name="sdk.dist" location="${sdk.base}/dist" />
+ <property name="sdk.jar" location="${sdk.dist}/${sdk.jar.name}" />
+ <property name="final.war" location="${basedir}/${final.war.name}" />
+ <property name="main" location="${basedir}/src/main" />
+ <property name="webapp" location="${main}/webapp" />
+ <property name="resources" location="${main}/resources" />
+
+
+ <target name="init">
+ <!-- Create the build directory structure used by compile -->
+ <mkdir dir="${build.classes}" />
+ </target>
+
+
+ <target name="compile" depends="init" description="compile the source ">
+ <!-- Set classpath for SDK lib -->
+ <path id="sdk.classpath">
+ <fileset dir="${sdk.lib}" includes="**/*.jar" />
+ <pathelement path="${sdk.jar}" />
+ </path>
+
+ <!-- Compile the java code -->
+ <javac srcdir="${main}/java" destdir="${build.classes}">
+ <classpath refid="sdk.classpath" />
+ </javac>
+ </target>
+
+
+ <target name="dist" depends="compile" description="generate the distribution">
+
+ <!-- Create the war file -->
+ <war destfile="${final.war}" webxml="${webapp}/WEB-INF/web.xml">
+ <webinf dir="${webapp}/WEB-INF" includes="**/*" />
+ <classes dir="${build.classes}" includes="**/*" />
+ <lib dir="${sdk.lib}" includes="*.jar" />
+ <lib file="${sdk.jar}" />
+ </war>
+ </target>
+
+
+ <target name="clean" description="clean up">
+ <!-- Delete the ${build} and ${dist} directory trees -->
+ <delete dir="${build}" />
+ <delete file="${final.war}" />
+ </target>
+
+</project>
diff --git a/collaboration/wink-helloworld-sca/pom.xml b/collaboration/wink-helloworld-sca/pom.xml
new file mode 100644
index 0000000000..1f2bd0b053
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/pom.xml
@@ -0,0 +1,92 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <!-- Project detailes -->
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>HelloWorld</artifactId>
+ <packaging>war</packaging>
+ <name>Apache Wink Examples Apps :: HelloWorld</name>
+ <parent>
+ <groupId>org.apache.wink.example</groupId>
+ <artifactId>apps</artifactId>
+ <version>1.0-incubating</version>
+ </parent>
+ <build>
+ <finalName>HelloWorld</finalName>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <additionalClasspathElements>
+ <additionalClasspathElement>${basedir}/src/main/webapp/WEB-INF</additionalClasspathElement>
+ </additionalClasspathElements>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <!-- Dependency on Wink SDK library -->
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.wink</groupId>
+ <artifactId>wink-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.wink</groupId>
+ <artifactId>wink-component-test-support</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.wink</groupId>
+ <artifactId>wink-server</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-test</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-j2ee_1.4_spec</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca-api</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tuscany.sca.shades</groupId>
+ <artifactId>tuscany-base</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/collaboration/wink-helloworld-sca/readme.txt b/collaboration/wink-helloworld-sca/readme.txt
new file mode 100644
index 0000000000..939b22cef2
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/readme.txt
@@ -0,0 +1,15 @@
+HelloWorld Example
+===============================================================================
+
+Description
+===============================================================================
+- This example demonstrate the most basic implementation of a simple service
+- A simple Atom feed with a "Hello World!" title is returned from this URL:
+ http://localhost:8080/HelloWorld/rest/world
+
+
+Build
+===============================================================================
+- see build instructions in examples/readme.txt file
+
+--- readme.txt EOF ---
diff --git a/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/HelloWorld.java b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/HelloWorld.java
new file mode 100644
index 0000000000..17e72ee05c
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/HelloWorld.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.apache.wink.example.helloworld;
+
+import java.util.Date;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.wink.common.model.synd.SyndEntry;
+import org.apache.wink.common.model.synd.SyndText;
+
+import org.oasisopen.sca.annotation.Reference;
+
+/**
+ * Simple example - Hello World!
+ * <p/>
+ * The SDK dispatches HTTP requests for URI
+ * <code>http://[host]:[port]/HelloWorld/rest/world</code>, where
+ * <code>HelloWorld</code> is the context root, to this class. A simple Atom
+ * entry is returned in HTTP response.
+ * <p/>
+ * The service document is available at URI
+ * <code>http://[host]:[port]/HelloWorld/rest</code> but it is empty because
+ * this simple demo doesn't contain any collection of resources.
+ * <p/>
+ * This resource must be registered within a JAX-RS application, this example
+ * uses the default usage of application /WEB-INF/application
+ */
+@Path("/world")
+public class HelloWorld {
+ public static final String ID = "helloworld:1";
+
+ @Reference
+ protected SomeSCAService service;
+
+ /**
+ * This method is called by the SDK for HTTP GET method requests where the
+ * Accept header allows the Atom media type application/atom+xml. A
+ * SyndEntry is created with basic information. Serialization of the
+ * SyndEntry to Atom entry is performed by the SDK automatically. The
+ * default status code of 200 (OK) is returned in the response.
+ *
+ * @return SyndEntry of the requested resource
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_ATOM_XML)
+ public SyndEntry getGreeting() {
+ // create and return a syndication entry with a "Hello World!" title,
+ // some ID and the current time.
+ String text = service == null ? "SCA reference not injected" : service.getGreeting("World");
+ SyndEntry synd = new SyndEntry(new SyndText(text), ID, new Date());
+ return synd;
+ }
+
+}
diff --git a/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAService.java b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAService.java
new file mode 100644
index 0000000000..e88d087f12
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAService.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.apache.wink.example.helloworld;
+
+public interface SomeSCAService {
+
+ public String getGreeting(String name);
+
+}
diff --git a/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAServiceImpl.java b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAServiceImpl.java
new file mode 100644
index 0000000000..ac69311aa4
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAServiceImpl.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * 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.apache.wink.example.helloworld;
+
+public class SomeSCAServiceImpl implements SomeSCAService {
+
+ public String getGreeting(String name) {
+ return "Hello " + name;
+ }
+
+}
diff --git a/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/application b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/application
new file mode 100644
index 0000000000..2d13210560
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/application
@@ -0,0 +1,14 @@
+# 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.
+org.apache.wink.example.helloworld.HelloWorld \ No newline at end of file
diff --git a/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.composite b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.composite
new file mode 100644
index 0000000000..86e8937631
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.composite
@@ -0,0 +1,34 @@
+<?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://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
+ targetNamespace="http://samples"
+ name="Helloworld">
+
+ <component name="MyWebComponent">
+ <implementation.web web-uri=""/>
+ <reference name="service" target="ServiceComponent"/>
+ </component>
+
+ <component name="ServiceComponent">
+ <implementation.java class="org.apache.wink.example.helloworld.SomeSCAServiceImpl"/>
+ </component>
+
+</composite>
diff --git a/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.xml b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..53cb501c40
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,48 @@
+<?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.
+-->
+<!DOCTYPE web-app PUBLIC
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<web-app>
+ <display-name>Wink demo</display-name>
+ <description>Demonstration of SDK features</description>
+
+ <!-- Listener to start the Tuscany webapp embedded runtime -->
+ <listener><listener-class>org.apache.tuscany.sca.host.webapp.TuscanyContextListener</listener-class></listener>
+
+ <!--
+ Wink SDK servlet configuration. This servlet handles HTTP requests
+ of SDK web service on application server.
+ -->
+ <servlet>
+ <servlet-name>restSdkService</servlet-name>
+ <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
+ <init-param>
+ <param-name>applicationConfigLocation</param-name>
+ <param-value>/WEB-INF/application</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>restSdkService</servlet-name>
+ <url-pattern>/rest/*</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/collaboration/wink-helloworld-sca/src/test/java/org/apache/wink/example/helloworld/HelloWorldTest.java b/collaboration/wink-helloworld-sca/src/test/java/org/apache/wink/example/helloworld/HelloWorldTest.java
new file mode 100644
index 0000000000..ed121ffe29
--- /dev/null
+++ b/collaboration/wink-helloworld-sca/src/test/java/org/apache/wink/example/helloworld/HelloWorldTest.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * 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.apache.wink.example.helloworld;
+
+import java.io.FileNotFoundException;
+import java.io.StringReader;
+import java.util.Set;
+
+import org.apache.wink.common.http.HttpStatus;
+import org.apache.wink.common.internal.application.ApplicationFileLoader;
+import org.apache.wink.common.internal.utils.MediaTypeUtils;
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+/**
+ * Test of response from HelloWorld Resource.
+ */
+public class HelloWorldTest extends MockServletInvocationTest {
+
+ @Override
+ protected Class<?>[] getClasses() {
+ try {
+ Set<Class<?>> classes = new ApplicationFileLoader("application").getClasses();
+ Class<?>[] classesArray = new Class[classes.size()];
+ return classes.toArray(classesArray);
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testHelloWorld() throws Exception {
+ // prepare a mock request and an empty mock response
+ MockHttpServletRequest request =
+ constructMockRequest("GET", "/world", MediaTypeUtils.ATOM_ENTRY);
+ MockHttpServletResponse response = invoke(request);
+
+ // check resulting mock response
+ assertEquals("HTTP status", HttpStatus.OK.getCode(), response.getStatus());
+ AtomEntry entry = AtomEntry.unmarshal(new StringReader(response.getContentAsString()));
+ String id = entry.getId();
+ assertEquals("entry id", HelloWorld.ID, id);
+ }
+
+ // test helper
+ private MockHttpServletRequest constructMockRequest(String method,
+ String requestURI,
+ String acceptHeader) {
+ MockHttpServletRequest mockRequest = new MockHttpServletRequest() {
+
+ public String getPathTranslated() {
+ return null; // prevent Spring to resolve the file on the
+ // filesystem which fails
+ }
+
+ };
+ mockRequest.setMethod(method);
+ mockRequest.setRequestURI(requestURI);
+ mockRequest.addHeader("Accept", acceptHeader);
+ return mockRequest;
+ }
+}