cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: Pattern convertor - Bug?
Date Mon, 07 Mar 2005 10:41:40 GMT
Reinhard Poetz wrote:

>
> If I use a pattern convertor according to the documentation
>
> <fd:convertor type="formatting">
>   <fd:patterns>
>     <fd:pattern>MM/dd/yyyy</fd:pattern>
>     <fd:pattern locale="nl-BE">dd/MM/yyyy</fd:pattern>
>     <fd:pattern locale="fr">dd-MM-yyyy</fd:pattern>
>   </fd:patterns>
> </fd:convertor>
>
> I get following exception:
>
> java.lang.IllegalArgumentException: Illegal pattern  character 'd'
>     at 
> java.text.SimpleDateFormat.translatePattern(SimpleDateFormat.java:1737)
>     at 
> java.text.SimpleDateFormat.applyLocalizedPattern(SimpleDateFormat.java:1792) 
>
>     at 
> org.outerj.i18n.JdkDateFormat.applyLocalizedPattern(JdkDateFormat.java:23) 
>
>     at 
> org.apache.cocoon.forms.datatype.convertor.FormattingDateConvertor.getDateFormat(FormattingDateConvertor.java:109)

>
>
>
> (I've modified the birthday widget of our 'form1'-example and I'm 
> using trunk checked-out yesterday. I've noticed the same problem in a 
> 4 weeks old 2.2 checkout too.)
>
> Any ideas what's wrong here? Is it a bug or my mistake?


I spent some time on this and finally found its cause.

The problem is that locale-specific patterns are applied using 
SimpleDateFormat.applyLocalizedPattern(). The difference between this 
method and applyPattern() is that the pattern is - as its name implies - 
localized and thus can potentially use other characters than the one 
specified in SimpleDateFormat's javadoc which describes only en-US.

icu4j has the same problem, but uses a different set of localized 
patterns. For example, icu4j patterns in the "fr" locale use "a" instead 
of "y" (année/year) and "j" instead of "d" (jour/day).

Weird thing is that contrarily to icu4j, the JDK localized pattern for 
"fr" is the same as "en-us", thus leading to a different behaviour as 
CForms automatically switches to icu4j if present in the classpath.

So we have here two problems:
- locale-specific patterns use a locale-specific syntax which may not be 
the one documented in the Javadocs (and I don't know where to find the 
locale-specific documentation)
- automatically switching to icu4j leads to a changing behaviour 
depending on the presence of a specific jar file in the classpath.

To solve this, I propose:
- always use applyPattern() instead of applyLocalizedPattern()
- disable the automatic switching to icu4j, and provide an additional 
"Icu4jDateConvertor".

BTW, what is the real added value of icu4j compared to java.text classes?

Sylvain

-- 
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }


Mime
View raw message