[
https://issues.apache.org/jira/browse/CXF-5688?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14156372#comment-14156372
]
Tam Freestone-Bayes commented on CXF-5688:
------------------------------------------
Hello Sergey,
While the addition of a property to override this behaviour is appreciated, the
change to apply toUpperCase() to Enum comparison values is a breaking change
from 2.6 to 2.7+.
If only using CXF for its FiqlParser, then convertStringToPrimitive() breaks
things when passed Enums that are not upper case (say, for instance, because
values in legacy databases are lower or mixed case). In this situation, where
only the FIQL Parser features of CXF are in use, there is no access to
configuration properties via MessageUtils (there is no "current" message or
relevant PhaseInterceptorChain). The only way to access a configuration
property via MessageUtils requires additional dependencies on other parts of
CXF that are not directly relevant to FIQL.
The base assumption that all Enum values would be uppercase in the first place
seems incorrect. A developer can easily handle the "brittle" situation where,
as you suggest, client-provided input may be in the incorrect case, by ensuring
that any case validation is pre-applied to the fiqlExpression String passed to
FiqlParser's parse() method.
If this auto-uppercase behaviour is to be incorporated, then it would make
sense for it to default to "off" rather than "on". It may also be helpful to
move its configuration to somewhere that is not tied to CXF's messaging
components.
Kind regards,
tam
> Problem Parsing FIQL Involving Enums
> ------------------------------------
>
> Key: CXF-5688
> URL: https://issues.apache.org/jira/browse/CXF-5688
> Project: CXF
> Issue Type: Bug
> Components: JAX-RS
> Reporter: Azitabh
> Assignee: Sergey Beryozkin
> Priority: Minor
> Fix For: 3.0.0, 2.7.12
>
>
> FIQL parser assumes that enums would be defined in all caps.
> In case Enums are not defined in all caps,
> InjectionUtils.convertStringToPrimitive(String value, Class<?> cls) raises
> PropertyNotFoundException because it's converting the user provided enum
> value to caps and calling ENUM.valueOf(UPPERCASE_STR).
> ethod m = cls.getMethod("valueOf", new Class[]{String.class});
> return m.invoke(null, value.toUpperCase());
> Since JAVA doesn't enforce enums to be all caps, I don't see any reason why
> FIQLParser should assume this.
> https://github.com/apache/cxf/blob/master/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)