java - How to extract the ObjectMapper used by RestEasy's JacksonProvider to parse a .json file? -


in resteasy (with spring) app, have extended resteasyjacksonprovider (provided resteasy), customize configuration of objectmapper little bit below

    public class jacksonprovider extends resteasyjacksonprovider{      public jacksonprovider(){         super();         objectmapper mapper = locatemapper(object.class, mediatype.application_json_type);          mapper.configure(serializationconfig.feature.write_dates_as_timestamps, false);          mapper.getdeserializationconfig().addhandler(new deserializationproblemhandler() {             @override             public boolean handleunknownproperty(deserializationcontext ctxt, jsondeserializer<?> deserializer, object beanorclass, string propertyname) throws ioexception, jsonprocessingexception {                 logger.warn(string.format("could not deserialize property name '%s' on object of type '%s'", propertyname, beanorclass.getclass().getname()));                 return true;             }         });      } } 

the app has service methods reading json data importing .json files.

while reading json data, specify applicaion/json in @consumes , jacksonprovider takes care of parsing object. want use same jacksonprovider while reading .json file custom mapper properties applied while import also. this:

object dto = jacksonprovider.readfrom(object.class, object.class, null, mediatype.application_json_type , null , new fileinputstream("input.json")); 

however, when this, exception, stacktrace below

    jsonimporttest com.test.jsonimporttest unmarshal(com.test.jsonimporttest) java.lang.exceptionininitializererror      @ com.test.jsonimporttest.unmarshal(jsonimporttest.java:19)      @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)      @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)      @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)      @ java.lang.reflect.method.invoke(unknown source)      @ org.junit.runners.model.frameworkmethod$1.runreflectivecall(frameworkmethod.java:45)      @ org.junit.internal.runners.model.reflectivecallable.run(reflectivecallable.java:15)      @ org.junit.runners.model.frameworkmethod.invokeexplosively(frameworkmethod.java:42)      @ org.junit.internal.runners.statements.invokemethod.evaluate(invokemethod.java:20)      @ org.junit.runners.parentrunner.runleaf(parentrunner.java:263)      @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:68)      @ org.junit.runners.blockjunit4classrunner.runchild(blockjunit4classrunner.java:47)      @ org.junit.runners.parentrunner$3.run(parentrunner.java:231)      @ org.junit.runners.parentrunner$1.schedule(parentrunner.java:60)      @ org.junit.runners.parentrunner.runchildren(parentrunner.java:229)      @ org.junit.runners.parentrunner.access$000(parentrunner.java:50)      @ org.junit.runners.parentrunner$2.evaluate(parentrunner.java:222)      @ org.junit.runners.parentrunner.run(parentrunner.java:300)      @ org.eclipse.jdt.internal.junit4.runner.junit4testreference.run(junit4testreference.java:50)      @ org.eclipse.jdt.internal.junit.runner.testexecution.run(testexecution.java:38)      @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:467)      @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.runtests(remotetestrunner.java:683)      @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.run(remotetestrunner.java:390)      @ org.eclipse.jdt.internal.junit.runner.remotetestrunner.main(remotetestrunner.java:197)  caused by: java.lang.runtimeexception: java.lang.classnotfoundexception: com.sun.ws.rs.ext.runtimedelegateimpl      @ javax.ws.rs.ext.runtimedelegate.finddelegate(runtimedelegate.java:134)      @ javax.ws.rs.ext.runtimedelegate.getinstance(runtimedelegate.java:96)      @ javax.ws.rs.core.mediatype.<clinit>(mediatype.java:46)      ... 24 more  caused by: java.lang.classnotfoundexception: com.sun.ws.rs.ext.runtimedelegateimpl      @ java.net.urlclassloader$1.run(unknown source)      @ java.net.urlclassloader$1.run(unknown source)      @ java.security.accesscontroller.doprivileged(native method)      @ java.net.urlclassloader.findclass(unknown source)      @ java.lang.classloader.loadclass(unknown source)      @ sun.misc.launcher$appclassloader.loadclass(unknown source)      @ java.lang.classloader.loadclass(unknown source)      @ java.lang.class.forname0(native method)      @ java.lang.class.forname(unknown source)      @ javax.ws.rs.ext.factoryfinder.newinstance(factoryfinder.java:77)      @ javax.ws.rs.ext.factoryfinder.find(factoryfinder.java:201)      @ javax.ws.rs.ext.runtimedelegate.finddelegate(runtimedelegate.java:113)      ... 26 more 

is there way use jacksonprovider parse json outside of resteasy context?

ok answer myself. there 2 options:

1/ objectmapper custom provider using

objectmapper mapper = jacksonprovider.locatemapper(object.class, mediatype.application_json_type) 

and use mapper read json

mapper.readvalue(new file("src/test/resources/input.json"), object.class); 

2/ create custom objectmapper (like mentioned here) , use mapper read json both jacksonprovider while reading .json file.

i went first option.


Comments

Popular posts from this blog

django - How can I change user group without delete record -

java - Need to add SOAP security token -

java - EclipseLink JPA Object is not a known entity type -