java webservice Fault occurred while processing.

现象:

今天线上webservice接收报错500,抓包看到错误原因是Fault occurred while processing.,试了网上的方法都不行。

抓包返回xml:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text xml:lang="en">Fault occurred while processing.</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>

实际原因:

webservice接收接口处理抛出了空指针异常

解决:

解决了空指针bug,问题解决

为什么呢?根据报错内容搜源码:

哪里调用了这个方法?好吧找不到。。那看实体类吧

SoapFault

 有Throwable!看看父类Fault

 再看父类

是RuntimeException!

回到最开始的源码图,现在有了大概猜想,webservice调用getFaultMessage方法获取异常原因时,webservice框架把捕获的异常放入了fault参数里,然后异常message是空,接着config最有可能是false,然后返回了Fault occurred while processing.

带入原因验证猜想,线上空指针,空指针没有message,走入else if,config如果是false或者后面条件是false就会走else 。。。嗯,极可能。

大胆猜测:是不是只要抛出了没有message的异常,就能复现?

实践验证猜想尝试复现:

核心代码:

 postman请求结果:

 复现成功!

结论:webservice接收接口如果抛出了没有带message的异常就会返回Fault occurred while processing.

顺便一说:网上搜webservice Fault occurred while processing都说是传了null过去导致的,改成传""就可以解决,我觉得这不是本质,本质是服务端处理出异常了,至于传""解决,极可能是服务端没有判断null,直接使用导致了空指针然后抛了异常,而空指针异常是没有message的,导致最后返回Fault occurred while processing.,写个博客防止后面的人被坑吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值