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
This commit is contained in:
parent
edce121c4e
commit
39ef9a4855
10 changed files with 497 additions and 0 deletions
81
collaboration/wink-helloworld-sca/build.xml
Normal file
81
collaboration/wink-helloworld-sca/build.xml
Normal file
|
@ -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>
|
92
collaboration/wink-helloworld-sca/pom.xml
Normal file
92
collaboration/wink-helloworld-sca/pom.xml
Normal file
|
@ -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>
|
15
collaboration/wink-helloworld-sca/readme.txt
Normal file
15
collaboration/wink-helloworld-sca/readme.txt
Normal file
|
@ -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 ---
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
|
@ -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>
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue