gpt4 book ai didi

java - 如何将堆栈跟踪添加到 soap 错误 (websphere)

转载 作者:行者123 更新时间:2023-11-29 09:11:36 25 4
gpt4 key购买 nike


我们已经将 Webservice 部署到 websphere 服务器中,我想询问有关控制 soap 故障响应的设置。当 soap 故障发生时,我想将堆栈跟踪日志添加到回复中。我知道这在 weblogic 中是可能的。如何在 websphere 中实现这一点?或者有没有办法手动添加它(而不是通过创建自定义元素)?

谢谢

编辑:我使用 apache cxf 生成基础 java 类,所以我有:

@WebMethod public returnType method(param) throws CustomException

并制造错误

CustomExceptionWSDLType ex = new CustomExceptionWSDLType ()
throw new CustomException(error.getMessage(), ex , error);

CustomException 是异常和
CustomExceptionWSDLType 是复杂类型(均由cxf生成)

编辑2:我使用 CXF 生成 POJO,但 Websphere 使用自己的轴实现来部署我的 WS。

最佳答案

我不是 Websphere 专家,无法告诉您是否有配置选项可以让您执行此操作。

or is there way how to add it manually (not by creating custom element)?

当您抛出故障时,您可以随时在您的网络服务中添加详细信息并修改故障字符串和代码。现在,有很多方法可以构造和抛出错误,我不知道你的网络服务是如何做到的。这是一个非常简单的示例,它将异常的堆栈跟踪放入错误字符串中。

   @WebMethod
public void throwFault(){
try {
SOAPFactory factory = SOAPFactory.newInstance();
IndexOutOfBoundsException e = new IndexOutOfBoundsException("index out of bounds");
SOAPFault fault = factory.createFault(getStackTraceString(e), new QName("http://whatever.com","CustomFault"));
throw new SOAPFaultException(fault);
} catch (SOAPException e) {
// ignore for the example
}
}

private String getStackTraceString(Exception e){
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
return sw.toString();
}

throwFault 方法由服务公开,它只是创建并抛出一个新的 SOAPFault。这在您的代码中可能看起来有所不同。私有(private)方法 getStackTraceString 将堆栈跟踪转换为字符串表示形式。

此解决方案确实向您的 WSDL 添加了一个额外的元素,它只是重复使用堆栈跟踪的错误字符串。

调用网络服务,我得到以下响应:

 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode xmlns:ns0="http://whatever.com">ns0:CustomFault</faultcode>
<faultstring>java.lang.IndexOutOfBoundsException: index out of bounds at Faulter.throwUndeclaredFault(Faulter.java:23) at <!--rest of stacktrace omitted for readability--!> </faultstring>
</S:Fault>
</S:Body>
</S:Envelope>

编辑:假设你代码中的变量error是一个异常,你可以把你的throw语句改成

throw new CustomException(getStackTraceString(error),error);

这应该以如上所述的方式为您提供堆栈跟踪。

关于java - 如何将堆栈跟踪添加到 soap 错误 (websphere),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12069270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com