Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with a logged exception in method "ParameterList$AbstractParamGetter.convertWithConverterUtils()" #1002

Closed
edouardmercier opened this issue Jan 5, 2015 · 5 comments

Comments

@edouardmercier
Copy link

Hello.

I'm currently experiencing an issue when using JAX-RS with Restlet v2.3 under a Google App Engine instance (v1.9.17), when a POST web service exposing an enumas a parameter is being declared. The Restlet unmarshalling process which seem to be coupled with Jackson prints a

INFO] com.fasterxml.jackson.core.JsonParseException: Unexpected character ('L' (code 76)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
[INFO]  at [Source: java.io.ByteArrayInputStream@74eb350; line: 1, column: 2]
[INFO]  at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1369)
[INFO]  at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:532)
[INFO]  at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:453)
[INFO]  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2278)
[INFO]  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:779)
[INFO]  at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:665)
[INFO]  at com.fasterxml.jackson.databind.ObjectReader._initForReading(ObjectReader.java:1293)
[INFO]  at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1199)
[INFO]  at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:798)
[INFO]  at org.restlet.ext.jackson.JacksonRepresentation.getObject(JacksonRepresentation.java:309)
[INFO]  at org.restlet.ext.jackson.JacksonConverter.toObject(JacksonConverter.java:217)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$AbstractParamGetter.convertWithConverterUtils(ParameterList.java:300)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$AbstractParamGetter.convertParamValueInner(ParameterList.java:227)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$AbstractParamGetter.convertParamValue(ParameterList.java:209)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$AbstractParamGetter.convertParamValue(ParameterList.java:176)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$FormOrQueryParamGetter.getParamValue(ParameterList.java:571)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$QueryParamGetter.getParamValue(ParameterList.java:817)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList$AbstractParamGetter.getValue(ParameterList.java:451)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.params.ParameterList.get(ParameterList.java:1138)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.AbstractMethodWrapper.internalInvoke(AbstractMethodWrapper.java:169)
[INFO]  at org.restlet.ext.jaxrs.internal.wrappers.ResourceMethod.invoke(ResourceMethod.java:292)
[INFO]  at org.restlet.ext.jaxrs.JaxRsRestlet.invokeMethod(JaxRsRestlet.java:1005)
[INFO]  at org.restlet.ext.jaxrs.JaxRsRestlet.handle(JaxRsRestlet.java:754)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
[INFO]  at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84)
[INFO]  at org.restlet.Application.handle(Application.java:379)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.routing.Router.doHandle(Router.java:431)
[INFO]  at org.restlet.routing.Router.handle(Router.java:648)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.routing.Router.doHandle(Router.java:431)
[INFO]  at org.restlet.routing.Router.handle(Router.java:648)
[INFO]  at org.restlet.routing.Filter.doHandle(Filter.java:159)
[INFO]  at org.restlet.routing.Filter.handle(Filter.java:206)
[INFO]  at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
[INFO]  at org.restlet.Component.handle(Component.java:401)
[INFO]  at org.restlet.Server.handle(Server.java:516)
[INFO]  at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:72)
[INFO]  at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152)
[INFO]  at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1118)
[INFO]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[INFO]  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
[INFO]  at com.smartnsoft.imageservice.ProvisioningFilter.doFilter(ProvisioningFilter.java:38)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
[INFO]  at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
[INFO]  at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
[INFO]  at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
[INFO]  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
[INFO]  at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO]  at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
[INFO]  at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO]  at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
[INFO]  at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
[INFO]  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
[INFO]  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
[INFO]  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO]  at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
[INFO]  at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

I have taken a look at the code, and have detected the following snippet in file restlet-framework-java/modules/org.restlet.ext.jaxrs/src/org/restlet/ext/jaxrs/internal/wrappers/params/ParameterList.java, line 300:

                } catch (Exception exception) {
                    // -- don't worry about it...proceed with reflective calls
                    exception.printStackTrace();
                }

My understanding is that no log should be output, because the caught exception seems to be part of the regular process. Currently, this exception is printed out on every web service invocation.

Could you please take a look at this weird exception stack trace printing, please? And confirm that it is abnormal, and discard it, please?

Thank you for your help and support.

@thboileau
Copy link
Contributor

Hello @edouardmercier , I see the exception trace, and the printStackTrace which must be removed I think. As I don't really reproduce the same behaviour, I would like to know if you can send me some sample code (juste the signature of the annotated method you invoke, and some details about the request).
Best regards.

@edouardmercier
Copy link
Author

@thboileau: the method signature is (I know, the POST is not very clean, it should be use @FormParam instead):

    @POST
    @Path("create")
    public AccountInfo createAccount(@QueryParam("email") String email, @QueryParam("password") String password, @QueryParam("status") AccountStatus status)
        throws ProblemCodeException

with AccountStatus being:

  public static enum AccountStatus
  {
    Prospect, Trial, Licenced;
  }

@thboileau
Copy link
Contributor

Hi @edouardmercier, thanks for the input, I've removed the useless calls.
I'm still unable to reproduce exactly your issue, but I'm not sure this is quite important.
I've tried your code with a POST request with a wrong value for the "status" parameter.

@thboileau thboileau added this to the 2.3.1 milestone Jan 6, 2015
@edouardmercier
Copy link
Author

@thboileau: thank you. I've integrated the v2.3.1, and no more exception is being logged. My opinion is that the ticket may be closed, as far as I am concerned.

@thboileau
Copy link
Contributor

thanks, closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants