回答
也许你应该简单地抛出一个合格的异常,然后将它作为soap错误发送回客户端。 W3C告诉我们这样的:
在SOAP错误的情况下在处理请求时,SOAP HTTP 服务器必须发出一个HTTP 500“内部服务器错误”响应,并 包括在响应中包含的SOAP消息指示SOAP处理错误的SOAP Fault元素 (请参阅第4.4节)。 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
与HTTP响应代码搞乱可能是危险的,因为一些其他的客户可能预期不同的反应。在你的情况下,你会很幸运,因为你需要W3C指定的行为。所以抛出一个例外;)
如何做到这一点?看看这里: How to throw a custom fault on a JAX-WS web service?
问候
巴斯蒂安
由于JAX-WS(Web服务在Tomcat 6上运行)是基于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();
}
}
正确的JAX-RS,在那里你鼓励你更喜欢采取的所有HTTP方法和响应代码充分利用。对于JAX-WS,有更多的限制,你应该避免直接干扰http层次。你的例子(至少我认为是这样)发送一个HTTP Response 500,但没有SOAP FAULT作为响应主体,因此任何有效的JAX-WS客户端都可能遇到问题。 “嘿,你有一些问题,但我不会分享细节......” – seafoxx
- 1. Spring - 重试请求,如果服务返回409 HTTP代码
- 2. 服务器返回的HTTP响应代码:500 HttpURLConnection的Android中
- 3. 如何在Lagom服务调用中返回状态代码
- 4. C#.net Web服务Web方法在查看源代码中返回<和>
- 5. 在ListAPIView中返回什么http代码?
- 6. 如何使JAX-WS web服务响应特定的http代码
- 7. 如何从WCF Web服务返回XML?
- 8. 如何从Web服务返回XML
- 9. 如何从$ .ajax从web服务返回
- 10. 如何从Web服务返回异常?
- 11. tomcat-maven-plugin:服务器返回的HTTP响应代码:403
- 12. 服务器返回的HTTP响应代码:400 Facebook的
- 13. 服务器返回的HTTP响应代码:400网址:
- 14. Java服务器返回的HTTP响应代码:401
- 15. 是否有服务根据需求返回HTTP响应代码?
- 16. 服务器返回的Http响应代码:707
- 17. 服务器返回的HTTP响应代码:405
- 18. java.io.IOException:服务器返回的HTTP响应代码:400为URL
- 19. 服务器返回的HTTP响应代码:400
- 20. 服务器返回的HTTP响应代码:网址
- 21. URLjava.io.IOException:服务器返回的HTTP响应代码:411 JAVA
- 22. 服务器返回的HTTP响应代码:400:当嘲笑HttpURLConnection
- 23. 服务器返回的HTTP响应代码503的URL
- 24. java.io.IOException:服务器返回的HTTP响应代码:403对于URL
- 25. java.io.IOException:服务器返回HTTP响应代码505
- 26. 服务器返回错误的HTTP响应。代码500
- 27. 服务器返回的HTTP响应代码:500用于URL
- 28. java.io.IOException:服务器返回的HTTP响应代码:500:URL:https://
- 29. 当服务器返回HTTP响应代码405
- 30. 返回从服务组件HTTP状态代码 - 角2
也许这个答案也有帮助,问题是“SOAP故障或结果对象?”:http://stackoverflow.com/a/3087265/1075628 – seafoxx
感谢迄今。但是你在下面的评论中写道:“我遇到了问题。”嘿,你有一些问题,但我不会分享细节......“”......。这就是我想要的 !客户不关心任何异常细节。他只是想知道“错误或没有错误”。 –
嘿丹,然后简单地抛出一个空的异常导致一个错误。您不需要共享有关问题本身的信息,但它可以帮助客户决定如何处理问题。只要你坚持使用SOAP,使用Faults(并获得免费的返回码500;) – seafoxx