You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Vikas Mayur <vi...@hotwaxmedia.com> on 2008/12/08 13:02:22 UTC
Re: svn commit: r724146 - in /ofbiz/trunk: ./ applications/product/script/org/ofbiz/product/inventory/ framework/base/lib/ framework/base/src/org/ofbiz/base/util/string/
similar error at https://demo.hotwaxmedia.com/catalog/control/ListShipmentMethodTypes
Vikas
On Dec 8, 2008, at 9:04 AM, Hans Bakker wrote:
> This commit causes the following error:
> going to:
> https://localhost3:8443/accounting/control/AdminMain?organizationPartyId=Company
>
> gives the error:
> org.ofbiz.widget.screen.ScreenRenderException: Error rendering screen
> [component://common/widget/CommonScreens.xml#GlobalDecorator]:
> javax.el.ELException: Error parsing '${uiLabelMap.}': syntax error at
> position 13, encountered '}', expected (Error parsing '$
> {uiLabelMap.}':
> syntax error at position 13, encountered '}', expected )
>
> regards,
> Hans
>
> On Sun, 2008-12-07 at 16:11 +0000, adrianc@apache.org wrote:
>> Author: adrianc
>> Date: Sun Dec 7 08:11:44 2008
>> New Revision: 724146
>>
>> URL: http://svn.apache.org/viewvc?rev=724146&view=rev
>> Log:
>> Integrated the Unified Expression Language (JSR-245) into the
>> FlexibleStringExpander class.
>>
>> This commit also includes an example usage in InventoryServices.xml.
>>
>> Added:
>> ofbiz/trunk/framework/base/lib/juel-2.1.0.jar (with props)
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> UelUtil.java (with props)
>> Modified:
>> ofbiz/trunk/.classpath
>> ofbiz/trunk/LICENSE
>> ofbiz/trunk/applications/product/script/org/ofbiz/product/
>> inventory/InventoryServices.xml
>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> FlexibleStringExpander.java
>>
>> Modified: ofbiz/trunk/.classpath
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/.classpath?rev=724146&r1=724145&r2=724146&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- ofbiz/trunk/.classpath (original)
>> +++ ofbiz/trunk/.classpath Sun Dec 7 08:11:44 2008
>> @@ -98,6 +98,7 @@
>> <classpathentry kind="lib" path="framework/base/lib/
>> log4j-1.2.15.jar"/>
>> <classpathentry kind="lib" path="framework/base/lib/junitperf.jar"/>
>> <classpathentry kind="lib" path="framework/base/lib/junit.jar"/>
>> + <classpathentry kind="lib" path="framework/base/lib/
>> juel-2.1.0.jar"/>
>> <classpathentry kind="lib" path="framework/base/lib/jdbm-1.0.jar"/>
>> <classpathentry kind="lib" path="framework/base/lib/jakarta-
>> regexp-1.5.jar"/>
>> <classpathentry kind="lib" path="framework/base/lib/icu4j-3_6.jar"/>
>>
>> Modified: ofbiz/trunk/LICENSE
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/LICENSE?rev=724146&r1=724145&r2=724146&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- ofbiz/trunk/LICENSE (original)
>> +++ ofbiz/trunk/LICENSE Sun Dec 7 08:11:44 2008
>> @@ -17,6 +17,7 @@
>> ofbiz/trunk/framework/base/lib/avalon-util-exception-1.0.0.jar
>> ofbiz/trunk/framework/base/lib/jakarta-regexp-1.5.jar
>> ofbiz/trunk/framework/base/lib/jpim-0.1.jar
>> +ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
>> ofbiz/trunk/framework/base/lib/log4j-1.2.15.jar
>> ofbiz/trunk/framework/base/lib/mx4j-3.0.1.jar
>> ofbiz/trunk/framework/base/lib/mx4j-remote-3.0.1.jar
>> @@ -1929,6 +1930,7 @@
>> =
>> =
>> =
>> =
>> =====================================================================
>> The following library distributed with Apache OFBiz is licensed
>> under the
>> COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL):
>> +ofbiz/trunk/framework/base/lib/juel-2.1.0.jar (javax.el.* API)
>> ofbiz/trunk/framework/base/lib/mail.jar
>> =
>> =
>> =
>> =
>> =====================================================================
>> COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1.
>>
>> Modified: ofbiz/trunk/applications/product/script/org/ofbiz/product/
>> inventory/InventoryServices.xml
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/product/inventory/InventoryServices.xml?rev=724146&r1=724145&r2=724146&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- ofbiz/trunk/applications/product/script/org/ofbiz/product/
>> inventory/InventoryServices.xml (original)
>> +++ ofbiz/trunk/applications/product/script/org/ofbiz/product/
>> inventory/InventoryServices.xml Sun Dec 7 08:11:44 2008
>> @@ -775,7 +775,7 @@
>> <field-to-list field-name="item" list-
>> name="reservations"/>
>> </else>
>> </if>
>> - <set field="reserveQtyAccum" value="$
>> {bsh:reserveQtyAccum + item.getDouble("quantity");}"
>> type="Double"/>
>> + <set field="reserveQtyAccum" value="$
>> {reserveQtyAccum + item.quantity}" type="Double"/>
>> </if-empty>
>> </then>
>> </if>
>>
>> Added: ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/juel-2.1.0.jar?rev=724146&view=auto
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> Binary file - no diff available.
>>
>> Propchange: ofbiz/trunk/framework/base/lib/juel-2.1.0.jar
>> ------------------------------------------------------------------------------
>> svn:mime-type = application/octet-stream
>>
>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> FlexibleStringExpander.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/FlexibleStringExpander.java?rev=724146&r1=724145&r2=724146&view=diff
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> FlexibleStringExpander.java (original)
>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> FlexibleStringExpander.java Sun Dec 7 08:11:44 2008
>> @@ -36,20 +36,21 @@
>>
>> import bsh.EvalError;
>>
>> -/** Expands string values within a Map context supporting the ${}
>> syntax for
>> - * variable placeholders and the "." (dot) and "[]" (square-brace)
>> syntax
>> - * elements for accessing Map entries and List elements in the
>> context.
>> - * It Also supports the execution of bsh files by using the 'bsh:'
>> prefix.
>> +/** Expands String values that contain Unified Expression Language
>> syntax.
>> + * Also supports the execution of bsh scripts by using the 'bsh:'
>> prefix.
>> * Further it is possible to control the output by specifying the
>> suffix
>> * '?currency(XXX)' to format the output according the current locale
>> - * and specified (XXX) currency
>> + * and specified (XXX) currency.<p>This class extends the UEL by
>> allowing
>> + * nested expressions.</p>
>> */
>> @SuppressWarnings("serial")
>> public class FlexibleStringExpander implements Serializable {
>>
>> public static final String module =
>> FlexibleStringExpander.class.getName();
>> - protected static UtilCache<String, FlexibleStringExpander>
>> exprCache = new UtilCache<String,
>> FlexibleStringExpander>("flexibleStringExpander.ExpressionCache");
>> - protected static FlexibleStringExpander nullExpr = new
>> FlexibleStringExpander(null);
>> + public static final String openBracket = "${";
>> + public static final String closeBracket = "}";
>> + protected static final UtilCache<String,
>> FlexibleStringExpander> exprCache = new UtilCache<String,
>> FlexibleStringExpander>("flexibleStringExpander.ExpressionCache");
>> + protected static final FlexibleStringExpander nullExpr = new
>> FlexibleStringExpander(null);
>> protected String orig;
>> protected List<StrElem> strElems = null;
>> protected int hint = 20;
>> @@ -61,7 +62,7 @@
>> public FlexibleStringExpander(String original) {
>> // TODO: Change this to protected, remove @deprecated
>> javadoc comment
>> this.orig = original;
>> - if (original != null && original.contains("${")) {
>> + if (original != null && original.contains(openBracket)) {
>> this.strElems = getStrElems(original);
>> if (original.length() > this.hint) {
>> this.hint = original.length();
>> @@ -146,7 +147,7 @@
>> return nullExpr;
>> }
>> // Remove the next three lines to cache all expressions
>> - if (!original.contains("${")) {
>> + if (!original.contains(openBracket)) {
>> return new FlexibleStringExpander(original);
>> }
>> FlexibleStringExpander fse = exprCache.get(original);
>> @@ -192,7 +193,7 @@
>> * @return The original String expanded by replacing varaible
>> place holders.
>> */
>> public static String expandString(String original,
>> Map<String, ? extends Object> context, TimeZone timeZone, Locale
>> locale) {
>> - if (context == null || original == null || !
>> original.contains("${")) {
>> + if (context == null || original == null || !
>> original.contains(openBracket)) {
>> return original;
>> }
>> FlexibleStringExpander fse =
>> FlexibleStringExpander.getInstance(original);
>> @@ -209,7 +210,7 @@
>> }
>> int origLen = original.length();
>> ArrayList<StrElem> strElems = new ArrayList<StrElem>();
>> - int start = original.indexOf("${");
>> + int start = original.indexOf(openBracket);
>> if (start == -1) {
>> strElems.add(new ConstElem(original));
>> strElems.trimToSize();
>> @@ -218,7 +219,7 @@
>> int currentInd = 0;
>> int end = -1;
>> while (start != -1) {
>> - end = original.indexOf("}", start);
>> + end = original.indexOf(closeBracket, start);
>> if (end == -1) {
>> Debug.logWarning("Found a ${ without a closing }
>> (curly-brace) in the String: " + original, module);
>> break;
>> @@ -231,10 +232,10 @@
>> if (original.indexOf("bsh:", start + 2) == start + 2) {
>> strElems.add(new BshElem(original.substring(start +
>> 6, end)));
>> } else {
>> - int ptr = original.indexOf("${", start + 2);
>> + int ptr = original.indexOf(openBracket, start + 2);
>> while (ptr != -1 && end != -1 && ptr < end) {
>> - end = original.indexOf("}", end + 1);
>> - ptr = original.indexOf("${", ptr + 2);
>> + end = original.indexOf(closeBracket, end + 1);
>> + ptr = original.indexOf(openBracket, ptr + 2);
>> }
>> if (end == -1) {
>> end = origLen;
>> @@ -243,7 +244,7 @@
>> // Evaluation sequence is important - do not change
>> it
>> if (expression.contains("?currency(")) {
>> strElems.add(new CurrElem(expression));
>> - } else if (expression.contains("${")){
>> + } else if (expression.contains(openBracket)){
>> strElems.add(new NestedVarElem(expression));
>> } else {
>> strElems.add(new VarElem(expression));
>> @@ -254,7 +255,7 @@
>> if (currentInd > origLen) {
>> currentInd = origLen;
>> }
>> - start = original.indexOf("${", currentInd);
>> + start = original.indexOf(openBracket, currentInd);
>> }
>> // append the rest of the original string, ie after the
>> last variable
>> if (currentInd < origLen) {
>> @@ -344,8 +345,7 @@
>> this.hint = expr.length();
>> }
>> }
>> - FlexibleMapAccessor<Object> fma = new
>> FlexibleMapAccessor<Object>(expr.toString());
>> - Object obj = fma.get(context, locale);
>> + Object obj = UelUtil.evaluate(context, openBracket +
>> expr.toString() + closeBracket);
>> if (obj != null) {
>> try {
>> buffer.append((String)
>> ObjectType.simpleTypeConvert(obj, "String", null, timeZone, locale,
>> true));
>> @@ -357,16 +357,15 @@
>> }
>>
>> protected static class VarElem implements StrElem {
>> - protected FlexibleMapAccessor<Object> fma = null;
>> + protected String original = null;
>> protected VarElem(String original) {
>> - this.fma = new FlexibleMapAccessor<Object>(original);
>> + this.original = original;
>> }
>> public void append(StringBuilder buffer, Map<String, ?
>> extends Object> context, TimeZone timeZone, Locale locale) {
>> - Object obj = this.fma.get(context, locale);
>> + Object obj = UelUtil.evaluate(context, openBracket +
>> this.original + closeBracket);
>> if (obj == null) {
>> - String key = fma.getOriginalName();
>> - if (key.startsWith("env.")) {
>> - obj = System.getProperty(key.substring(4));
>> + if (this.original.startsWith("env.")) {
>> + obj =
>> System.getProperty(this.original.substring(4));
>> }
>> }
>> if (obj != null) {
>>
>> Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> UelUtil.java
>> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/UelUtil.java?rev=724146&view=auto
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> UelUtil.java (added)
>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/string/
>> UelUtil.java Sun Dec 7 08:11:44 2008
>> @@ -0,0 +1,147 @@
>> +/
>> *******************************************************************************
>> + * 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.ofbiz.base.util.string;
>> +
>> +import java.lang.reflect.Method;
>> +import java.util.Map;
>> +import javax.el.*;
>> +
>> +import javolution.util.FastMap;
>> +
>> +/** Implements the Unified Expression Language (JSR-245). */
>> +public class UelUtil {
>> +
>> + public static final FunctionMapper functionMapper = new
>> Functions();
>> + protected static final ExpressionFactory exprFactory = new
>> de.odysseus.el.ExpressionFactoryImpl();
>> + protected static final ELResolver defaultResolver = new
>> CompositeELResolver() {
>> + {
>> + add(new ArrayELResolver(false));
>> + add(new ListELResolver(false));
>> + add(new MapELResolver(false));
>> + add(new ResourceBundleELResolver());
>> + add(new BeanELResolver(false));
>> + }
>> + };
>> +
>> + /** Evaluates a Unified Expression Language expression and
>> returns the result.
>> + * @param context Evaluation context (variables)
>> + * @param expression UEL expression
>> + * @return Result object
>> + */
>> + public static Object evaluate(Map<String, ? extends Object>
>> context, String expression) {
>> + ELContext elContext = new BasicContext(context);
>> + ValueExpression ve =
>> exprFactory.createValueExpression(elContext, expression,
>> Object.class);
>> + Object obj = null;
>> + try {
>> + obj = ve.getValue(elContext);
>> + } catch (Exception e) {}
>> + return obj;
>> + }
>> +
>> + protected static class BasicContext extends ELContext {
>> + protected VariableMapper variables = null;
>> + protected BasicContext() {}
>> + public BasicContext(Map<String, ? extends Object> context) {
>> + this.variables = new Variables(context);
>> + }
>> + public ELResolver getELResolver() {
>> + return defaultResolver;
>> + }
>> + public FunctionMapper getFunctionMapper() {
>> + return functionMapper;
>> + }
>> + public VariableMapper getVariableMapper() {
>> + return this.variables;
>> + }
>> + protected class Variables extends VariableMapper {
>> + protected Map<String, Object> context =
>> FastMap.newInstance();
>> + protected Variables(Map<String, ? extends Object>
>> context) {
>> + this.context.putAll(context);
>> + }
>> + public ValueExpression resolveVariable(String
>> variable) {
>> + Object obj = this.context.get(variable);
>> + if (obj != null) {
>> + return new BasicValueExpression(obj);
>> + }
>> + return null;
>> + }
>> + public ValueExpression setVariable(String variable,
>> ValueExpression expression) {
>> + return new
>> BasicValueExpression(this.context.put(variable,
>> expression.getValue(null)));
>> + }
>> + }
>> + @SuppressWarnings("serial")
>> + protected class BasicValueExpression extends
>> ValueExpression {
>> + protected Object object;
>> + public BasicValueExpression(Object object) {
>> + super();
>> + this.object = object;
>> + }
>> + public boolean equals(Object obj) {
>> + if (this == obj) {
>> + return true;
>> + }
>> + try {
>> + BasicValueExpression other =
>> (BasicValueExpression) obj;
>> + return this.object.equals(other.object);
>> + } catch (Exception e) {}
>> + return false;
>> + }
>> + public int hashCode() {
>> + return this.object == null ? 0 :
>> this.object.hashCode();
>> + }
>> + public Object getValue(ELContext context) {
>> + return this.object;
>> + }
>> + public String getExpressionString() {
>> + return null;
>> + }
>> + public boolean isLiteralText() {
>> + return false;
>> + }
>> + public Class<?> getType(ELContext context) {
>> + return this.object == null ? null :
>> this.object.getClass();
>> + }
>> + public boolean isReadOnly(ELContext context) {
>> + return false;
>> + }
>> + public void setValue(ELContext context, Object value) {
>> + this.object = value;
>> + }
>> + public String toString() {
>> + return "ValueExpression(" + this.object + ")";
>> + }
>> + public Class<?> getExpectedType() {
>> + return this.object == null ? null :
>> this.object.getClass();
>> + }
>> + }
>> + }
>> +
>> + protected static class Functions extends FunctionMapper {
>> + protected Map<String, Method> functionMap =
>> FastMap.newInstance();
>> + public void setFunction(String prefix, String localName,
>> Method method) {
>> + synchronized(this) {
>> + functionMap.put(prefix + ":" + localName, method);
>> + }
>> + }
>> + public Method resolveFunction(String prefix, String
>> localName) {
>> + return functionMap.get(prefix + ":" + localName);
>> + }
>> + }
>> +
>> +}
>>
>> Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/
>> string/UelUtil.java
>> ------------------------------------------------------------------------------
>> svn:eol-style = native
>>
>> Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/
>> string/UelUtil.java
>> ------------------------------------------------------------------------------
>> svn:keywords = "Date Rev Author URL Id"
>>
>> Propchange: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/
>> string/UelUtil.java
>> ------------------------------------------------------------------------------
>> svn:mime-type = text/xml
>>
>>
> --
> Antwebsystems.com: Quality OFBiz services for competitive prices
>