You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/07/11 16:28:12 UTC
svn commit: r1145190 [1/2] - in /openejb/trunk/openejb3: ./
container/openejb-core/src/main/java/org/apache/openejb/util/
container/openejb-core/src/main/resources/ server/ server/openejb-cxf-rs/
server/openejb-cxf-rs/src/ server/openejb-cxf-rs/src/mai...
Author: rmannibucau
Date: Mon Jul 11 14:28:10 2011
New Revision: 1145190
URL: http://svn.apache.org/viewvc?rev=1145190&view=rev
Log:
OPENEJB-1237 openejb REST support - first refactoring to avoid to copy/paste code
Added:
openejb/trunk/openejb3/server/openejb-cxf-rs/
openejb/trunk/openejb3/server/openejb-cxf-rs/pom.xml
openejb/trunk/openejb3/server/openejb-cxf-rs/src/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/cxf-rs
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyExpertRestClass.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyFirstRestClass.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyNonListedRestClass.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyRESTApplication.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MySecondRestClass.java
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/beans.xml
openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/log4j.properties
openejb/trunk/openejb3/server/openejb-cxf-transport/
openejb/trunk/openejb3/server/openejb-cxf-transport/pom.xml
openejb/trunk/openejb3/server/openejb-cxf-transport/src/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
openejb/trunk/openejb3/server/openejb-cxf-transport/src/test/
openejb/trunk/openejb3/server/openejb-cxf-transport/src/test/java/
openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BasicAuthHttpListenerWrapper.java
- copied, changed from r1144000, openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/BasicAuthHttpListenerWrapper.java
openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/
openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
openejb/trunk/openejb3/server/openejb-rest/
openejb/trunk/openejb3/server/openejb-rest/pom.xml
openejb/trunk/openejb3/server/openejb-rest/src/
openejb/trunk/openejb3/server/openejb-rest/src/main/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/OpenEJBRestRuntimeException.java
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
openejb/trunk/openejb3/server/openejb-rest/src/test/
openejb/trunk/openejb3/server/openejb-rest/src/test/java/
Removed:
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpDestination.java
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/HttpTransportFactory.java
openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/BasicAuthHttpListenerWrapper.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/LogCategory.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/logging.properties
openejb/trunk/openejb3/pom.xml
openejb/trunk/openejb3/server/openejb-cxf/pom.xml
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/OpenEJBHttpWsRegistry.java
openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
openejb/trunk/openejb3/server/pom.xml
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/LogCategory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/LogCategory.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/LogCategory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/LogCategory.java Mon Jul 11 14:28:10 2011
@@ -43,6 +43,7 @@ public final class LogCategory {
public static final LogCategory OPENEJB_DEPLOY = OPENEJB.createChild("deploy");
public static final LogCategory OPENEJB_HSQL = OPENEJB.createChild("hsql");
public static final LogCategory OPENEJB_WS = OPENEJB.createChild("ws");
+ public static final LogCategory OPENEJB_RS = OPENEJB.createChild("rs");
public static final LogCategory TRANSACTION = new LogCategory( "Transaction");
public static final LogCategory ACTIVEMQ = new LogCategory( "org.apache.activemq");
public static final LogCategory GERONIMO = new LogCategory( "org.apache.geronimo");
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/logging.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/logging.properties?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/logging.properties (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/logging.properties Mon Jul 11 14:28:10 2011
@@ -14,6 +14,7 @@ log4j.category.OpenEJB.startup.service =
log4j.category.OpenEJB.startup.config = info
log4j.category.OpenEJB.hsql = info
log4j.category.OpenEJB.ws = info
+log4j.category.OpenEJB.rs = info
log4j.category.OpenEJB.tomcat = info
log4j.category.CORBA-Adapter = error,R
log4j.category.Transaction = warn,TX
Modified: openejb/trunk/openejb3/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/pom.xml?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/pom.xml (original)
+++ openejb/trunk/openejb3/pom.xml Mon Jul 11 14:28:10 2011
@@ -120,6 +120,7 @@
<tomcat.version>7.0.16</tomcat.version>
<!-- used mainly by jetty modules -->
+ <cxf.version>2.4.1</cxf.version>
<jetty.version>7.4.2.v20110526</jetty.version>
<!--
@@ -575,6 +576,16 @@
<dependencyManagement>
<dependencies>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-bundle</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>xml-resolver</groupId>
+ <artifactId>xml-resolver</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty.version}</version>
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/pom.xml?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/pom.xml (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/pom.xml Mon Jul 11 14:28:10 2011
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>server</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>openejb-cxf-rs</artifactId>
+ <name>OpenEJB :: Server :: CXF RS</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-http</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-rest</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-cxf-transport</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-bundle</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-continuation</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-io</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-http</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-security</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.xmlbeans</groupId>
+ <artifactId>xmlbeans</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>woodstox-core-asl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>stax2-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-servlet_3.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-stax-api_1.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-activation_1.1_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-annotation_1.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-javamail_1.4_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.jra</groupId>
+ <artifactId>jra</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>rhino</groupId>
+ <artifactId>js</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>oro</groupId>
+ <artifactId>oro</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.xml.soap</groupId>
+ <artifactId>saaj-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jaxws_2.2_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jms</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-tx</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>opensaml</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>openws</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>xmltooling</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>xml-resolver</groupId>
+ <artifactId>xml-resolver</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRSService.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,47 @@
+package org.apache.openejb.server.cxf.rs;
+
+import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.server.cxf.transport.HttpTransportFactory;
+import org.apache.openejb.server.cxf.transport.util.CxfUtil;
+import org.apache.openejb.server.rest.RESTService;
+import org.apache.openejb.server.rest.RsHttpListener;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+import java.util.Properties;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class CxfRSService extends RESTService {
+ private static final String NAME = "cxf-rs";
+ private HttpTransportFactory httpTransportFactory;
+
+
+ @Override public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
+ throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
+ }
+
+ @Override public void service(Socket socket) throws ServiceException, IOException {
+ throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
+ }
+
+ @Override public String getName() {
+ return NAME;
+ }
+
+ @Override public void init(Properties properties) throws Exception {
+ // no-op
+ }
+
+ @Override protected void beforeStart() {
+ super.beforeStart();
+ httpTransportFactory = new HttpTransportFactory(CxfUtil.getBus());
+ }
+
+ @Override protected RsHttpListener createHttpListener(Object o, RsHttpListener.Scope scope) {
+ return new CxfRsHttpListener(scope, httpTransportFactory);
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,80 @@
+package org.apache.openejb.server.cxf.rs;
+
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider;
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.transport.http.AbstractHTTPDestination;
+import org.apache.cxf.transport.http.HTTPTransportFactory;
+import org.apache.openejb.server.httpd.HttpRequest;
+import org.apache.openejb.server.httpd.HttpResponse;
+import org.apache.openejb.server.rest.RsHttpListener;
+
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.ws.rs.core.Application;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class CxfRsHttpListener implements RsHttpListener {
+ private HTTPTransportFactory transportFactory;
+ private AbstractHTTPDestination destination;
+ private Server server;
+ private Scope scope;
+
+ public CxfRsHttpListener(Scope scp, HTTPTransportFactory httpTransportFactory) {
+ transportFactory = httpTransportFactory;
+ scope = scp;
+ }
+
+ @Override public void onMessage(final HttpRequest httpRequest, final HttpResponse httpResponse) throws Exception {
+ destination.invoke(null, httpRequest.getServletContext(), new HttpServletRequestWrapper(httpRequest) {
+ // see org.apache.cxf.jaxrs.utils.HttpUtils.getPathToMatch()
+ // cxf uses implicitly getRawPath() from the endpoint but not for the request URI
+ // so without stripping the address until the context the behavior is weird
+ // this is just a workaround waiting for something better
+ @Override public String getRequestURI() {
+ try {
+ return new URI(httpRequest.getRequestURI()).getRawPath();
+ } catch (URISyntaxException e) {
+ return "/";
+ }
+ }
+ }, httpResponse);
+
+ }
+
+ public ResourceProvider getResourceProvider(Object o) {
+ switch (scope) {
+ case SINGLETON:
+ return new SingletonResourceProvider(o);
+ case PROTOTYPE:
+ default:
+ return new PerRequestResourceProvider(o.getClass());
+ }
+ }
+
+ public void deploy(String address, Object o, Application app) {
+ JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
+ factory.setResourceClasses(o.getClass());
+ factory.setResourceProvider(getResourceProvider(o));
+ factory.setDestinationFactory(transportFactory);
+ factory.setBus(transportFactory.getBus());
+ factory.setAddress(address);
+ factory.setServiceBean(o);
+ if (app != null) {
+ factory.setApplication(app);
+ }
+ // factory.setServiceFactory(serviceFactory); // TODO: injections, ...
+
+ server = factory.create();
+ destination = (AbstractHTTPDestination) server.getDestination();
+ }
+
+ public void undeploy() {
+ server.stop();
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/cxf-rs
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/cxf-rs?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/cxf-rs (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/main/resources/META-INF/org.apache.openejb.server.ServerService/cxf-rs Mon Jul 11 14:28:10 2011
@@ -0,0 +1 @@
+server = org.apache.openejb.server.cxf.rs.CxfRSService
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/RestDeploymentTest.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,134 @@
+package org.apache.openejb.server.cxf.rs;
+
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.FacilitiesInfo;
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.ServiceInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.config.AnnotationDeployer;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.WebModule;
+import org.apache.openejb.core.CoreContainerSystem;
+import org.apache.openejb.core.WebContext;
+import org.apache.openejb.core.ivm.naming.IvmJndiFactory;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.ServiceDaemon;
+import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.server.cxf.rs.beans.MyExpertRestClass;
+import org.apache.openejb.server.cxf.rs.beans.MyFirstRestClass;
+import org.apache.openejb.server.cxf.rs.beans.MyNonListedRestClass;
+import org.apache.openejb.server.cxf.rs.beans.MyRESTApplication;
+import org.apache.openejb.server.cxf.rs.beans.MySecondRestClass;
+import org.apache.openejb.server.httpd.HttpServer;
+import org.apache.openejb.server.httpd.HttpServerFactory;
+import org.apache.openejb.server.httpd.OpenEJBHttpServer;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.xbean.finder.AnnotationFinder;
+import org.apache.xbean.finder.archive.ClassesArchive;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.util.Properties;
+
+import static junit.framework.Assert.assertEquals;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class RestDeploymentTest {
+ private static CxfRSService service;
+ private static HttpServer server;
+ private static ServiceDaemon daemon;
+ public static final String BASE_URL = "http://localhost:4204/my-web-app";
+
+ @BeforeClass public static void start() throws Exception {
+ WebApp webApp = new WebApp();
+ webApp.setContextRoot("/my-web-app");
+ webApp.setId("web");
+ webApp.setVersion("2.5");
+ WebModule webModule = new WebModule(webApp, webApp.getContextRoot(),
+ Thread.currentThread().getContextClassLoader(), "myapp", webApp.getId());
+ webModule.setFinder(new AnnotationFinder(new ClassesArchive(
+ MyFirstRestClass.class, MySecondRestClass.class, MyNonListedRestClass.class,
+ MyRESTApplication.class, MyExpertRestClass.class)).link());
+
+ Assembler assembler = new Assembler();
+ SystemInstance.get().setComponent(Assembler.class, assembler);
+
+ AnnotationDeployer annotationDeployer = new AnnotationDeployer();
+ ConfigurationFactory config = new ConfigurationFactory();
+ assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+ assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+ assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ webModule = annotationDeployer.deploy(webModule);
+
+ ConfigurationFactory factory = new ConfigurationFactory(true);
+ AppInfo appInfo = new AppInfo();
+ appInfo.appId = "rest";
+ appInfo.webApps.add(factory.configureApplication(webModule));
+ assembler.createApplication(appInfo);
+
+ CoreContainerSystem containerSystem = new CoreContainerSystem(new IvmJndiFactory());
+ WebContext webContext = new WebContext();
+ webContext.setId(webApp.getId());
+ webContext.setClassLoader(webModule.getClassLoader());
+ containerSystem.addWebDeployment(webContext);
+ SystemInstance.get().setComponent(ContainerSystem.class, containerSystem);
+
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.className = HttpServerFactory.class.getName();
+ serviceInfo.properties = new Properties();
+ serviceInfo.properties.setProperty("port", "-1");
+ serviceInfo.properties.setProperty("bind", "foo");
+
+ OpenEjbConfiguration configuration = new OpenEjbConfiguration();
+ SystemInstance.get().setComponent(OpenEjbConfiguration.class, configuration);
+ configuration.facilities = new FacilitiesInfo();
+ configuration.facilities.services.add(serviceInfo);
+
+ server = new OpenEJBHttpServer();
+ daemon = new ServiceDaemon(server, 4204, "localhost");
+ daemon.start();
+ server.start();
+
+ service = new CxfRSService();
+ service.start();
+ }
+
+ @AfterClass public static void close() throws ServiceException {
+ service.stop();
+ daemon.stop();
+ server.stop();
+ }
+
+ @Test public void first() {
+ String hi = WebClient.create(BASE_URL).path("/first/hi").get(String.class);
+ assertEquals("Hi from REST World!", hi);
+ }
+
+ @Test public void expert() throws Exception {
+ Response response = WebClient.create(BASE_URL).path("/expert/still-hi").post("Pink Floyd");
+ assertEquals(HttpServletResponse.SC_OK, response.getStatus());
+
+ // convert entity to String
+ // could be done with WebClient.create(BASE_URL).path("/expert/still-hi").post("Pink Floyd", String.class); too
+ InputStream is = (InputStream) response.getEntity();
+ StringWriter writer = new StringWriter();
+ int c;
+ while ((c = is.read()) != -1) {
+ writer.write(c);
+ }
+ assertEquals("hi Pink Floyd", writer.toString());
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyExpertRestClass.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyExpertRestClass.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyExpertRestClass.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyExpertRestClass.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,14 @@
+package org.apache.openejb.server.cxf.rs.beans;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+@Path("/expert")
+public class MyExpertRestClass {
+ @Path("/still-hi/") @POST public String hi(String you) {
+ return "hi " + you;
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyFirstRestClass.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyFirstRestClass.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyFirstRestClass.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyFirstRestClass.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,14 @@
+package org.apache.openejb.server.cxf.rs.beans;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+@Path("/first")
+public class MyFirstRestClass {
+ @Path("/hi") @GET public String hi() {
+ return "Hi from REST World!";
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyNonListedRestClass.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyNonListedRestClass.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyNonListedRestClass.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyNonListedRestClass.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,15 @@
+package org.apache.openejb.server.cxf.rs.beans;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+@Path("/non-listed")
+public class MyNonListedRestClass {
+ @Path("/yata") @GET public String yata(@QueryParam("did")String iDidIt) {
+ return "Yata! " + iDidIt;
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyRESTApplication.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyRESTApplication.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyRESTApplication.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MyRESTApplication.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,19 @@
+package org.apache.openejb.server.cxf.rs.beans;
+
+import javax.ws.rs.core.Application;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class MyRESTApplication extends Application {
+ public Set<Class<?>> getClasses() {
+ return new HashSet<Class<?>>(Arrays.asList(MyExpertRestClass.class));
+ }
+
+ public Set<Object> getSingletons() {
+ return new HashSet<Object>(Arrays.asList(new MyFirstRestClass(), new MySecondRestClass()));
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MySecondRestClass.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MySecondRestClass.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MySecondRestClass.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/beans/MySecondRestClass.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,15 @@
+package org.apache.openejb.server.cxf.rs.beans;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+@Path("/second")
+public class MySecondRestClass {
+ @Path("/hi2/{you}") @GET public String hi(@PathParam("you") String you) {
+ return "hi " + you;
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/beans.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/beans.xml?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/beans.xml (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/META-INF/beans.xml Mon Jul 11 14:28:10 2011
@@ -0,0 +1 @@
+<beans />
Added: openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/log4j.properties?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/log4j.properties (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-rs/src/test/resources/log4j.properties Mon Jul 11 14:28:10 2011
@@ -0,0 +1,5 @@
+log4j.category.OpenEJB.rs = debug
+# log4j.category.org.apache.cxf = debug, C
+log4j.appender.C = org.apache.log4j.ConsoleAppender
+log4j.appender.C.layout = org.apache.log4j.PatternLayout
+log4j.appender.C.layout.ConversionPattern = %d - %-5c - %m%n
\ No newline at end of file
Added: openejb/trunk/openejb3/server/openejb-cxf-transport/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-transport/pom.xml?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-transport/pom.xml (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-transport/pom.xml Mon Jul 11 14:28:10 2011
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>server</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>openejb-cxf-transport</artifactId>
+ <name>OpenEJB :: Server :: CXF Transport</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-http</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-bundle</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>antlr</groupId>
+ <artifactId>antlr</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>asm</groupId>
+ <artifactId>asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>aopalliance</groupId>
+ <artifactId>aopalliance</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-continuation</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-io</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-http</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-security</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-util</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>jsr311-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.xmlbeans</groupId>
+ <artifactId>xmlbeans</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>woodstox-core-asl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>stax2-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-servlet_3.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-stax-api_1.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-activation_1.1_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-annotation_1.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-javamail_1.4_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jms_1.1_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.jra</groupId>
+ <artifactId>jra</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>rhino</groupId>
+ <artifactId>js</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.velocity</groupId>
+ <artifactId>velocity</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>oro</groupId>
+ <artifactId>oro</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-xjc</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.xml.soap</groupId>
+ <artifactId>saaj-api</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jaxws_2.2_spec</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-beans</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-expression</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-aop</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-asm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jms</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-tx</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>joda-time</groupId>
+ <artifactId>joda-time</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>opensaml</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>openws</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.opensaml</groupId>
+ <artifactId>xmltooling</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+</project>
Added: openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpDestination.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,41 @@
+/**
+ *
+ * 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.openejb.server.cxf.transport;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.http.AbstractHTTPDestination;
+import org.apache.cxf.transport.http.DestinationRegistry;
+import org.apache.openejb.server.httpd.HttpRequest;
+import org.apache.openejb.server.httpd.HttpResponse;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+public class HttpDestination extends AbstractHTTPDestination {
+ public HttpDestination(Bus bus, DestinationRegistry registry, EndpointInfo endpointInfo, String path) throws IOException {
+ super(bus, registry, endpointInfo, path, true);
+ }
+
+ @Override public Logger getLogger() {
+ return Logger.getLogger(HttpDestination.class.getName());
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/HttpTransportFactory.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,40 @@
+/**
+ *
+ * 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.openejb.server.cxf.transport;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.Destination;
+import org.apache.cxf.transport.http.HTTPTransportFactory;
+
+import java.io.IOException;
+
+public class HttpTransportFactory extends HTTPTransportFactory {
+ public HttpTransportFactory() {
+ // no-op
+ }
+
+ public HttpTransportFactory(Bus bus) {
+ setBus(bus);
+
+ }
+
+ @Override public Destination getDestination(EndpointInfo endpointInfo) throws IOException {
+ return new HttpDestination(getBus(), getRegistry(), endpointInfo, endpointInfo.getAddress());
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java (added)
+++ openejb/trunk/openejb3/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfUtil.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,38 @@
+package org.apache.openejb.server.cxf.transport.util;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.extension.ExtensionManagerBus;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public final class CxfUtil {
+ private CxfUtil() {
+ // no-op
+ }
+
+ /*
+ * Ensure the bus created is unqiue and non-shared.
+ * The very first bus created is set as a default bus which then can
+ * be (re)used in other places.
+ */
+ public static Bus getBus() {
+ getDefaultBus();
+ return new ExtensionManagerBus();
+ }
+
+ /*
+ * Ensure the Spring bus is initialized with the CXF module classloader
+ * instead of the application classloader.
+ */
+ public static Bus getDefaultBus() {
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(CxfUtil.class.getClassLoader());
+ try {
+ return BusFactory.getDefaultBus();
+ } finally {
+ Thread.currentThread().setContextClassLoader(cl);
+ }
+ }
+}
Modified: openejb/trunk/openejb3/server/openejb-cxf/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/pom.xml?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/pom.xml (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/pom.xml Mon Jul 11 14:28:10 2011
@@ -36,19 +36,6 @@
*
</openejb.osgi.import.pkg>
</properties>
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>rat-maven-plugin</artifactId>
- <configuration>
- <excludes>
- <exclude>src/main/resources/META-INF/cxf.extension</exclude>
- </excludes>
- </configuration>
- </plugin>
- </plugins>
- </build>
<dependencies>
<dependency>
<groupId>junit</groupId>
@@ -56,11 +43,16 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.openejb</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>openejb-webservices</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-cxf-transport</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>
@@ -103,7 +95,6 @@
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-bundle</artifactId>
- <version>2.4.1</version>
<exclusions>
<exclusion>
<groupId>antlr</groupId>
@@ -286,7 +277,6 @@
<dependency>
<groupId>xml-resolver</groupId>
<artifactId>xml-resolver</artifactId>
- <version>1.2</version>
</dependency>
<!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
on Sun's internal copy of Xerces. See OPENEJB-1126. -->
Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfEndpoint.java Mon Jul 11 14:28:10 2011
@@ -27,13 +27,7 @@ import org.apache.cxf.jaxws.support.JaxW
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingInfo;
-import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.transport.Destination;
-import org.apache.cxf.transport.DestinationFactory;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
-import org.apache.cxf.transport.http.DestinationRegistry;
import org.apache.cxf.transport.http.HTTPTransportFactory;
-import org.apache.cxf.transport.http.HttpDestinationFactory;
import org.apache.openejb.core.webservices.HandlerResolverImpl;
import org.apache.openejb.core.webservices.PortData;
@@ -43,10 +37,8 @@ import javax.xml.ws.Binding;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.http.HTTPBinding;
import javax.xml.ws.soap.SOAPBinding;
-import java.io.IOException;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.Executor;
public abstract class CxfEndpoint {
Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java Mon Jul 11 14:28:10 2011
@@ -20,9 +20,10 @@ package org.apache.openejb.server.cxf;
import org.apache.cxf.Bus;
import org.apache.openejb.BeanContext;
import org.apache.openejb.core.webservices.PortData;
+import org.apache.openejb.server.cxf.client.SaajInterceptor;
import org.apache.openejb.server.cxf.ejb.EjbWsContainer;
import org.apache.openejb.server.cxf.pojo.PojoWsContainer;
-import org.apache.openejb.server.cxf.client.SaajInterceptor;
+import org.apache.openejb.server.cxf.transport.util.CxfUtil;
import org.apache.openejb.server.httpd.HttpListener;
import org.apache.openejb.server.webservices.WsService;
@@ -43,7 +44,7 @@ public class CxfService extends WsServic
}
protected HttpListener createEjbWsContainer(URL moduleBaseUrl, PortData port, BeanContext beanContext) {
- Bus bus = CxfWsContainer.getBus();
+ Bus bus = CxfUtil.getBus();
CxfCatalogUtils.loadOASISCatalog(bus, moduleBaseUrl, "META-INF/jax-ws-catalog.xml");
@@ -61,7 +62,7 @@ public class CxfService extends WsServic
}
protected HttpListener createPojoWsContainer(URL moduleBaseUrl, PortData port, String serviceId, Class target, Context context, String contextRoot) {
- Bus bus = CxfWsContainer.getBus();
+ Bus bus = CxfUtil.getBus();
CxfCatalogUtils.loadOASISCatalog(bus, moduleBaseUrl, "META-INF/jax-ws-catalog.xml");
Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java Mon Jul 11 14:28:10 2011
@@ -23,6 +23,7 @@ import org.apache.cxf.bus.extension.Exte
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.HTTPTransportFactory;
import org.apache.openejb.core.webservices.PortData;
+import org.apache.openejb.server.cxf.transport.HttpTransportFactory;
import org.apache.openejb.server.httpd.HttpListener;
import org.apache.openejb.server.httpd.HttpRequest;
import org.apache.openejb.server.httpd.HttpResponse;
@@ -70,28 +71,4 @@ public abstract class CxfWsContainer imp
public void onMessage(HttpRequest request, HttpResponse response) throws Exception {
destination.invoke(null, request.getServletContext(), request, response);
}
-
- /*
- * Ensure the bus created is unqiue and non-shared.
- * The very first bus created is set as a default bus which then can
- * be (re)used in other places.
- */
- public static Bus getBus() {
- getDefaultBus();
- return new ExtensionManagerBus();
- }
-
- /*
- * Ensure the Spring bus is initialized with the CXF module classloader
- * instead of the application classloader.
- */
- public static Bus getDefaultBus() {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(CxfEndpoint.class.getClassLoader());
- try {
- return BusFactory.getDefaultBus();
- } finally {
- Thread.currentThread().setContextClassLoader(cl);
- }
- }
}
Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java Mon Jul 11 14:28:10 2011
@@ -35,9 +35,4 @@ public class EjbWsContainer extends CxfW
EjbEndpoint ep = new EjbEndpoint(bus, port, beanContext, httpTransportFactory);
return ep;
}
-
- public void start() {
- super.start();
- // removed?: this.destination.setPassSecurityContext(true);
- }
}
Modified: openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java (original)
+++ openejb/trunk/openejb3/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java Mon Jul 11 14:28:10 2011
@@ -35,12 +35,6 @@ public class PojoWsContainer extends Cxf
}
protected PojoEndpoint createEndpoint() {
- PojoEndpoint ep = new PojoEndpoint(bus, port, context, target);
- return ep;
- }
-
- public void start() {
- super.start();
- // removed?: this.destination.setPassSecurityContext(true);
+ return new PojoEndpoint(bus, port, context, target);
}
}
Copied: openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BasicAuthHttpListenerWrapper.java (from r1144000, openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/BasicAuthHttpListenerWrapper.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BasicAuthHttpListenerWrapper.java?p2=openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BasicAuthHttpListenerWrapper.java&p1=openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/BasicAuthHttpListenerWrapper.java&r1=1144000&r2=1145190&rev=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/BasicAuthHttpListenerWrapper.java (original)
+++ openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BasicAuthHttpListenerWrapper.java Mon Jul 11 14:28:10 2011
@@ -15,14 +15,11 @@
* limitations under the License.
*/
-package org.apache.openejb.server.webservices;
+package org.apache.openejb.server.httpd;
-import org.apache.openejb.server.httpd.HttpListener;
-import org.apache.openejb.server.httpd.HttpRequest;
-import org.apache.openejb.server.httpd.HttpResponse;
-import org.apache.openejb.util.Base64;
-import org.apache.openejb.spi.SecurityService;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.SecurityService;
+import org.apache.openejb.util.Base64;
import javax.security.auth.login.LoginException;
Modified: openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java?rev=1145190&r1=1145189&r2=1145190&view=diff
==============================================================================
--- openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java (original)
+++ openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java Mon Jul 11 14:28:10 2011
@@ -52,9 +52,11 @@ public class HttpListenerRegistry implem
}
}
- public void removeHttpListener(String regex) {
+ public HttpListener removeHttpListener(String regex) {
+ HttpListener listener;
synchronized (registry) {
- registry.remove(regex);
+ listener = registry.remove(regex);
}
+ return listener;
}
}
Added: openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java (added)
+++ openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,86 @@
+package org.apache.openejb.server.httpd;
+
+import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
+import org.apache.openejb.assembler.classic.ServiceInfo;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+
+import java.net.InetAddress;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class OpenEJBHttpRegistry {
+ public static final Logger log = Logger.getInstance(LogCategory.HTTPSERVER, OpenEJBHttpRegistry.class);
+
+ protected final HttpListenerRegistry registry;
+ protected final List<URI> baseUris = new ArrayList<URI>();
+
+ public OpenEJBHttpRegistry() {
+ try {
+ OpenEjbConfiguration configuration = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
+ for (ServiceInfo service : configuration.facilities.services) {
+ if (service.className.equals(HttpServerFactory.class.getName())) {
+ int port = Integer.parseInt(service.properties.getProperty("port"));
+ String ip = service.properties.getProperty("bind");
+ if ("0.0.0.0".equals(ip)) {
+ InetAddress[] addresses = InetAddress.getAllByName(ip);
+ for (InetAddress address : addresses) {
+ baseUris.add(new URI("http", null, address.getHostAddress(), port, null, null, null));
+ }
+ } else {
+ baseUris.add(new URI("http", null, ip, port, null, null, null));
+ }
+ break;
+ }
+ }
+ } catch (Exception e) {
+ log.error("Unable to build base URIs for Web Service registry", e);
+ }
+ registry = SystemInstance.get().getComponent(HttpListenerRegistry.class);
+ }
+
+ public HttpListener addWrappedHttpListener(HttpListener httpListener, ClassLoader classLoader, String regex) {
+ HttpListener listener = new ClassLoaderHttpListener(httpListener, classLoader);
+ registry.addHttpListener(listener, regex);
+ return listener;
+ }
+
+ public List<String> getResolvedAddresses(String path) {
+ String suffix = path;
+ if (!path.startsWith("/")) {
+ suffix = '/' + suffix;
+ }
+
+ List<String> addresses = new ArrayList<String>();
+ for (URI baseUri : baseUris) {
+ URI address = baseUri.resolve(suffix);
+ addresses.add(address.toString());
+ }
+ return addresses;
+ }
+
+ private static class ClassLoaderHttpListener implements HttpListener {
+ private final HttpListener delegate;
+ private final ClassLoader classLoader;
+
+ private ClassLoaderHttpListener(HttpListener delegate, ClassLoader classLoader) {
+ this.delegate = delegate;
+ this.classLoader = classLoader;
+ }
+
+ public void onMessage(HttpRequest request, HttpResponse response) throws Exception {
+ ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(classLoader);
+ try {
+ delegate.onMessage(request, response);
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldCl);
+ }
+ }
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java (added)
+++ openejb/trunk/openejb3/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/util/HttpUtil.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,34 @@
+package org.apache.openejb.server.httpd.util;
+
+import java.util.List;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public final class HttpUtil {
+ private HttpUtil() {
+ // no-op
+ }
+
+ public static String selectSingleAddress(List<String> addresses) {
+ if (addresses == null || addresses.isEmpty()) {
+ return null;
+ }
+
+ // return the first http address
+ for (String address : addresses) {
+ if (address.startsWith("http:")) {
+ return address;
+ }
+ }
+ // return the first https address
+ for (String address : addresses) {
+ if (address.startsWith("https:")) {
+ return address;
+ }
+ }
+ // just return the first address
+ String address = addresses.iterator().next();
+ return address;
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-rest/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/pom.xml?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/pom.xml (added)
+++ openejb/trunk/openejb3/server/openejb-rest/pom.xml Mon Jul 11 14:28:10 2011
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>server</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>4.0.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>openejb-rest</artifactId>
+ <name>OpenEJB :: Server :: REST</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>openejb-http</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+</project>
Added: openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/OpenEJBRestRuntimeException.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/OpenEJBRestRuntimeException.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/OpenEJBRestRuntimeException.java (added)
+++ openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/OpenEJBRestRuntimeException.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,10 @@
+package org.apache.openejb.server.rest;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class OpenEJBRestRuntimeException extends RuntimeException {
+ public OpenEJBRestRuntimeException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java (added)
+++ openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,247 @@
+package org.apache.openejb.server.rest;
+
+import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.DeploymentListener;
+import org.apache.openejb.assembler.classic.WebAppInfo;
+import org.apache.openejb.core.CoreContainerSystem;
+import org.apache.openejb.core.WebContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.SelfManaging;
+import org.apache.openejb.server.ServerService;
+import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.server.httpd.HttpListenerRegistry;
+import org.apache.openejb.server.httpd.util.HttpUtil;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.Socket;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public abstract class RESTService implements ServerService, SelfManaging, DeploymentListener {
+ public static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_RS, RESTService.class);
+
+ private static final String IP = "n/a";
+ private static final int PORT = -1;
+ public static final String NOPATH_PREFIX = "http://nopath/";
+
+ private final Set<AppInfo> deployedApplications = new HashSet<AppInfo>();
+ private final Set<WebAppInfo> deployedWebApps = new HashSet<WebAppInfo>();
+ private final Map<String, Application> deployedRESTApplications = new HashMap<String, Application>();
+ private Assembler assembler;
+ private CoreContainerSystem containerSystem;
+ private RsRegistry rsRegistry;
+
+ private Map<String, Object> restInstances = new HashMap<String, Object>();
+
+ @Override public void afterApplicationCreated(final AppInfo appInfo) {
+ if (deployedApplications.add(appInfo)) {
+ for (final WebAppInfo webApp : appInfo.webApps) {
+ final WebContext webContext = containerSystem.getWebContext(webApp.moduleId);
+ if (webContext == null) {
+ return;
+ }
+
+ if (!deployedWebApps.add(webApp)) {
+ return;
+ }
+
+ final ClassLoader classLoader = getClassLoader(webContext.getClassLoader());
+
+ // The spec says:
+ //
+ // "The resources and providers that make up a JAX-RS application are configured via an application-supplied
+ // subclass of Application. An implementation MAY provide alternate mechanisms for locating resource
+ // classes and providers (e.g. runtime class scanning) but use of Application is the only portable means of
+ // configuration."
+ //
+ // The choice here is to deploy using the Application if it exists or to use the scanned classes
+ // if there is no Application.
+ //
+ // Like this providing an Application subclass user can totally control deployed services.
+
+ if (webApp.restApplications.isEmpty()) {
+ for (String clazz : webApp.restClass) {
+ try {
+ deployRestObject(webApp.contextRoot, load(classLoader, clazz), null, classLoader, RsHttpListener.Scope.PROTOTYPE);
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBRestRuntimeException("can't find class " + clazz, e);
+ }
+ LOGGER.info("REST service deployed: " + clazz);
+ }
+ } else {
+ for (String app : webApp.restApplications) { // normally a unique one but we support more
+ Application appInstance;
+ try {
+ appInstance = Application.class.cast(load(classLoader, app));
+ } catch (ClassNotFoundException e) {
+ throw new OpenEJBRestRuntimeException("can't find class " + app, e);
+ }
+
+ for (Object o : appInstance.getSingletons()) {
+ deployRestObject(webApp.contextRoot, o, appInstance, classLoader, RsHttpListener.Scope.SINGLETON);
+ LOGGER.info("deploying REST singleton: " + o);
+ }
+ for (Class<?> clazz : appInstance.getClasses()) {
+ deployRestObject(webApp.contextRoot, instantiate(clazz), appInstance, classLoader, RsHttpListener.Scope.PROTOTYPE);
+ LOGGER.info("deploying REST class: " + clazz);
+ }
+
+ LOGGER.info("REST application deployed: " + app);
+ }
+ }
+ }
+ }
+ }
+
+ private void deployRestObject(String context, Object o, Application app, ClassLoader classLoader, RsHttpListener.Scope scope) {
+ final String nopath = getAddress(NOPATH_PREFIX + context, o) + "/.*";
+ final RsHttpListener listener = createHttpListener(o, scope);
+ final List<String> addresses = rsRegistry.createRsHttpListener(listener, classLoader, nopath.substring(NOPATH_PREFIX.length() - 1));
+ final String address = HttpUtil.selectSingleAddress(addresses);
+
+ restInstances.put(address, o);
+ listener.deploy(getFullContext(address, context), o, app);
+ }
+
+ protected abstract RsHttpListener createHttpListener(Object o, RsHttpListener.Scope scope);
+
+
+ private static String getFullContext(String address, String context) {
+ int idx = address.indexOf(context);
+ String base = address.substring(0, idx);
+ if (!base.endsWith("/") && !context.startsWith("/")) {
+ base = base + '/';
+ }
+ return base + context;
+ }
+
+ private String getAddress(String context, Object o) {
+ try {
+ return UriBuilder.fromUri(new URI(context)).path(o.getClass()).build().toURL().toString();
+ } catch (MalformedURLException e) {
+ throw new OpenEJBRestRuntimeException("url is malformed", e);
+ } catch (URISyntaxException e) {
+ throw new OpenEJBRestRuntimeException("uri syntax is not correct", e);
+ }
+ }
+
+ private void undeployRestObject(String context) {
+ RsHttpListener.class.cast(rsRegistry.removeListener(context)).undeploy();
+ }
+
+ private Object load(ClassLoader classLoader, String clazz) throws ClassNotFoundException {
+ Class<?> loaded;
+ loaded = classLoader.loadClass(clazz);
+ return instantiate(loaded);
+ }
+
+ private <T> T instantiate(Class<T> clazz) {
+ try {
+ return clazz.newInstance();
+ } catch (InstantiationException e) {
+ final String msg = "can't instantiate REST object " + clazz;
+ LOGGER.error(msg, e);
+ throw new OpenEJBRestRuntimeException(msg, e);
+ } catch (IllegalAccessException e) {
+ final String msg = "can't access REST object " + clazz + clazz;
+ LOGGER.error(msg, e);
+ throw new OpenEJBRestRuntimeException(msg, e);
+ }
+ }
+
+ private static ClassLoader getClassLoader(ClassLoader classLoader) {
+ ClassLoader cl = classLoader;
+ if (cl == null) {
+ cl = Thread.currentThread().getContextClassLoader();
+ }
+ if (cl == null) {
+ cl = RESTService.class.getClassLoader();
+ }
+ return cl;
+ }
+
+ @Override public void beforeApplicationDestroyed(AppInfo appInfo) {
+ if (deployedApplications.contains(appInfo)) {
+ for (WebAppInfo webApp : appInfo.webApps) {
+ for (Map.Entry<String, Application> restApp : deployedRESTApplications.entrySet()) {
+ if (restApp.getKey().endsWith(webApp.contextRoot)) {
+ deployedRESTApplications.remove(restApp.getKey());
+ }
+ }
+ for (Map.Entry<String, Object> instances : restInstances.entrySet()) {
+ if (instances.getKey().endsWith(webApp.contextRoot)) {
+ undeployRestObject(instances.getKey());
+ }
+ }
+ }
+ }
+ }
+
+ @Override public void start() throws ServiceException {
+ beforeStart();
+
+ containerSystem = (CoreContainerSystem) SystemInstance.get().getComponent(ContainerSystem.class);
+ assembler = SystemInstance.get().getComponent(Assembler.class);
+ if (assembler != null) {
+ assembler.addDeploymentListener(this);
+ for (AppInfo appInfo : assembler.getDeployedApplications()) {
+ afterApplicationCreated(appInfo);
+ }
+ }
+ }
+
+ protected void beforeStart() {
+ rsRegistry = SystemInstance.get().getComponent(RsRegistry.class);
+ if (rsRegistry == null && SystemInstance.get().getComponent(HttpListenerRegistry.class) != null) {
+ rsRegistry = new RsRegistryImpl();
+ }
+ }
+
+ @Override public void stop() throws ServiceException {
+ if (assembler != null) {
+ assembler.removeDeploymentListener(this);
+ for (AppInfo appInfo : new ArrayList<AppInfo>(deployedApplications)) {
+ beforeApplicationDestroyed(appInfo);
+ }
+ }
+ }
+
+ @Override public void service(InputStream in, OutputStream out) throws ServiceException, IOException {
+ throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
+ }
+
+ @Override public void service(Socket socket) throws ServiceException, IOException {
+ throw new UnsupportedOperationException(getClass().getName() + " cannot be invoked directly");
+ }
+
+ @Override public String getIP() {
+ return IP;
+ }
+
+ @Override public int getPort() {
+ return PORT;
+ }
+
+ @Override public void init(Properties properties) throws Exception {
+ // no-op
+ }
+}
Added: openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java (added)
+++ openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsHttpListener.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,17 @@
+package org.apache.openejb.server.rest;
+
+import org.apache.openejb.server.httpd.HttpListener;
+
+import javax.ws.rs.core.Application;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public interface RsHttpListener extends HttpListener {
+ public static enum Scope {
+ SINGLETON, PROTOTYPE
+ }
+
+ void deploy(String address, Object o, Application app);
+ void undeploy();
+}
Added: openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java (added)
+++ openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistry.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,13 @@
+package org.apache.openejb.server.rest;
+
+import org.apache.openejb.server.httpd.HttpListener;
+
+import java.util.List;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public interface RsRegistry {
+ List<String> createRsHttpListener(HttpListener listener, ClassLoader classLoader, String path);
+ HttpListener removeListener(String context);
+}
Added: openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java?rev=1145190&view=auto
==============================================================================
--- openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java (added)
+++ openejb/trunk/openejb3/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RsRegistryImpl.java Mon Jul 11 14:28:10 2011
@@ -0,0 +1,20 @@
+package org.apache.openejb.server.rest;
+
+import org.apache.openejb.server.httpd.HttpListener;
+import org.apache.openejb.server.httpd.OpenEJBHttpRegistry;
+
+import java.util.List;
+
+/**
+ * @author Romain Manni-Bucau
+ */
+public class RsRegistryImpl extends OpenEJBHttpRegistry implements RsRegistry {
+ @Override public List<String> createRsHttpListener(HttpListener listener, ClassLoader classLoader, String path) {
+ addWrappedHttpListener(listener, classLoader, path);
+ return getResolvedAddresses(path);
+ }
+
+ @Override public HttpListener removeListener(String context) {
+ return registry.removeHttpListener(context);
+ }
+}