[ 
https://issues.apache.org/jira/browse/RANGER-4225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17807051#comment-17807051
 ] 

Bhavik Patel commented on RANGER-4225:
--------------------------------------

Sure.

Thanks [~sercan.tekin].

> Possible Jackson serialization issue due to not comply with Java bean 
> standards
> -------------------------------------------------------------------------------
>
>                 Key: RANGER-4225
>                 URL: https://issues.apache.org/jira/browse/RANGER-4225
>             Project: Ranger
>          Issue Type: Bug
>          Components: Ranger
>    Affects Versions: 2.4.0
>            Reporter: Sercan Tekin
>            Assignee: Sercan Tekin
>            Priority: Major
>             Fix For: 3.0.0
>
>         Attachments: RANGER-4225.patch
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> +*PROBLEM:*+
> Transitive Jackson-2 dependencies are included into Ranger's classpath in my 
> env and conflicted with Jackson-1 dependencies.
> Jackson-2 uses Javabean naming conventions to figure out the Json properties 
> in a Java class, and some of the Ranger's model classes don't comply with the 
> convention.
> For example, when the leading camelcase word is only one letter in length, 
> then deserialized response is broken. The following is what I observed in 
> Ranger v2.4.0;
> On Ranger UI side, this 
> [code-block|https://github.com/apache/ranger/blob/ranger-1.2/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js#L224-L229]
>  attempts to read vXStrings key in map, but the corresponding response has 
> vxstrings instead:
> {code:java}
> {
>     "startIndex": 0,
>     "pageSize": 200,
>     "totalCount": 11,
>     "resultSize": 11,
>     "sortType": "asc",
>     "sortBy": "id",
>     "listSize": 11,
>     "vxstrings": [        <==================== here! This has to be vXStrings
>         {
>             "value": "public",
>             ... {code}
> And this difference causes below error while reading the property, therefore 
> the corresponding dropdown has no values as excepted;
> {code:java}
> PermissionList.js?ver=build.version:226 Uncaught TypeError: Cannot read 
> properties of undefined (reading 'map')
>     at Object.results (PermissionList.js?ver=build.version:226:34)
>     at Object.success (select2.js?ver=build.version:450:47)
>     at u (jquery-3.3.1.min.js?ver=build.version:2:27457)
>     at Object.fireWith [as resolveWith] 
> (jquery-3.3.1.min.js?ver=build.version:2:28202)
>     at k (jquery-3.3.1.min.js?ver=build.version:2:77651)
>     at XMLHttpRequest.<anonymous> 
> (jquery-3.3.1.min.js?ver=build.version:2:79907){code}
> +*REFERENCES:*+
> Please see this reference related to capital letters 
> [http://futuretask.blogspot.com/2005/01/java-tip-6-dont-capitalize-first-two.html]
> "Don't capitalize first two letters of a bean property name. This is in our 
> java standards. You should not create a java bean property name that begins 
> with a capital letter in the 1st two places."
> Also you can see the same issue is reported here 
> [https://stackoverflow.com/questions/30205006/why-does-jackson-2-not-recognize-the-first-capital-letter-if-the-leading-camel-c]
>  
> +*SOLUTION:*+
> {{@JsonProperty}} annotation needs to be added for mapping the properties 
> with their corresponding getter/setter methods. This will not effect Ranger's 
> functionality directly, but it will provide consistency even if Jackson-2 is 
> included into classpath.
> I have tested it locally after adding {{@JsonProperty}} and everything worked 
> well.
> The PR is attached.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to