From 39ef9a4855c593f1ea3a6bb122d5c22a50b371cb Mon Sep 17 00:00:00 2001 From: antelder Date: Wed, 27 Jan 2010 14:40:10 +0000 Subject: 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 --- collaboration/wink-helloworld-sca/build.xml | 81 +++++++++++++++++++ collaboration/wink-helloworld-sca/pom.xml | 92 ++++++++++++++++++++++ collaboration/wink-helloworld-sca/readme.txt | 15 ++++ .../apache/wink/example/helloworld/HelloWorld.java | 76 ++++++++++++++++++ .../wink/example/helloworld/SomeSCAService.java | 27 +++++++ .../example/helloworld/SomeSCAServiceImpl.java | 29 +++++++ .../src/main/webapp/WEB-INF/application | 14 ++++ .../src/main/webapp/WEB-INF/web.composite | 34 ++++++++ .../src/main/webapp/WEB-INF/web.xml | 48 +++++++++++ .../wink/example/helloworld/HelloWorldTest.java | 81 +++++++++++++++++++ 10 files changed, 497 insertions(+) create mode 100644 collaboration/wink-helloworld-sca/build.xml create mode 100644 collaboration/wink-helloworld-sca/pom.xml create mode 100644 collaboration/wink-helloworld-sca/readme.txt create mode 100644 collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/HelloWorld.java create mode 100644 collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAService.java create mode 100644 collaboration/wink-helloworld-sca/src/main/java/org/apache/wink/example/helloworld/SomeSCAServiceImpl.java create mode 100644 collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/application create mode 100644 collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.composite create mode 100644 collaboration/wink-helloworld-sca/src/main/webapp/WEB-INF/web.xml create mode 100644 collaboration/wink-helloworld-sca/src/test/java/org/apache/wink/example/helloworld/HelloWorldTest.java (limited to 'collaboration') 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 @@ + + + + + + Ant build file for Wink example Hello World + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + 4.0.0 + HelloWorld + war + Apache Wink Examples Apps :: HelloWorld + + org.apache.wink.example + apps + 1.0-incubating + + + HelloWorld + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${basedir}/src/main/webapp/WEB-INF + + + + + + + + + org.apache.wink + wink-common + + + org.apache.wink + wink-component-test-support + + + org.apache.wink + wink-server + + + org.springframework + spring-test + + + org.slf4j + jcl-over-slf4j + test + + + org.apache.geronimo.specs + geronimo-j2ee_1.4_spec + provided + + + junit + junit + test + + + org.apache.tuscany.sca + tuscany-sca-api + 2.0-SNAPSHOT + provided + + + org.apache.tuscany.sca.shades + tuscany-base + 2.0-SNAPSHOT + runtime + + + 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! + *

+ * The SDK dispatches HTTP requests for URI + * http://[host]:[port]/HelloWorld/rest/world, where + * HelloWorld is the context root, to this class. A simple Atom + * entry is returned in HTTP response. + *

+ * The service document is available at URI + * http://[host]:[port]/HelloWorld/rest but it is empty because + * this simple demo doesn't contain any collection of resources. + *

+ * 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 @@ + + + + + + + + + + + + + + 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 @@ + + + + + + Wink demo + Demonstration of SDK features + + + org.apache.tuscany.sca.host.webapp.TuscanyContextListener + + + + restSdkService + org.apache.wink.server.internal.servlet.RestServlet + + applicationConfigLocation + /WEB-INF/application + + + + + restSdkService + /rest/* + + 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> 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; + } +} -- cgit v1.2.3