[
https://issues.apache.org/jira/browse/SQOOP-1784?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14222626#comment-14222626
]
Jarek Jarcec Cecho commented on SQOOP-1784:
-------------------------------------------
Absolute agree with you [~vybs]. We should be more defensive for future issues
such as this one. I was thinking of building our own copy of the request, but I
would like to avoid having entire request in the memory just so that we can
parse username. Perhaps the idea to parse the URL ourselves might be feasible
alternative.
Nevertheless this issue is blocking integration tests, so I would suggest to
commit this small fix and do a real solution in subsequent JIRA.
> Sqoop2: Sending POST request to link or job end-point might end up with NPE
> ---------------------------------------------------------------------------
>
> Key: SQOOP-1784
> URL: https://issues.apache.org/jira/browse/SQOOP-1784
> Project: Sqoop
> Issue Type: Bug
> Affects Versions: 1.99.4
> Reporter: Jarek Jarcec Cecho
> Assignee: Jarek Jarcec Cecho
> Fix For: 1.99.5
>
> Attachments: SQOOP-1784.patch
>
>
> I was testing few patches on real cluster and noticed that creating link on
> current head of {{sqoop2}} branch can lead to NPE in {{LinkBean}}. I've
> traced the code and found out that
> {{[ctx.getRequest().getReader()|https://github.com/apache/sqoop/blob/sqoop2/server/src/main/java/org/apache/sqoop/handler/LinkRequestHandler.java#L114]}}
> is returning empty buffer and as a result the subsequent call to
> {{JSONValue.parse}} returns {{null}} and we hit {{NullPointerException}}
> later in {{LInkBean}}.
> This one was quite hard to crack, but I believe that I've isolated the
> problem. In SQOOP-1774 we've changed the way to get username from header to
> URL parameter and we're using
> {{[ServletRequest.getParameter()|https://github.com/apache/sqoop/blob/sqoop2/server/src/main/java/org/apache/sqoop/server/RequestContext.java#L121]}}
> method for that. Carefully reading it's
> [javadoc|https://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter(java.lang.String)]
> I found out that:
> {quote}
> If the parameter data was sent in the request body, such as occurs with an
> HTTP POST request, then reading the body directly via getInputStream() or
> getReader() can interfere with the execution of this method
> {quote}
> And hence I'm assuming that getting the username has processed the request
> body already and thus we got the eventual {{NullPointerException}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)