summaryrefslogtreecommitdiffstats
path: root/collaboration/wink-helloworld-sca/src
diff options
context:
space:
mode:
Diffstat (limited to 'collaboration/wink-helloworld-sca/src')
-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
7 files changed, 309 insertions, 0 deletions
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;
+ }
+}