我试图自定义在到达WebMethod
之前抛出的RuntimeException
的错误响应,例如无效的xml主体或JAX-WS服务的错误方法名称。我试图使用@HandlerChain
的处理程序,但响应在处理程序处理之前发送。
这里有一个例子。假设我在我的ws中有一个copyTool方法,但客户端发送了下面的请求。我希望能够自定义响应,以便我可以更改faultString或返回一些自定义faultCode。
输入
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cor="http://acme.com/">
<soapenv:Header/>
<soapenv:Body>
<cor:copyTool>
<toolNumber>some Text instead of Integer</toolNumber>
</cor:copyTool>
</soapenv:Body>
</soapenv:Envelope>
字符串
输出
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns0:Fault xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.w3.org/2003/05/soap-envelope">
<faultcode>ns0:Server</faultcode>
<faultstring>Exception Description: The object [some Text instead of Integer], of class [class java.lang.String], from mapping [org.eclipse.persistence.oxm.mappings.XMLDirectMapping[toolNumber-->toolNumber/text()]] with descriptor [XMLDescriptor(com.acme --> [DatabaseTable(ns0:copyTool)])], could not be converted to [class java.lang.Integer].
Internal Exception: java.lang.NumberFormatException: For input string: "some Text instead of Integer"</faultstring>
</ns0:Fault>
</S:Body>
</S:Envelope>
型
2条答案
按热度按时间kg7wmglp1#
我认为你可以尝试使用ExceptionMapper,如下所示:
字符串
hmae6n7t2#
我可以通过
@HandlerChain
为RuntimeException
自定义故障消息。我猜你做错了什么。一步一步的过程中,我做了什么,使它的工作:
我创建了一个示例项目来演示。
项目结构(Maven项目):
x1c 0d1x的数据
pom.xml:
字符串
PublishLotteryService:
型
LotteryService(一种WebService接口):
型
LotteryServiceImpl(一种WebService实现):
型
注意:您必须通过创建一个具有任意名称的处理程序链.xml文件并将该**. xml**文件设置/引用到
@HandlerChain
中,来告诉您的WebService使用@HandlerChain
。custom-fault-message.xml
型
自定义错误消息提示:
型
需要注意的一些重要事项:
你必须在
handleMessage(SOAPMessageContext context)
中从false
设置return true;
。否则,它不会进入handleFault(SOAPMessageContext context)
来处理Fault
相关的事情。现在,你可以看到这样的代码:
型
我只是获取默认的
Fault
,并在这里使用我的自定义Fault Code和Fault Message覆盖它。现在,当前的SOAPMessageContext
使用包含我的自定义值的Fault进行更新。这就是您需要做的所有事情。输出(成功案例):
输入XML请求负载:
型
输出XML响应:
型
的
输出(失败,自定义错误消息):
我已经将soap主体名称
SendYourNameAndWinLottery
篡改为错误的名称SendYourNameAndWin
以进行测试。XML请求负载不正确:
型
输出XML响应:
型
的