[
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)