[
https://issues.apache.org/jira/browse/AMBER-51?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13244222#comment-13244222
]
Alexander Urmuzov commented on AMBER-51:
----------------------------------------
I found a workaround (without rewriting TokenEndpoint as servlet) that looks
like this:
public class OAuthRequestWrapper extends HttpServletRequestWrapper{
private MultivaluedMap<String, String> form;
public OAuthRequestWrapper(HttpServletRequest request,
MultivaluedMap<String, String> form) {
super(request);
this.form = form;
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if (value == null) {
value = form.getFirst(name);
}
return value;
}
}
and this:
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response authorize(MultivaluedMap<String, String> form) throws
OAuthSystemException {
OAuthTokenRequest oauthRequest = null;
try {
oauthRequest = new OAuthTokenRequest(new
OAuthRequestWrapper(requestProvider.get(), form));
So, maybe, something like
OAuthTokenRequest(javax.servlet.http.HttpServletRequest request,
javax.ws.rs.core.MultivaluedMap form)
or more jax-rs-like
OAuthTokenRequest(javax.ws.rs.core.UriInfo uriInfo,
javax.ws.rs.core.MultivaluedMap form)
of course if UriInfo contains all required data.
> Guice+Jersey+Amber: Can't correctly create OAuthTokenRequest instance
> ---------------------------------------------------------------------
>
> Key: AMBER-51
> URL: https://issues.apache.org/jira/browse/AMBER-51
> Project: Amber
> Issue Type: Bug
> Environment: jersey 1.10
> guice 3.0-SNAPSHOT
> amber 0.22-incubating-SNAPSHOT
> Reporter: Alexander Urmuzov
>
> I've got a problem with creating OAuthTokenRequest.
> It needs an instance of HttpServletRequest on creation, but all instances
> which I can get through guice or jersey injections have no post parameters.
> Guice injection example:
> private final Provider<HttpServletRequest> requestProvider;
> @Inject
> public TokenEndpoint(Provider<HttpServletRequest> requestProvider) {
> this.requestProvider = requestProvider;
> }
> @POST
> @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
> @Produces(MediaType.APPLICATION_JSON)
> public Response authorize() throws OAuthSystemException {
> OAuthTokenRequest oauthRequest = null;
> try {
> oauthRequest = new OAuthTokenRequest(requestProvider.get());
> ....
> Jersey injection example:
> @POST
> @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
> @Produces(MediaType.APPLICATION_JSON)
> public Response authorize(@Context HttpServletRequest request) throws
> OAuthSystemException {
> OAuthTokenRequest oauthRequest = null;
> try {
> oauthRequest = new OAuthTokenRequest(request);
> Looks like jersey have parsed HttpServletRequest and removed all post
> parameters from it.
> If I attach filter that tries to get some parameter from HttpServletRequest
> before jersey, my code works, but with exception from jersey.
> But I can retrieve MultivaluedMap of post parameters from jersey with all
> data and no errors.
> I think there must be some alternative constructor for such environments. Any
> thoughts?
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira