Return-Path: X-Original-To: apmail-cxf-issues-archive@www.apache.org Delivered-To: apmail-cxf-issues-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 890A918608 for ; Fri, 11 Sep 2015 15:41:56 +0000 (UTC) Received: (qmail 32618 invoked by uid 500); 11 Sep 2015 15:41:47 -0000 Delivered-To: apmail-cxf-issues-archive@cxf.apache.org Received: (qmail 32588 invoked by uid 500); 11 Sep 2015 15:41:47 -0000 Mailing-List: contact issues-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list issues@cxf.apache.org Received: (qmail 32565 invoked by uid 99); 11 Sep 2015 15:41:47 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 Sep 2015 15:41:47 +0000 Date: Fri, 11 Sep 2015 15:41:46 +0000 (UTC) From: "David J. M. Karlsen (JIRA)" To: issues@cxf.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (CXF-6588) NPE in providers.getMessageBodyReader MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CXF-6588?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14740993#comment-14740993 ] David J. M. Karlsen commented on CXF-6588: ------------------------------------------ Yes, it's a bit on the edge. As a side note: http://blog.dejavu.sk/2014/02/11/inject-custom-java-types-via-jax-rs-parameter-annotations/ seems to indicate that it works on Jersey. Thanks for the quick fix! > NPE in providers.getMessageBodyReader > ------------------------------------- > > Key: CXF-6588 > URL: https://issues.apache.org/jira/browse/CXF-6588 > Project: CXF > Issue Type: Bug > Components: JAX-RS > Affects Versions: 3.1.2 > Reporter: David J. M. Karlsen > Assignee: Sergey Beryozkin > Fix For: 3.1.3, 3.0.7 > > > I have this ParamConverter: > {code} > @Provider > @Component > public class JacksonParamConverterProvider > implements ParamConverterProvider > { > private final JsonMapperConfigurator jsonMapperConfigurator; > @Context > private Providers providers; > public JacksonParamConverterProvider() > { > ObjectMapper objectMapper = new ObjectMapper(); > this.jsonMapperConfigurator = > new JsonMapperConfigurator( objectMapper, new Annotations[]{ Annotations.JAXB, Annotations.JACKSON } ); > } > @Override > public ParamConverter getConverter( Class rawType, Type genericType, Annotation[] annotations ) > { > MessageBodyReader messageBodyReader = providers.getMessageBodyReader( rawType, > genericType, > annotations, > MediaType.APPLICATION_JSON_TYPE ); > if ( messageBodyReader == null || !messageBodyReader.isReadable( rawType, genericType, annotations, MediaType.APPLICATION_JSON_TYPE ) ) { > return null; > } > if ( canConvert( rawType ) ) > { > return new ParamConverter() > { > @Override > public T fromString( String value ) > { > ObjectReader objectReader = getObjectMapper().readerFor( rawType ); > try > { > return objectReader.readValue( value ); > } > catch ( IOException e ) > { > throw new ProcessingException( e ); > } > } > @Override > public String toString( T value ) > { > try > { > return getObjectMapper().writerFor( rawType ).writeValueAsString( value ); > } > catch ( JsonProcessingException e ) > { > throw new ProcessingException( e ); > } > } > }; > } > else > { > return null; > } > } > private ObjectMapper getObjectMapper() > { > return jsonMapperConfigurator.getConfiguredMapper(); > } > private boolean isNotSimpleType( Class rawType ) > { > return ! ( rawType.getPackage().getName().startsWith( "java.lang" ) || ClassUtils.isPrimitiveOrWrapper( rawType ) ); > } > private boolean canConvert( Class rawType ) > { > return isNotSimpleType( rawType ) && getObjectMapper().canSerialize( rawType ); > } > {code} > which will get an NPE when calling getMessageBodyReader: > {noformat} > java.lang.NullPointerException: null > at org.apache.cxf.jaxrs.impl.tl.ThreadLocalProviders.getMessageBodyReader(ThreadLocalProviders.java:39) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2] > at com.edb.fs.tac.jfr.srv.ws.jaxrs.JacksonParamConverterProvider.getConverter(JacksonParamConverterProvider.java:50) ~[classes/:na] > at org.apache.cxf.jaxrs.provider.ProviderFactory.createParameterHandler(ProviderFactory.java:256) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2] > at org.apache.cxf.jaxrs.client.AbstractClient.convertParamValue(AbstractClient.java:742) ~[cxf-rt-rs-client-3.1.2.jar:3.1.2] > at org.apache.cxf.jaxrs.client.AbstractClient.header(AbstractClient.java:139) ~[cxf-rt-rs-client-3.1.2.jar:3.1.2] > at org.apache.cxf.jaxrs.client.WebClient.header(WebClient.java:846) ~[cxf-rt-rs-client-3.1.2.jar:3.1.2] > at org.apache.cxf.jaxrs.client.WebClient.header(WebClient.java:83) ~[cxf-rt-rs-client-3.1.2.jar:3.1.2] > at com.edb.fs.tac.jfr.srv.ws.AbstractJaxRsSpringWithMocksTest.setHttpHeaders(AbstractJaxRsSpringWithMocksTest.java:109) ~[test-classes/:na] > at com.edb.fs.tac.jfr.srv.ws.AbstractJaxRsSpringWithMocksTest.getWebClient(AbstractJaxRsSpringWithMocksTest.java:63) ~[test-classes/:na] > at com.edb.fs.tac.jfr.srv.ws.AbstractJaxRsSpringWithMocksTest.getClientProxy(AbstractJaxRsSpringWithMocksTest.java:79) ~[test-classes/:na] > at com.edb.fs.tac.jfr.srv.ws.service.customer.CustomerResourceIntegrationTest.testWithComplexQueryObjectWithSubComplexTypes(CustomerResourceIntegrationTest.java:69) ~[test-classes/:na] > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60] > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_60] > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_60] > at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60] > at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) ~[junit-4.12.jar:4.12] > at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) ~[junit-4.12.jar:4.12] > at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) ~[junit-4.12.jar:4.12] > at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) ~[junit-4.12.jar:4.12] > at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) ~[spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:85) ~[spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) ~[junit-4.12.jar:4.12] > at org.junit.rules.RunRules.evaluate(RunRules.java:20) [junit-4.12.jar:4.12] > at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:86) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) [junit-4.12.jar:4.12] > at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:241) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12] > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12] > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12] > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12] > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12] > at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) [junit-4.12.jar:4.12] > at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12] > at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180) [spring-test-4.2.1.RELEASE.jar:4.2.1.RELEASE] > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) [junit-4.12.jar:4.12] > at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) [junit-rt.jar:na] > at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) [junit-rt.jar:na] > at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) [junit-rt.jar:na] > {noformat} > I am running with localtransport. -- This message was sent by Atlassian JIRA (v6.3.4#6332)