From a24d6e044cdcf39d7a5045623e4eed78968b8c64 Mon Sep 17 00:00:00 2001 From: fmoga Date: Mon, 21 Feb 2011 12:00:24 +0000 Subject: Copy 2.0-Beta2-RC3 tag as 2.0-Beta2 final release tag. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1072933 13f79535-47bb-0310-9956-ffa450edef68 --- .../provider/JAXRSImplementationProvider.java | 76 ++++++++++++++++++++++ .../JAXRSImplementationProviderFactory.java | 46 +++++++++++++ ...cany.sca.provider.ImplementationProviderFactory | 21 ++++++ .../src/test/java/helloworld/jaxrs/HelloWorld.java | 70 ++++++++++++++++++++ .../test/java/helloworld/jaxrs/HelloWorldApp.java | 64 ++++++++++++++++++ .../helloworld/jaxrs/test/HelloWorldTestCase.java | 71 ++++++++++++++++++++ .../helloworld/jaxrs/HelloWorld.composite | 29 +++++++++ 7 files changed, 377 insertions(+) create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java create mode 100644 sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite (limited to 'sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src') diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.java new file mode 100644 index 0000000000..91d4607831 --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProvider.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.tuscany.sca.implementation.jaxrs.provider; + +import org.apache.tuscany.sca.host.http.ServletHost; +import org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation; +import org.apache.tuscany.sca.interfacedef.Operation; +import org.apache.tuscany.sca.invocation.Invoker; +import org.apache.tuscany.sca.provider.ImplementationProvider; +import org.apache.tuscany.sca.runtime.RuntimeComponentService; + +/** + * + */ +public class JAXRSImplementationProvider implements ImplementationProvider { + private JAXRSImplementation implementation; + private ServletHost host; + + /** + * @param host + */ + public JAXRSImplementationProvider(JAXRSImplementation implementation, ServletHost host) { + super(); + this.implementation = implementation; + this.host = host; + } + + public Invoker createInvoker(RuntimeComponentService service, Operation operation) { + return null; + } + + public boolean supportsOneWayInvocation() { + return false; + } + + public void start() { + /* + RestServlet restServlet = new RestServlet(); + host.addServletMapping("/*", restServlet); + Application application; + try { + application = (Application)implementation.getApplicationClass().newInstance(); + } catch (Exception e) { + throw new ServiceRuntimeException(e); + } + RegistrationUtils.registerApplication(application, restServlet.getServletContext()); + */ + } + + public void stop() { + /* + Servlet servlet = host.removeServletMapping("/*"); + if (servlet != null) { + servlet.destroy(); + } + */ + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java new file mode 100644 index 0000000000..2f638240f6 --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/java/org/apache/tuscany/sca/implementation/jaxrs/provider/JAXRSImplementationProviderFactory.java @@ -0,0 +1,46 @@ +/* + * 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.tuscany.sca.implementation.jaxrs.provider; + +import org.apache.tuscany.sca.core.ExtensionPointRegistry; +import org.apache.tuscany.sca.host.http.ServletHost; +import org.apache.tuscany.sca.host.http.ServletHostHelper; +import org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation; +import org.apache.tuscany.sca.provider.ImplementationProvider; +import org.apache.tuscany.sca.provider.ImplementationProviderFactory; +import org.apache.tuscany.sca.runtime.RuntimeComponent; + +public class JAXRSImplementationProviderFactory implements ImplementationProviderFactory { + + private ServletHost servletHost; + + public JAXRSImplementationProviderFactory(ExtensionPointRegistry extensionPoints) { + this.servletHost = ServletHostHelper.getServletHost(extensionPoints); + } + + public ImplementationProvider createImplementationProvider(RuntimeComponent component, + JAXRSImplementation implementation) { + return new JAXRSImplementationProvider(implementation, servletHost); + } + + public Class getModelType() { + return JAXRSImplementation.class; + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory new file mode 100644 index 0000000000..d945bdd048 --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory @@ -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. + +# Implementation class for the implementation extension +org.apache.tuscany.sca.implementation.jaxrs.provider.JAXRSImplementationProviderFactory;model=org.apache.tuscany.sca.implementation.jaxrs.JAXRSImplementation + + diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java new file mode 100644 index 0000000000..3a493ea10e --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorld.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * 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 helloworld.jaxrs; + +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; + +/** + * 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"; + + /** + * 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. + SyndEntry synd = new SyndEntry(new SyndText("Hello World!"), ID, new Date()); + return synd; + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java new file mode 100644 index 0000000000..97ff1cb13e --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/HelloWorldApp.java @@ -0,0 +1,64 @@ +/* + * 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 helloworld.jaxrs; + +import java.util.HashSet; +import java.util.Set; + +import javax.ws.rs.core.Application; + +public class HelloWorldApp extends Application { + + /* + * A singletons is used to serve multiple requests. + * It keeps domain-model objects in memory between requests. + */ + private Set instances = new HashSet(); + + /* + * Per-request service classes are instantiated for each + * request, and disposed of after the request is processed. + */ + private Set> classes = new HashSet>(); + + /** + * Create the singleton service implementation + */ + public HelloWorldApp() { + instances.add(new HelloWorld()); + // classes.add(HelloWorld.class); + } + + /** + * Methods used to discover the JAX-RS service objects + */ + + // Set of singleton service objects + @Override + public Set getSingletons() { + return instances; + } + + // Set of per-request service classes + @Override + public Set> getClasses() { + return classes; + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java new file mode 100644 index 0000000000..34edff56ca --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/java/helloworld/jaxrs/test/HelloWorldTestCase.java @@ -0,0 +1,71 @@ +/* + * 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 helloworld.jaxrs.test; + +import java.io.File; + +import junit.framework.Assert; + +import org.apache.tuscany.sca.node.Contribution; +import org.apache.tuscany.sca.node.Node; +import org.apache.tuscany.sca.node.NodeFactory; +import org.apache.wink.client.ClientResponse; +import org.apache.wink.client.RestClient; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * + */ +public class HelloWorldTestCase { + private static Node node; + + /** + * @throws java.lang.Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + node = + NodeFactory.getInstance().createNode("helloworld/jaxrs/HelloWorld.composite", + new Contribution("c1", new File("target/test-classes").toURI() + .toString())).start(); + } + + @Test + public void testDummy() { + RestClient client = new RestClient(); + ClientResponse response = client.resource("http://localhost:8080/world").get(); + String out = response.getEntity(String.class); + System.out.println(out); + Assert.assertEquals(200, response.getStatusCode()); + } + + /** + * @throws java.lang.Exception + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + if (node != null) { + node.stop(); + } + } + +} diff --git a/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite new file mode 100644 index 0000000000..db7329ca3e --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2/modules/implementation-jaxrs-runtime/src/test/resources/helloworld/jaxrs/HelloWorld.composite @@ -0,0 +1,29 @@ + + + + + + + + + -- cgit v1.2.3