[jboss-svn-commits] JBL Code SVN: r37451 - in labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta: tests/src/org/jboss/soa/esb and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 2 22:48:56 EDT 2011


Author: kevin.conner at jboss.com
Date: 2011-09-02 22:48:56 -0400 (Fri, 02 Sep 2011)
New Revision: 37451

Added:
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/SmooksResourceUnitTest.java
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/TestObject.java
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/smooks-resource-test.xml
Modified:
   labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/src/org/jboss/soa/esb/smooks/resource/SmooksResource.java
Log:
workaround smooks context classloader issue: JBESB-3658

Modified: labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/src/org/jboss/soa/esb/smooks/resource/SmooksResource.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/src/org/jboss/soa/esb/smooks/resource/SmooksResource.java	2011-09-02 17:15:49 UTC (rev 37450)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/src/org/jboss/soa/esb/smooks/resource/SmooksResource.java	2011-09-03 02:48:56 UTC (rev 37451)
@@ -30,6 +30,8 @@
 import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
 import org.jboss.soa.esb.lifecycle.LifecycleResourceFactory;
 import org.milyn.Smooks;
+import org.milyn.container.standalone.StandaloneApplicationContext;
+import org.milyn.resource.URIResourceLocator;
 import org.xml.sax.SAXException;
 
 /**
@@ -64,7 +66,8 @@
     public static Smooks createSmooksResource()
         throws LifecycleResourceException
     {
-        final Smooks smooks = new Smooks() ;
+        final StandaloneApplicationContext applicationContext = new DeploymentApplicationContext(true) ;
+        final Smooks smooks = new Smooks(applicationContext) ;
         lifecycleSmooksResource.getLifecycleResource().put(smooks, smooks) ;
         
         return smooks;
@@ -81,7 +84,15 @@
     public static Smooks createSmooksResource(final String config)
         throws SAXException, IOException, LifecycleResourceException
     {
-        final Smooks smooks = new Smooks(config) ;
+        final URIResourceLocator resourceLocator = new URIResourceLocator() ;
+        resourceLocator.setBaseURI(URIResourceLocator.extractBaseURI(config)) ;
+
+        final StandaloneApplicationContext applicationContext = new DeploymentApplicationContext(true) ;
+        applicationContext.setResourceLocator(resourceLocator);
+
+        final Smooks smooks = new Smooks(applicationContext) ;
+        smooks.addConfigurations(config) ;
+
         lifecycleSmooksResource.getLifecycleResource().put(smooks, smooks) ;
         
         return smooks;
@@ -98,7 +109,12 @@
     public static Smooks createSmooksResource(final InputStream is)
         throws SAXException, IOException, LifecycleResourceException
     {
-        final Smooks smooks = new Smooks(is) ;
+        final StandaloneApplicationContext applicationContext = new DeploymentApplicationContext(true) ;
+        applicationContext.setResourceLocator(new URIResourceLocator()) ;
+
+        final Smooks smooks = new Smooks(applicationContext) ;
+        smooks.addConfigurations(is) ;
+        
         lifecycleSmooksResource.getLifecycleResource().put(smooks, smooks) ;
         
         return smooks;
@@ -172,4 +188,43 @@
             }
         }
     }
+
+    private static class DeploymentApplicationContext extends StandaloneApplicationContext
+    {
+        private  ClassLoader classLoader ;
+        
+        public DeploymentApplicationContext(final boolean registerInstalledResources)
+        {
+            super(registerInstalledResources) ;
+        }
+        
+        @Override
+        public void setClassLoader(final ClassLoader classLoader)
+        {
+            this.classLoader = classLoader ;
+        }
+        
+        @Override
+        public ClassLoader getClassLoader()
+        {
+            final ClassLoader result ;
+            if (classLoader != null)
+            {
+                result = classLoader ;
+            }
+            else
+            {
+                final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader() ;
+                if (contextClassLoader != null)
+                {
+                    result = contextClassLoader ;
+                }
+                else
+                {
+                    result = getClass().getClassLoader() ;
+                }
+            }
+            return result ;
+        }
+    }
 }

Added: labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/SmooksResourceUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/SmooksResourceUnitTest.java	                        (rev 0)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/SmooksResourceUnitTest.java	2011-09-03 02:48:56 UTC (rev 37451)
@@ -0,0 +1,122 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.jboss.soa.esb.smooks.resource;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
+import org.junit.Assert;
+import org.junit.Test;
+import org.milyn.Smooks;
+import org.xml.sax.SAXException;
+
+/**
+ * Tests for SmooksResource
+ */
+public class SmooksResourceUnitTest
+{
+    @Test
+    public void smooksInputStream()
+        throws LifecycleResourceException, SAXException, IOException
+    {
+        final InputStream is = getClass().getResourceAsStream("smooks-resource-test.xml") ;
+        
+        final Thread currentThread = Thread.currentThread() ;
+        final ClassLoader current = currentThread.getContextClassLoader() ;
+        final TestClassLoader testClassLoader = new TestClassLoader(current) ;
+        currentThread.setContextClassLoader(testClassLoader) ;
+        try
+        {
+            final Smooks smooks = SmooksResource.createSmooksResource(is) ;
+            try
+            {
+                Assert.assertTrue("Context ClassLoader was not used", testClassLoader.isInvoked()) ;
+            }
+            finally
+            {
+                SmooksResource.closeSmooksResource(smooks) ;
+            }
+        }
+        finally
+        {
+            currentThread.setContextClassLoader(current) ;
+        }
+    }
+    
+    @Test
+    public void smooksStringConfig()
+        throws LifecycleResourceException, SAXException, IOException
+    {
+        final String config = getClass().getPackage().getName().replace('.', '/') + "/smooks-resource-test.xml" ;
+        
+        final Thread currentThread = Thread.currentThread() ;
+        final ClassLoader current = currentThread.getContextClassLoader() ;
+        final TestClassLoader testClassLoader = new TestClassLoader(current) ;
+        currentThread.setContextClassLoader(testClassLoader) ;
+        try
+        {
+            final Smooks smooks = SmooksResource.createSmooksResource(config) ;
+            try
+            {
+                Assert.assertTrue("Context ClassLoader was not used", testClassLoader.isInvoked()) ;
+            }
+            finally
+            {
+                SmooksResource.closeSmooksResource(smooks) ;
+            }
+        }
+        finally
+        {
+            currentThread.setContextClassLoader(current) ;
+        }
+    }
+
+    private static class TestClassLoader extends ClassLoader
+    {
+        private boolean invoked ;
+        
+        TestClassLoader(final ClassLoader parent)
+        {
+            super(parent) ;
+        }
+
+        @Override
+        protected synchronized Class<?> loadClass(String name, boolean resolve)
+            throws ClassNotFoundException
+        {
+            if (TestObject.class.getCanonicalName().equals(name))
+            {
+                invoked = true ;
+            }
+            return super.loadClass(name, resolve) ;
+        }
+        
+        boolean isInvoked()
+        {
+            return invoked ;
+        }
+    }
+
+    public static junit.framework.Test suite()
+    {
+        return new JUnit4TestAdapter( SmooksResourceUnitTest.class );
+    }
+}

Added: labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/TestObject.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/TestObject.java	                        (rev 0)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/TestObject.java	2011-09-03 02:48:56 UTC (rev 37451)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ */
+package org.jboss.soa.esb.smooks.resource;
+
+import junit.framework.JUnit4TestAdapter;
+
+import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
+import org.junit.Test;
+import org.milyn.Smooks;
+
+/**
+ * Test Object for SmooksResource test
+ */
+public class TestObject
+{
+	private boolean testField ;
+	
+	public boolean isTestField()
+	{
+		return testField ;
+	}
+	
+	public void boolean setTestField(final boolean testField)
+	{
+		this.testField = testField ;
+	}
+}

Added: labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/smooks-resource-test.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/smooks-resource-test.xml	                        (rev 0)
+++ labs/jbossesb/branches/JBESB_4_10_CP/product/rosetta/tests/src/org/jboss/soa/esb/smooks/resource/smooks-resource-test.xml	2011-09-03 02:48:56 UTC (rev 37451)
@@ -0,0 +1,9 @@
+<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd">
+  <params>
+    <param name="stream.filter.type">SAX</param>
+  </params>
+
+  <jb:bean beanId="complexObject" createOnElement="$document" class="org.jboss.soa.esb.smooks.resource.TestObject">
+    <jb:value property="booleanField" data="testField" />
+  </jb:bean>
+</smooks-resource-list>
\ No newline at end of file



More information about the jboss-svn-commits mailing list