如何捕获请求中的无效数据的soap错误响应?

时间:2017-11-27 11:08:05

标签: java soap wsimport webservices-client soapexception

我能够成功记录有效soap请求(通过wsimport生成的类)的请求和响应,但在抛出异常时(当请求中的节点填充了无效数据时)无法捕获xml内容。我可以得到响应的细节,但我想只捕获原始响应的xml部分。我已经尝试过SOAPFaultException,但只提供异常消息而不是响应正文的完整信封。如何仅在抛出异常/错误时的xml内容中捕获异常。

注意:我知道我可以解析错误(原始响应)并提取xml内容,但我想知道是否有简单的方法/方法来获取xml内容,如下所示。内容应该如下(从Soap UI工具中捕获的响应)

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
   <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope">
      <wsa:Action>http://schemas.xmlsoap.org/ws/2004/08/addressing/fault</wsa:Action>
      <wsa:MessageID>urn:uuid:xyz</wsa:MessageID>
      <wsa:RelatesTo>urn:uuid:xyz</wsa:RelatesTo>
      <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
   </env:Header>
   <soap:Body>
      <soap:Fault>
         <soap:Code>
            <soap:Value>soap:Sender</soap:Value>
         </soap:Code>
         <soap:Reason>
            <soap:Text xml:lang="en">The 'http://www.fakexyz.com/schemas/xyz:xyz' element is invalid - The value '123' is invalid according to its datatype 'String' - The Pattern constraint failed.
 Please revise your data fields and make sure that message is correctly formatted.</soap:Text>
         </soap:Reason>
         <detail>
            <faulttype>Schema</faulttype>
         </detail>
      </soap:Fault>
   </soap:Body>
</soap:Envelope> 

1 个答案:

答案 0 :(得分:0)

在探索了更多并尝试之后,我发现我们需要一个应该实现SoapHandler接口的类,这给你几乎所需要的东西。 我重写了handleFault方法,如下所示。

auto legalMoves = find_if(std::begin(possible_moves), std::end(possible_moves),
                          [](auto const& a_move) {
                              int x, y;
                              std::tie(x, y) = a_move;
                              // do whatever you want
                          });

这给了我格式化的xml以及http标题的错误信息。