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