You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/07/20 01:27:40 UTC

svn commit: r965675 - in /shindig/trunk: ./ java/common/ java/common/src/main/java/org/apache/shindig/expressions/ java/common/src/main/java/org/apache/shindig/expressions/jasper/ java/common/src/main/java/org/apache/shindig/expressions/juel/ java/comm...

Author: lindner
Date: Mon Jul 19 23:27:39 2010
New Revision: 965675

URL: http://svn.apache.org/viewvc?rev=965675&view=rev
Log:
SHINDIG-1383 | Patch from Mark Nesbitt | Allow choice of El implementations (Juel/Jasper)

Added:
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ELTypeConverter.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ExpressionProvider.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperConversionModule.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperModule.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperProvider.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperTypeConverter.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelModule.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelProvider.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelTypeConverter.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/JasperExpressionsTest.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/JuelExpressionsTest.java
Modified:
    shindig/trunk/java/common/pom.xml
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
    shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
    shindig/trunk/java/gadgets/pom.xml
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateELResolver.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
    shindig/trunk/java/samples/pom.xml
    shindig/trunk/java/server/pom.xml
    shindig/trunk/java/social-api/pom.xml
    shindig/trunk/pom.xml

Modified: shindig/trunk/java/common/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/pom.xml (original)
+++ shindig/trunk/java/common/pom.xml Mon Jul 19 23:27:39 2010
@@ -155,9 +155,12 @@
       <artifactId>juel-impl</artifactId>
     </dependency>
     <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-api</artifactId>
-      <scope>provided</scope>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>el-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>jasper-el</artifactId>
     </dependency>
     <dependency>
       <groupId>xml-apis</groupId>

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ELTypeConverter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ELTypeConverter.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ELTypeConverter.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ELTypeConverter.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,44 @@
+/*
+ * 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.shindig.expressions;
+
+/**
+ * Expression Language type conversion interface.  
+ */
+import javax.el.ELException;
+
+import org.apache.shindig.expressions.juel.JuelTypeConverter;
+
+import com.google.inject.ImplementedBy;
+
+@ImplementedBy(JuelTypeConverter.class)
+public interface ELTypeConverter {
+
+  /**
+   * for some EL without custom type conversion (Jasper), we want to delay
+   * conversion until after expression has been evaluated (with minimal amount of coercion).
+   */
+  public boolean isPostConvertible(Class<?> type);
+
+  /**
+   *
+   */
+  public <T> T convert(Object obj, Class<T> type) throws ELException;
+
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ExpressionProvider.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ExpressionProvider.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ExpressionProvider.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ExpressionProvider.java Mon Jul 19 23:27:39 2010
@@ -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.shindig.expressions;
+
+import javax.el.ExpressionFactory;
+
+import org.apache.shindig.common.cache.CacheProvider;
+import org.apache.shindig.expressions.juel.JuelProvider;
+
+import com.google.inject.ImplementedBy;
+
+@ImplementedBy(JuelProvider.class)
+public interface ExpressionProvider {
+
+  /**
+   * 
+   * @param cacheProvider - the cache provider - not used by all EL implementations.
+   * @param converter - type conversion class - 
+   * @return
+   */
+  ExpressionFactory newExpressionFactory(CacheProvider cacheProvider,
+      ELTypeConverter converter);
+
+}

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/Expressions.java Mon Jul 19 23:27:39 2010
@@ -18,20 +18,23 @@
  */
 package org.apache.shindig.expressions;
 
-import org.apache.shindig.common.cache.Cache;
 import org.apache.shindig.common.cache.CacheProvider;
-import org.apache.shindig.common.cache.NullCache;
+import org.apache.shindig.expressions.juel.JuelProvider;
+import org.apache.shindig.expressions.juel.JuelTypeConverter;
 
 import java.util.Map;
 
 import javax.el.ArrayELResolver;
 import javax.el.CompositeELResolver;
 import javax.el.ELContext;
+import javax.el.ELException;
 import javax.el.ELResolver;
 import javax.el.ExpressionFactory;
 import javax.el.FunctionMapper;
 import javax.el.ListELResolver;
 import javax.el.MapELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
 import javax.el.ValueExpression;
 import javax.el.VariableMapper;
 
@@ -39,43 +42,46 @@ import com.google.common.collect.Maps;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import de.odysseus.el.ExpressionFactoryImpl;
-import de.odysseus.el.misc.TypeConverter;
-import de.odysseus.el.tree.Tree;
-import de.odysseus.el.tree.TreeCache;
-import de.odysseus.el.tree.TreeStore;
-import de.odysseus.el.tree.impl.Builder;
 
 /**
  * A facade to the expressions functionality.
  */
 @Singleton
 public class Expressions {
-  private static final String EXPRESSION_CACHE = "expressions";
   
   private final ExpressionFactory factory;
   private final ELContext parseContext;
   private final ELResolver defaultELResolver;
   private final Functions functions;
-  private final TypeConverter typeConverter;
+  private final ELTypeConverter typeConverter;
 
   /** 
    * Returns an instance of Expressions that doesn't require
    * any functions or perform any caching.  Use only for testing.
    */
+  public static Expressions forTesting(Functions functions) {
+    return new Expressions(functions, null, new JuelTypeConverter(), new JuelProvider());
+  }
+  
+  /** 
+   * Returns an instance of Expressions that doesn't require
+   * any functions or perform any caching.  Use only for testing.
+   */
   public static Expressions forTesting() {
-    return new Expressions(null, null, new ShindigTypeConverter());
+    return new Expressions(null, null, new JuelTypeConverter(), new JuelProvider());
   }
   
   @Inject
   public Expressions(Functions functions, CacheProvider cacheProvider,
-      ShindigTypeConverter typeConverter) {
+      ELTypeConverter typeConverter, ExpressionProvider expProvider) {
     this.functions = functions;
     this.typeConverter = typeConverter;
-    factory = newExpressionFactory(cacheProvider);
+    factory = newExpressionFactory(expProvider, cacheProvider);
     // Stub context with no FunctionMapper, used only to parse expressions
     parseContext = new Context(null);
     defaultELResolver = createDefaultELResolver();
+   
+  
   }
 
   /**
@@ -100,40 +106,31 @@ public class Expressions {
    * @return a ValueExpression corresponding to the expression
    */
   public ValueExpression parse(String expression, Class<?> type) {
-    return factory.createValueExpression(parseContext, expression, type);
+    boolean shouldConvert = typeConverter.isPostConvertible(type);
+    if (shouldConvert) {
+      return new ValueExpressionWrapper(factory.createValueExpression(
+          parseContext, expression, Object.class), typeConverter, type);
+    }
+    else {
+      return factory.createValueExpression(parseContext, expression, type);
+    }
   }
   
   public ValueExpression constant(Object value, Class<?> type) {
-    return factory.createValueExpression(value, type);
-  }
-  
-  /**
-   * Create a JUEL cache of expressions.
-   */
-  private TreeCache createTreeCache(CacheProvider cacheProvider) {
-    Cache<String, Tree> treeCache;
-    if (cacheProvider == null) {
-      treeCache = new NullCache<String, Tree>();
-    } else {
-      treeCache = cacheProvider.createCache(EXPRESSION_CACHE);
+    boolean shouldConvert = typeConverter.isPostConvertible(type);
+    if (shouldConvert) {
+      return new ValueExpressionWrapper(factory.createValueExpression(value, Object.class), typeConverter, type);
     }
-
-    final Cache<String, Tree> resolvedTreeCache = treeCache;
-    return new TreeCache() {
-      public Tree get(String expression) {
-        return resolvedTreeCache.getElement(expression);
-      }
-
-      public void put(String expression, Tree tree) {
-        resolvedTreeCache.addElement(expression, tree);
-      }
-    };
+    else {
+      return factory.createValueExpression(value, type);
+    }
+   
   }
   
   
-  private ExpressionFactory newExpressionFactory(CacheProvider cacheProvider) {
-    TreeStore store = new TreeStore(new Builder(), createTreeCache(cacheProvider));
-    return new ExpressionFactoryImpl(store, typeConverter);
+  private ExpressionFactory newExpressionFactory(
+      ExpressionProvider expProvider, CacheProvider cacheProvider) {
+    return expProvider.newExpressionFactory(cacheProvider, typeConverter);
   }
   
   /**
@@ -200,4 +197,71 @@ public class Expressions {
     }
     
   }
+  
+  private class ValueExpressionWrapper extends ValueExpression {
+
+    private static final long serialVersionUID = 2135607228206570229L;
+    private ValueExpression expression = null;
+    private Class<?> type = null;
+    private ELTypeConverter converter = null;
+
+    public ValueExpressionWrapper(ValueExpression ve,
+        ELTypeConverter converter, Class<?> type) {
+      expression = ve;
+      this.type = type;
+      this.converter = converter;
+    }
+
+    @Override
+    public Object getValue(ELContext context) throws NullPointerException,
+        PropertyNotFoundException, ELException {
+        return converter.convert(expression.getValue(context), type);
+    }
+
+    @Override
+    public Class<?> getExpectedType() {
+      return expression.getExpectedType();
+    }
+
+    @Override
+    public Class<?> getType(ELContext context) throws NullPointerException,
+        PropertyNotFoundException, ELException {
+      return expression.getType(context);
+    }
+
+    @Override
+    public boolean isReadOnly(ELContext context) throws NullPointerException,
+        PropertyNotFoundException, ELException {
+      return expression.isReadOnly(context);
+    }
+
+    @Override
+    public void setValue(ELContext context, Object value)
+        throws NullPointerException, PropertyNotFoundException,
+        PropertyNotWritableException, ELException {
+      expression.setValue(context, value);
+
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+      return expression.equals(obj);
+    }
+
+    @Override
+    public String getExpressionString() {
+      return expression.getExpressionString();
+    }
+
+    @Override
+    public int hashCode() {
+      return expression.hashCode();
+    }
+
+    @Override
+    public boolean isLiteralText() {
+      return expression.isLiteralText();
+    }
+  }
+
 }

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/ShindigTypeConverter.java Mon Jul 19 23:27:39 2010
@@ -28,19 +28,18 @@ import java.util.StringTokenizer;
 import javax.el.ELException;
 
 import com.google.common.collect.ImmutableList;
-import com.google.inject.Inject;
 
-import de.odysseus.el.misc.TypeConverter;
 
 /**
  * Custom type converter class that overrides the default EL coercion rules
  * where necessary.  Specifically, Booleans are handled differently,
  * and JSONArray is supported.
  */
-public class ShindigTypeConverter implements TypeConverter {
-
-  @Inject
-  public ShindigTypeConverter() {  
+public class ShindigTypeConverter implements ELTypeConverter {
+ 
+  
+  public  boolean isPostConvertible(Class<?> type) {
+    return false;
   }
   
   @SuppressWarnings("unchecked")
@@ -58,8 +57,8 @@ public class ShindigTypeConverter implem
       return (T) coerceToIterable(obj);
     }
     
-    // Otherwise, use the default
-    return TypeConverter.DEFAULT.convert(obj, type);
+    //  Nothing more we can do.
+    return null;
   }
 
   /**

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperConversionModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperConversionModule.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperConversionModule.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperConversionModule.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,35 @@
+/*
+ * 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.shindig.expressions.jasper;
+
+
+import org.apache.shindig.expressions.ELTypeConverter;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+
+/**
+ * Creates a module to supply a Jasper Type Converter
+ */
+public class JasperConversionModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    bind(ELTypeConverter.class).to(JasperTypeConverter.class).in(Scopes.SINGLETON);;
+  }
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperModule.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperModule.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperModule.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,35 @@
+/*
+ * 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.shindig.expressions.jasper;
+
+import org.apache.shindig.expressions.ExpressionProvider;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+
+/**
+ * Creates a module to supply a Jasper Provider
+ */
+public class JasperModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    bind(ExpressionProvider.class).to(JasperProvider.class)
+        .in(Scopes.SINGLETON);
+  }
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperProvider.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperProvider.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperProvider.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperProvider.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,34 @@
+/*
+ * 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.shindig.expressions.jasper;
+
+import javax.el.ExpressionFactory;
+import org.apache.el.ExpressionFactoryImpl;
+
+import org.apache.shindig.common.cache.CacheProvider;
+import org.apache.shindig.expressions.ELTypeConverter;
+import org.apache.shindig.expressions.ExpressionProvider;
+
+public class JasperProvider implements ExpressionProvider {
+
+  public ExpressionFactory newExpressionFactory(CacheProvider cacheProvider,
+      ELTypeConverter converter) {
+    return new ExpressionFactoryImpl();
+  }
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperTypeConverter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperTypeConverter.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperTypeConverter.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/jasper/JasperTypeConverter.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,35 @@
+/*
+ * 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.shindig.expressions.jasper;
+
+import org.apache.shindig.expressions.ShindigTypeConverter;
+import org.json.JSONArray;
+
+public class JasperTypeConverter extends ShindigTypeConverter {
+
+  @Override
+  public boolean isPostConvertible(Class<?> type) {
+    if (type == Boolean.class || type == Boolean.TYPE
+        || type == JSONArray.class || type == Iterable.class) {
+      return true;
+    }
+    return false;
+  }
+
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelModule.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelModule.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelModule.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelModule.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,34 @@
+/*
+ * 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.shindig.expressions.juel;
+
+import org.apache.shindig.expressions.ExpressionProvider;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+
+/**
+ * Creates a module to supply a Juel Provider
+ */
+public class JuelModule extends AbstractModule {
+  @Override
+  protected void configure() {
+    bind(ExpressionProvider.class).to(JuelProvider.class).in(Scopes.SINGLETON);;
+  }
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelProvider.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelProvider.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelProvider.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelProvider.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,73 @@
+/*
+ * 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.shindig.expressions.juel;
+
+import javax.el.ExpressionFactory;
+
+import de.odysseus.el.ExpressionFactoryImpl;
+import de.odysseus.el.misc.TypeConverter;
+import de.odysseus.el.tree.Tree;
+import de.odysseus.el.tree.TreeCache;
+import de.odysseus.el.tree.TreeStore;
+import de.odysseus.el.tree.impl.Builder;
+
+import org.apache.shindig.common.cache.Cache;
+import org.apache.shindig.common.cache.NullCache;
+import org.apache.shindig.common.cache.CacheProvider;
+import org.apache.shindig.expressions.ELTypeConverter;
+import org.apache.shindig.expressions.ExpressionProvider;
+
+public class JuelProvider implements ExpressionProvider {
+
+  private static final String EXPRESSION_CACHE = "expressions";
+
+  /**
+   * Any provided JUEL converter must implement both JUEL TypeConverter impl and ELTypeConverter
+   */
+  public ExpressionFactory newExpressionFactory(CacheProvider cacheProvider,
+      ELTypeConverter converter) {
+    TreeStore store = new TreeStore(new Builder(),
+        createTreeCache(cacheProvider));
+    return new ExpressionFactoryImpl(store, (TypeConverter) converter);
+  }
+
+  /**
+   * Create a JUEL cache of expressions.
+   */
+  private TreeCache createTreeCache(CacheProvider cacheProvider) {
+    Cache<String, Tree> treeCache;
+    if (cacheProvider == null) {
+      treeCache = new NullCache<String, Tree>();
+    } else {
+      treeCache = cacheProvider.createCache(EXPRESSION_CACHE);
+    }
+
+    final Cache<String, Tree> resolvedTreeCache = treeCache;
+    return new TreeCache() {
+      public Tree get(String expression) {
+        return resolvedTreeCache.getElement(expression);
+      }
+
+      public void put(String expression, Tree tree) {
+        resolvedTreeCache.addElement(expression, tree);
+      }
+    };
+  }
+
+}

Added: shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelTypeConverter.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelTypeConverter.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelTypeConverter.java (added)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/expressions/juel/JuelTypeConverter.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,42 @@
+/*
+ * 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.shindig.expressions.juel;
+
+import javax.el.ELException;
+
+import org.apache.shindig.expressions.ShindigTypeConverter;
+
+import de.odysseus.el.misc.TypeConverter;
+
+public class JuelTypeConverter extends ShindigTypeConverter implements
+    TypeConverter {
+
+  private static final long serialVersionUID = -4382092735987940726L;
+
+  @Override
+  public <T> T convert(Object obj, Class<T> type) throws ELException {
+    T retValue = super.convert(obj, type);
+    if (retValue == null) {
+      retValue = TypeConverter.DEFAULT.convert(obj, type);
+    }
+
+    return retValue;
+  }
+
+}

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/ExpressionsTest.java Mon Jul 19 23:27:39 2010
@@ -39,7 +39,7 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.Maps;
 
 public class ExpressionsTest {
-  private Expressions expressions;
+  public Expressions expressions;
   private ELContext context;
   private Map<String, Object> variables;
   
@@ -133,14 +133,13 @@ public class ExpressionsTest {
   
   @Test
   public void booleanCoercionOfNumbers() throws Exception{
+    // Negation tests have been moved to EL subdir
     addVariable("bool", 0);
     assertFalse(evaluate("${bool}", Boolean.class));
-    assertTrue(evaluate("${!bool}", Boolean.class));
 
     addVariable("bool", 1);
     assertTrue(evaluate("${bool}", Boolean.class));
-    assertFalse(evaluate("${!bool}", Boolean.class));
-  }
+  } 
   
   @Test
   public void booleanCoercionOfNull() throws Exception{
@@ -151,6 +150,7 @@ public class ExpressionsTest {
   
   @Test
   public void booleanCoercionOfStrings() throws Exception{
+    // Negation tests for FALSE and any String have been moved El subdir
     addVariable("bool", "");
     assertFalse(evaluate("${bool}", Boolean.class));
     assertTrue(evaluate("${!bool}", Boolean.class));
@@ -162,7 +162,6 @@ public class ExpressionsTest {
     // Case-sensitive coercion:  FALSE is true
     addVariable("bool", "FALSE");
     assertTrue(evaluate("${bool}", Boolean.class));
-    assertFalse(evaluate("${!bool}", Boolean.class));
 
     addVariable("bool", "true");
     assertTrue(evaluate("${bool}", Boolean.class));
@@ -170,8 +169,8 @@ public class ExpressionsTest {
     
     addVariable("bool", "booga");
     assertTrue(evaluate("${bool}", Boolean.class));
-    assertFalse(evaluate("${!bool}", Boolean.class));
-  }
+  } 
+  
   
   @Test
   public void iterableCoercionOfScalar() throws Exception {
@@ -219,12 +218,12 @@ public class ExpressionsTest {
         ImmutableList.copyOf(evaluate("${iter}", Iterable.class)));
   }
   
-  private <T> T evaluate(String expression, Class<T> type) {
+  public <T> T evaluate(String expression, Class<T> type) {
     ValueExpression expr = expressions.parse(expression, type);
     return type.cast(expr.getValue(context));
   }
 
-  private void addVariable(String key, Object value) {
+  public void addVariable(String key, Object value) {
     variables.put(key, value);
   }
 }

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/FunctionsTest.java Mon Jul 19 23:27:39 2010
@@ -70,7 +70,7 @@ public class FunctionsTest extends Asser
 
   @Test
   public void testExpressionEvaluation() {
-    Expressions expressions = new Expressions(functions, null, new ShindigTypeConverter());
+    Expressions expressions = Expressions.forTesting(functions);
     ELContext context = expressions.newELContext();
     ValueExpression expression = expressions.parse("${other:bonjour()}", String.class);
     

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/OpensocialFunctionsTest.java Mon Jul 19 23:27:39 2010
@@ -19,6 +19,7 @@
 package org.apache.shindig.expressions;
 
 import org.apache.commons.codec.binary.Base64;
+
 import java.util.Map;
 
 import javax.el.ELContext;
@@ -38,7 +39,7 @@ public class OpensocialFunctionsTest ext
   @Before
   public void setUp() {
     Functions functions = new Functions(OpensocialFunctions.class);
-    expressions = new Expressions(functions, null, new ShindigTypeConverter());
+    expressions = Expressions.forTesting(functions);
     context = expressions.newELContext(new RootELResolver(vars));
   }
 

Added: shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/JasperExpressionsTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/JasperExpressionsTest.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/JasperExpressionsTest.java (added)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/jasper/JasperExpressionsTest.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,65 @@
+/*
+ * 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.shindig.expressions.jasper;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.shindig.expressions.Expressions;
+import org.apache.shindig.expressions.ExpressionsTest;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class JasperExpressionsTest  extends ExpressionsTest{
+ 
+  @Before
+  @Override
+  public void setUp() {
+    super.setUp();
+    expressions = new Expressions(null, null, new JasperTypeConverter(), new JasperProvider());
+  }
+  
+  @Ignore
+  public void booleanCoercionOfStringsFails() throws Exception{
+    // Case-sensitive coercion:  FALSE is true
+    // Test fails because Jasper type conversion routines does not recognize FALSE.
+    addVariable("bool", "FALSE");
+    assertFalse(evaluate("${!bool}", Boolean.class));
+    
+    // Jasper cannot handle this
+    addVariable("bool", "booga");
+    assertFalse(evaluate("${!bool}", Boolean.class));
+  }
+  
+  @Ignore  
+  public void booleanCoercionOfNumbersFails() throws Exception {
+    // These test cases will not pass with Jasper due to ELSupport exceptions
+    // thrown when coercing Integer to Boolean
+    addVariable("bool", 0);
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", 1);
+    assertFalse(evaluate("${!bool}", Boolean.class));
+
+    evaluate("${true && 5}", String.class);
+  }
+  
+}

Added: shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/JuelExpressionsTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/JuelExpressionsTest.java?rev=965675&view=auto
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/JuelExpressionsTest.java (added)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/expressions/juel/JuelExpressionsTest.java Mon Jul 19 23:27:39 2010
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.expressions.juel;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Map;
+
+import javax.el.ELContext;
+import javax.el.ValueExpression;
+
+import org.apache.shindig.expressions.Expressions;
+import org.apache.shindig.expressions.RootELResolver;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Maps;
+
+public class JuelExpressionsTest {
+
+  private Expressions expressions;
+  private ELContext context;
+  private Map<String, Object> variables;
+
+  @Before
+  public void setUp() {
+    expressions = Expressions.forTesting(null);
+    variables = Maps.newHashMap();
+    context = expressions.newELContext(new RootELResolver(variables));
+  }
+
+  @Test
+  public void booleanCoercionOfStringsFails() throws Exception {
+
+    addVariable("bool", "FALSE");
+    assertFalse(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", "booga");
+    assertFalse(evaluate("${!bool}", Boolean.class));
+  }
+
+  @Test
+  public void booleanCoercionOfNumbersFails() throws Exception {
+    addVariable("bool", 0);
+    assertTrue(evaluate("${!bool}", Boolean.class));
+
+    addVariable("bool", 1);
+    assertFalse(evaluate("${!bool}", Boolean.class));
+
+    evaluate("${true && 5}", String.class);
+  }
+
+  private <T> T evaluate(String expression, Class<T> type) {
+
+    ValueExpression expr = expressions.parse(expression, type);
+    return type.cast(expr.getValue(context));
+  }
+
+  private void addVariable(String key, Object value) {
+    variables.put(key, value);
+  }
+
+}

Modified: shindig/trunk/java/gadgets/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/pom.xml (original)
+++ shindig/trunk/java/gadgets/pom.xml Mon Jul 19 23:27:39 2010
@@ -228,13 +228,8 @@
       <artifactId>xml-apis</artifactId>
     </dependency>
     <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-api</artifactId>
-      <scope>provided</scope>
+        <groupId>org.apache.tomcat</groupId>
+        <artifactId>el-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/DefaultTemplateProcessor.java Mon Jul 19 23:27:39 2010
@@ -479,6 +479,8 @@ public class DefaultTemplateProcessor im
   public <T> T evaluate(String expression, Class<T> type, T defaultValue) {
     try {
       ValueExpression expr = expressions.parse(expression, type);
+      // Workaround for inability of Jasper-EL resolvers to access VariableMapper
+      elContext.putContext(TemplateContext.class, elContext);
       Object result = expr.getValue(elContext);
       return type.cast(result);
     } catch (ELException e) {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateELResolver.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateELResolver.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateELResolver.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateELResolver.java Mon Jul 19 23:27:39 2010
@@ -91,7 +91,9 @@ public class TemplateELResolver extends 
            
       // Check variables.
       if (property instanceof String) {
-        ValueExpression valueExp = context.getVariableMapper().resolveVariable((String) property);
+        // Workaround for inability of Jasper-EL resolvers to access VariableMapper
+        ELContext elContext = (ELContext)context.getContext(TemplateContext.class);
+        ValueExpression valueExp = elContext.getVariableMapper().resolveVariable((String) property);
         if (valueExp != null) {
           context.setPropertyResolved(true);
           return valueExp.getValue(context);

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultServiceFetcherTest.java Mon Jul 19 23:27:39 2010
@@ -57,7 +57,7 @@ public class DefaultServiceFetcherTest e
     JSONObject config = createConfig();
 
     JsonContainerConfig containerConfig =
-        new JsonContainerConfig(config, new Expressions(new Functions(), null, new ShindigTypeConverter()));
+        new JsonContainerConfig(config, Expressions.forTesting(new Functions()));
     mockFetcher = mock(HttpFetcher.class);
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
   }
@@ -96,7 +96,7 @@ public class DefaultServiceFetcherTest e
         .remove(DefaultServiceFetcher.OSAPI_FEATURE_CONFIG);
     JsonContainerConfig containerConfig =
         new JsonContainerConfig(config,
-            new Expressions(new Functions(), null, new ShindigTypeConverter()));
+            Expressions.forTesting(new Functions()));
     fetcher = new DefaultServiceFetcher(containerConfig, mockFetcher);
 
     EasyMock.expect(mockFetcher.fetch(EasyMock.isA(HttpRequest.class))).andReturn(

Modified: shindig/trunk/java/samples/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/samples/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/samples/pom.xml (original)
+++ shindig/trunk/java/samples/pom.xml Mon Jul 19 23:27:39 2010
@@ -169,10 +169,10 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-api</artifactId>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>el-api</artifactId>
       <scope>test</scope>
-    </dependency>
+    </dependency> 
     <dependency>
       <groupId>org.apache.shindig</groupId>
       <artifactId>shindig-common</artifactId>

Modified: shindig/trunk/java/server/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/server/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/server/pom.xml (original)
+++ shindig/trunk/java/server/pom.xml Mon Jul 19 23:27:39 2010
@@ -176,8 +176,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-api</artifactId>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>el-api</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

Modified: shindig/trunk/java/social-api/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/social-api/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/java/social-api/pom.xml (original)
+++ shindig/trunk/java/social-api/pom.xml Mon Jul 19 23:27:39 2010
@@ -162,8 +162,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>de.odysseus.juel</groupId>
-      <artifactId>juel-api</artifactId>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>el-api</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

Modified: shindig/trunk/pom.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/pom.xml?rev=965675&r1=965674&r2=965675&view=diff
==============================================================================
--- shindig/trunk/pom.xml (original)
+++ shindig/trunk/pom.xml Mon Jul 19 23:27:39 2010
@@ -1548,14 +1548,25 @@
         <version>0.97-incubator</version>
       </dependency>
       <dependency>
-        <groupId>de.odysseus.juel</groupId>
-        <artifactId>juel-api</artifactId>
-        <version>2.1.3</version>
+        <groupId>org.apache.tomcat</groupId>
+        <artifactId>el-api</artifactId>
+        <version>6.0.26</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.tomcat</groupId>
+        <artifactId>jasper-el</artifactId>
+        <version>6.0.26</version>
       </dependency>
       <dependency>
         <groupId>de.odysseus.juel</groupId>
         <artifactId>juel-impl</artifactId>
         <version>2.1.3</version>
+        <exclusions>
+          <exclusion>
+            <groupId>de.odysseus.juel</groupId> 
+            <artifactId>juel-api</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>net.sf.ezmorph</groupId>