поэтому я использую БЫЛ 8.5.5.2, и я получаю эту ошибку, когда я делаю мой POST вызов в почтальона:Джексон MappingException с WebSphere Application Server
javax.servlet.ServletException: org.codehaus.jackson.map.JsonMappingException:
Can not access private java.lang.Class() (from class java.lang.Class; failed to set access: Can not make a java.lang.Class constructor accessible
at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:195)
at com.ibm.websphere.jaxrs.server.IBMRestServlet.service(IBMRestServlet.java:106)
at [internal classes]
at com.myproject.web.CORSFilter.doFilter(CORSFilter.java:50)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194)
at [internal classes]
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not access private java.lang.Class() (from class java.lang.Class; failed to set access: Can not make a java.lang.Class constructor accessible
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:269)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:244)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:244)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:111)
at org.codehaus.jackson.map.deser.StdDeserializer.findDeserializer(StdDeserializer.java:483)
at org.codehaus.jackson.map.deser.BeanDeserializer.resolve(BeanDeserializer.java:271)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._resolveDeserializer(StdDeserializerProvider.java:348)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:303)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:244)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:111)
at org.codehaus.jackson.map.deser.BasicDeserializerFactory.createCollectionDeserializer(BasicDeserializerFactory.java:183)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:332)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:264)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:244)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:111)
at org.codehaus.jackson.map.deser.StdDeserializer.findDeserializer(StdDeserializer.java:483)
at org.codehaus.jackson.map.deser.BeanDeserializer.resolve(BeanDeserializer.java:271)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._resolveDeserializer(StdDeserializerProvider.java:348)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:303)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:244)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:111)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:127)
at org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2046)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:1961)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:889)
at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:410)
at org.apache.wink.providers.jackson.WinkJacksonJaxbJsonProvider.readFrom(WinkJacksonJaxbJsonProvider.java:106)
at org.apache.wink.server.internal.registry.ServerInjectableFactory$EntityParam.getValue(ServerInjectableFactory.java:198)
at org.apache.wink.common.internal.registry.InjectableFactory.instantiate(InjectableFactory.java:68)
at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest(CreateInvocationParametersHandler.java:44)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.handlers.AbstractHandler.handleRequest(AbstractHandler.java:34)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleSubResourceMethod(FindResourceMethodHandler.java:188)
at org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:110)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:53)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.handlers.OptionsMethodWADLHandler.handleRequest(OptionsMethodWADLHandler.java:51)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.log.ResourceInvocation.handleRequest(ResourceInvocation.java:92)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.internal.log.Requests.handleRequest(Requests.java:76)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)
at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:207)
at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
... 5 more
Caused by: java.lang.IllegalArgumentException: Can not access private java.lang.Class() (from class java.lang.Class; failed to set access: Can not make a java.lang.Class constructor accessible
at org.codehaus.jackson.map.util.ClassUtil.checkAndFixAccess(ClassUtil.java:371)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.addDeserializerCreators(BeanDeserializerFactory.java:240)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:141)
at org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:116)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:342)
at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:264)
... 72 more
Теперь у меня есть установка CORSFilter так:
public class CORSFilter implements Filter {
public static final Logger LOG = LoggerFactory.getLogger(CORSFilter.class);
public static final String ACA_ORIGIN = "Access-Control-Allow-Origin";
public static final String ACA_HEADERS = "Access-Control-Allow-Headers";
public static final String ACA_METHODS = "Access-Control-Allow-Methods";
public static final String ACA_WILDCARD = "*";
public static final String ACA_HEADERS_VALUES = "Origin, Accept, X-Requested-With, X-Auth-Token, Content-Type";
public static final String ACA_METHODS_VERBS = "POST, GET, OPTIONS, PUT, DELETE, HEAD";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
LOG.info("Initialized");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;
final HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
if (servletResponse instanceof HttpServletResponse)
{
httpResponse.addHeader(ACA_ORIGIN, ACA_WILDCARD);
httpResponse.addHeader(ACA_HEADERS, ACA_HEADERS_VALUES);
httpResponse.addHeader(ACA_METHODS, ACA_METHODS_VERBS);
LOG.debug("Request: {}", servletRequest.getLocalName());
LOG.debug("Response: {}", ((HttpServletResponse) servletResponse).getStatus());
LOG.debug("Response Headers: {}", ((HttpServletResponse) servletResponse).getHeaderNames());
// Just ACCEPT and REPLY OK if OPTIONS
if (httpRequest.getMethod().equals("OPTIONS")) {
httpResponse.setStatus(HttpServletResponse.SC_OK);
return;
}
LOG.debug("Request: {}", httpRequest.getMethod());
}
filterChain.doFilter(httpRequest, httpResponse);
}
@Override
public void destroy() {
LOG.info("Destroyed");
}
}
Что, на мой взгляд, довольно стандартно. Теперь эта ошибка происходит где-то между doFilter
, and my rest calls
, с которой мне трудно отлаживать, поскольку все это ibm.websphere
и не может отлаживать ее. Кто-нибудь сталкивался с этой проблемой перед использованием Websphere и Jackson, и если да, то как вы это исправили? Я видел несколько проблем, связанных с тем, что это проблема браузера, использование JsonCreator
или подобное, но это не решило мою проблему. Спасибо за вашу помощь!
При необходимости я могу предоставить больше кода.
Вот @Post
@POST
@Path("/save")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public boolean saveFilter(final myCustomObject myObject){
try
{
return dataManager.saveMyObject(myObject);
}
catch (Exception x)
{
throw new WebApplicationException("Cannot save filter",
Status.INTERNAL_SERVER_ERROR);
}
}
Вы правы, говоря, что трассировка стека намного длиннее. Я просто сократил ее для краткости, но я добавлю весь след, Свобода, безусловно, вызывает Джексона, что имеет смысл, я обновлю свой вопрос с помощью @Post метод и, надеюсь, выяснить, почему он пытается вызвать джексон, прежде чем он «нуждается». – Kevin
Обновлен мой ответ – Kevin
Вы определенно были правы, переключились на передачу Java-объекта и смогли достичь моего кода. Знаете ли вы, каким образом я могу пройти через свой пользовательский объект, не достигнув этой ошибки? – Kevin