You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2010/08/29 10:53:31 UTC

svn commit: r990512 - in /tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime: META-INF/MANIFEST.MF src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java

Author: lresende
Date: Sun Aug 29 08:53:31 2010
New Revision: 990512

URL: http://svn.apache.org/viewvc?rev=990512&view=rev
Log:
TUSCANY-3595 - Setting up proper classloader to find resources under OSGi environment

Modified:
    tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java

Modified: tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/META-INF/MANIFEST.MF?rev=990512&r1=990511&r2=990512&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/META-INF/MANIFEST.MF Sun Aug 29 08:53:31 2010
@@ -27,6 +27,7 @@ Import-Package: javax.jws,
  org.apache.tuscany.sca.databinding;version="2.0.0",
  org.apache.tuscany.sca.databinding.javabeans;version="2.0.0",
  org.apache.tuscany.sca.databinding.xml;version="2.0.0",
+ org.apache.tuscany.sca.extensibility;version="2.0.0",
  org.apache.tuscany.sca.host.http;version="2.0.0",
  org.apache.tuscany.sca.interfacedef;version="2.0.0",
  org.apache.tuscany.sca.interfacedef.impl;version="2.0.0",

Modified: tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java?rev=990512&r1=990511&r2=990512&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java Sun Aug 29 08:53:31 2010
@@ -6,15 +6,15 @@
  * 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.    
+ * under the License.
  */
 
 package org.apache.tuscany.sca.binding.rest.provider;
@@ -26,8 +26,13 @@ import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.validation.SchemaFactory;
 
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.extensibility.ClassLoaderContext;
 import org.apache.wink.common.internal.registry.ProvidersRegistry;
 import org.apache.wink.common.internal.registry.metadata.MethodMetadata;
 import org.apache.wink.server.internal.DeploymentConfiguration;
@@ -36,7 +41,7 @@ import org.apache.wink.server.internal.r
 import org.apache.wink.server.internal.servlet.RestServlet;
 
 /**
- * 
+ *
  */
 public class TuscanyRESTServlet extends RestServlet {
     private static final long serialVersionUID = 89997233133964915L;
@@ -53,7 +58,25 @@ public class TuscanyRESTServlet extends 
     @Override
     public DeploymentConfiguration getDeploymentConfiguration() throws ClassNotFoundException, InstantiationException,
         IllegalAccessException, IOException {
-        DeploymentConfiguration config = super.getDeploymentConfiguration();
+
+
+        // setup proper classLoader to work on OSGi environment
+        ClassLoader cl =
+            ClassLoaderContext.setContextClassLoader(Thread.currentThread().getContextClassLoader(),
+                                                     registry.getServiceDiscovery(),
+                                                     "javax.ws.rs.ext.RuntimeDelegate",
+                                                     "META-INF/wink-alternate-shortcuts.properties",
+                                                     "META-INF/server/wink-providers");
+
+        DeploymentConfiguration config = null;
+        try {
+            config = super.getDeploymentConfiguration();
+        } finally {
+            if (cl != null) {
+                // return previous classLoader
+                Thread.currentThread().setContextClassLoader(cl);
+            }
+        }
 
         // [rfeng] FIXME: This is a hack to fool Apache wink to not remove the servlet path
         config.setFilterConfig(new FilterConfig() {