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

Java 如何捕获请求中无效数据的soap错误响应?,java,soap,wsimport,webservices-client,soapexception,Java,Soap,Wsimport,Webservices Client,Soapexception,我能够成功地记录有效soap请求(通过wsimport生成的类)的请求和响应,但在引发异常时(当请求中的节点充满无效数据时)无法捕获xml内容。我可以获得响应的详细信息,但我只想捕获原始响应的xml部分。我尝试了SOAPFaultException,但它只提供异常消息,而不是响应主体的完整信封。如何仅捕获抛出的异常/错误中的xml内容来捕获异常 注意:我知道我可以解析错误(原始响应)并提取xml内容,但我想知道是否有简单的方式/方法可以获得如下所示的xml内容。内容应该如下所示(从Soap UI

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

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


http://schemas.xmlsoap.org/ws/2004/08/addressing/fault
urn:uuid:xyz
urn:uuid:xyz
http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
soap:发送方
这个http://www.fakexyz.com/schemas/xyz:xyz'元素无效-值'123'根据其数据类型'String'无效-模式约束失败。
请修改您的数据字段,并确保邮件格式正确。
模式

在进行了更多的探索和尝试之后,我发现我们需要一个类来实现SoapHandler接口,这将为您提供所需的基本功能。 我推翻了handleFault方法,如下所示

public boolean handleFault(SOAPMessageContext context) {  
        System.out.println("==============================================RESPONSE(ERROR)=======================================\r\n");  

        String[] abc= context.get(MessageContext.HTTP_RESPONSE_HEADERS).toString().split("],");

        for(String httpheader:abc) {
            System.out.println(httpheader+"],");
        }

        System.out.println("\r\n");

        SOAPMessage message= context.getMessage();                  
        try {                                           
            Source source = message.getSOAPPart().getContent();             
            Transformer transformer = TransformerFactory.newInstance().newTransformer();             
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");                                                 
            transformer.transform(source, new StreamResult(System.out));

        } catch (Exception e) {            
                System.out.println("Response has errors!!");
            }
        return false;  
    }  

这为我提供了格式化xml以及http头的错误信息。

在探索了更多内容并尝试之后,我发现我们需要一个类来实现SoapHandler接口,这为您提供了所需的内容。 我推翻了handleFault方法,如下所示

public boolean handleFault(SOAPMessageContext context) {  
        System.out.println("==============================================RESPONSE(ERROR)=======================================\r\n");  

        String[] abc= context.get(MessageContext.HTTP_RESPONSE_HEADERS).toString().split("],");

        for(String httpheader:abc) {
            System.out.println(httpheader+"],");
        }

        System.out.println("\r\n");

        SOAPMessage message= context.getMessage();                  
        try {                                           
            Source source = message.getSOAPPart().getContent();             
            Transformer transformer = TransformerFactory.newInstance().newTransformer();             
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");                                                 
            transformer.transform(source, new StreamResult(System.out));

        } catch (Exception e) {            
                System.out.println("Response has errors!!");
            }
        return false;  
    }  
这给了我格式化xml和http头中的错误信息