如果JAXWS发生异常,如何发送自定义响应消息而不是故障消息?

时间:2015-07-08 06:18:12

标签: java jax-ws

在我的JAXWS Web服务中,我需要在发生异常时将特定消息发送回客户端,而不是带有异常描述的标准Fault消息。

如何做到这一点?

我使用的是jaxws-rt版本2.1.3

我已经尝试过使用像这样的异常映射器,但没有运气(有些如何调用它们,这也可能是由于配置错误引起的):

NEF

我们使用的服务器是JBoss EAP 6.4。

修改
异常映射器方法不适合我的JAXWS Web服务,因为这适用于JAX-RS(感谢SRINIVAS K)。 JAXWS是否有类似的东西?

3 个答案:

答案 0 :(得分:1)

我设法在此页面的帮助下重写了回复消息:
Intel's manuals

以及本页的一些例子:
http://www.java-tips.org/java-ee-tips-100042/156-java-api-for-xml-web-services/1958-writing-a-handler-in-jax-ws.html

我把这个课放在一起:

...
@HandlerChain(file = "handler-chain.xml")
public class MyWebService {
...
}

修改,添加了其他信息:

您还需要将HandlerChain注释添加到Web服务:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">  
  <handler-chain>
    <handler>
      <handler-class>my.package.ws.jaxws.MyLogicalHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

并创建一个处理程序链xml文件:

string[] strarray = new string[] {"c1","c2","c2"};
var groups = from str in strarray 
             group str by str into g
             select new {
               key = g.Key,
               count = g.Count()
             }

将此文件放在Web服务的资源文件夹中,您需要使用与Web服务相同的包结构。因此,如果您的Web服务类位于my.package.ws包中,请在resources文件夹中创建以下包:my.package.ws。

答案 1 :(得分:0)

你能尝试使用下面的吗?

String errorMessage = "this is custom error message";
return Response.status(e.getResponse().getStatus()).entity(errorMessage).build(); 

答案 2 :(得分:0)

您可以检查ExceptionMapper是否适用于Throwable或Exception等常规异常。我看到了一些使用WebFault批注配置的自定义异常的例子。