我有一个用 Java 构建的 SOAP Web 服务。
如果我的方法遇到异常,我想返回“HTTP CODE 500”。
可能吗?如果是怎么办?
(Web 服务在 Tomcat 6 上运行)
我有一个用 Java 构建的 SOAP Web 服务。
如果我的方法遇到异常,我想返回“HTTP CODE 500”。
可能吗?如果是怎么办?
(Web 服务在 Tomcat 6 上运行)
也许您应该自己简单地抛出一个合格的异常,然后将其作为肥皂故障发送回客户端。W3C 告诉我们:
如果在处理请求时出现 SOAP 错误,SOAP HTTP 服务器必须发出 HTTP 500“内部服务器错误”响应,并在响应中包含 SOAP 消息,其中包含指示 SOAP 处理错误的 SOAP Fault 元素(参见第 4.4 节)。 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
乱用 http 响应代码可能很危险,因为其他一些客户端可能期望不同的响应。在您的情况下,您会很幸运,因为您完全想要 W3C 指定的行为。所以抛出一个异常;)
怎么做?看看这里: 如何在 JAX-WS Web 服务上引发自定义错误?
问候
巴斯蒂安
由于 JAX-WS 基于 servlet,您可以这样做。你可以试试下一个:
@WebService
public class Calculator {
@Resource
private WebServiceContext ctx;
public int division (int a, int b) {
try {
return a / b;
} catch (ArithmeticException e) {
sendError(500, "Service unavailable for you.");
return -1; // never send
}
}
private void sendError(int status, String msg) {
try {
MessageContext msgCtx = ctx.getMessageContext();
HttpServletResponse response =
(HttpServletResponse) msgCtx.get(MessageContext.SERVLET_RESPONSE);
response.sendError(status, msg);
} catch (IOException e) {
// Never happens or yes?
}
}
}
但是,我更喜欢使用 JAX-RS 来做类似的事情。
@PUT
@Path("test")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response update( //
@FormParam("id") int id,
@FormParam("fname") String fname,
@FormParam("lname") String lname
) {
try {
// do something
return Response.ok("Successfully updated",
MediaType.TEXT_PLAIN_TYPE).build();
} catch (Exception e) {
LOG.error("An error occurred", e);
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity("An error occurred")
.type(MediaType.TEXT_PLAIN_TYPE).build();
}
}