gpt4 book ai didi

java - Jersey POST 端点在 Websphere 7 上失败

转载 作者:行者123 更新时间:2023-12-02 04:48:44 25 4
gpt4 key购买 nike

我正在使用 Jackson 作为 JSON 提供程序将 Jersey 2.6 应用程序部署到 Websphere 7。由于某种原因,只有我定义为 POST 的端点失败。我的所有 GET 都工作正常并返回正确的 JSON。

这是一个示例端点:

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public void sendEmail (final Email email) {

logger.info("Sending email {}", email);
boolean sent = emailService.send(email);

if (!sent) {
throw new WebApplicationException(400);
}
}

这是电子邮件的样子:

@XmlRootElement
public class Email {

private List<String> recipients;

private String from;
private String subject;

private String body;

public Email() {

}

public Email(List<String> recipients, String from, String subject,
String body) {

this.recipients = recipients;
this.from = from;
this.subject = subject;
this.body = body;
}

// getters / setters....
}

我发送的每个 POST 都不会成为端点,并且我在 Websphere SystemOut.log 文件中看到了这一点。我疯狂地搜索其他日志文件中的其他日志语句,以寻找问题所在的提示,但这就是我能找到的全部内容,而且非常没有帮助。任何援助将不胜感激。即使有人可以向我指出一些隐藏在安装内部的仅 Websphere 日志文件或其他内容:

00000030 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[Jersey Web Application]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: Internal Server Error
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:637)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1189)
at org.glassfish.jersey.servlet.internal.ResponseWriter.commit(ResponseWriter.java:194)
at org.glassfish.jersey.server.ContainerResponse.close(ContainerResponse.java:412)
at org.glassfish.jersey.server.ServerRuntime$Responder.release(ServerRuntime.java:667)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:438)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:265)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:319)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1028)
at
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:219)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1661)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:944)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:507)
at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3954)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:945)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:191)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:84)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1819)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture$1.run(AsyncChannelFuture.java:205)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1660)org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381)

最佳答案

所以,感谢 peeskillet 的想法,我在 Jersey 中创建了一个 ExceptionMapper,它实现了 ThrowableExceptionMapper,希望它能抛出我的错误:

@Provider
public class MyExceptionMapper implements
ExceptionMapper<Throwable> {

@Override
public Response toResponse(Throwable ex) {

System.out.println(ex);
return Response.status(500).build();
}
}

事实证明它确实做到了这一点。我的错误是我发布的任何类中都没有无参数构造函数:

Caused by: com.owlike.genson.JsonBindingException: No constructor has been found for type class com.model.User
at com.owlike.genson.reflect.BeanDescriptor.deserialize(BeanDescriptor.java:96)
at com.owlike.genson.convert.BeanViewConverter.deserialize(BeanViewConverter.java:105)
at com.owlike.genson.convert.NullConverter$NullConverterWrapper.deserialize(NullConverter.java:57)
at com.owlike.genson.convert.CircularClassReferenceConverterFactory$CircularConverter.deserialize(CircularClassReferenceConverterFactory.java:31)
at com.owlike.genson.reflect.PropertyMutator.deserialize(PropertyMutator.java:30)

我认为这并不重要,因为这对我本地有用。我仅在部署到 Websphere 7 集群时看到此错误。无论如何,这解决了我的问题。

关于java - Jersey POST 端点在 Websphere 7 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com