gpt4 book ai didi

java - 如何从 SOAP 故障中禁用堆栈跟踪?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:49:17 24 4
gpt4 key购买 nike

我有一个带有 Spring 和 jaxb 的 Web 服务,在某些情况下我尝试抛出一个异常,为此我使用了 @WebFault 注释。就像这样:

@WebFault
public class ServiceException extends Exception {

private static final long serialVersionUID = -5307754615848423430L;
private FaultBean faultBean;

public ServiceException(String message, ServiceErrorCode serviceErrorCode) {
super(message);
this.faultBean = new FaultBean();
this.faultBean.setMessage(message);
this.faultBean.setErrorCode(serviceErrorCode);
}

public FaultBean getFaultInfo() {
return faultBean;
}

它工作正常,这是输出:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>myException</faultstring>
<detail>
<ns2:ServiceException xmlns:ns2="http://soap.service.test/">
<errorCode>UNRECOGNIZED_ERROR</errorCode>
<message>myException</message>
</ns2:ServiceException>
<ns2:exception class="ServiceException" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false" xmlns:ns2="http://jax-ws.dev.java.net/">
<message>myException</message>
<ns2:stackTrace>
<ns2:frame class="myWebService" file="myWebService.java" line="50" method="listTickets"/>
<ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="native" method="invoke0"/>
<ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="39" method="invoke"/>
<ns2:frame class="sun.reflect.DelegatingMethodAccessorImpl" file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/>
<ns2:frame class="java.lang.reflect.Method" file="Method.java" line="597" method="invoke"/>
<ns2:frame class="com.sun.xml.ws.api.server.InstanceResolver$1" file="InstanceResolver.java" line="246" method="invoke"/>
<ns2:frame class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java" line="146" method="invoke"/>
<ns2:frame class="com.sun.xml.ws.server.sei.EndpointMethodHandler" file="EndpointMethodHandler.java" line="257" method="invoke"/>
<ns2:frame class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java" line="93" method="processRequest"/>
<ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="595" method="__doRun"/>
<ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="554" method="_doRun"/>
<ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="539" method="doRun"/>

...

所以问题是似乎没有正确显示错误的堆栈跟踪,因为客户端不关心这些细节,但找不到执行此操作的方法,有什么想法吗?

最佳答案

默认情况下,堆栈跟踪的传播处于启用状态。如果您认为您的 Web 服务应用程序发送完整的堆栈跟踪不安全,您可以关闭此功能。我确定您想在服务器的 VM 中设置它。如果是:

实际上我们需要配置 WLS 服务器以在启动时包含以下选项:

-Dcom.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace=false

对于 WLS 10.3,此条目应包含在您的 startWebLogic.cmd 文件中。

对于独立的 WLS,此文件位于:

<WLS_HOME>/user_projects/domains/<YOUR_DOMAIN>/bin

对于 JDeveloper 11g 中的集成 WLS,它位于:

<JDEV_HOME>\system\system11.1.1.0.31.51.88\DefaultDomain\bin

在 startWebLogic.cmd 文件中找到以下条目:

set JAVA_OPTIONS=%SAVE_JAVA_OPTIONS%

..并将其更改为:

set JAVA_OPTIONS=-Dcom.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace=false %SAVE_JAVA_OPTIONS%

重新启动 WLS 服务器,并使用无效的 SOAP 负载重新调用 Web 服务。

关于java - 如何从 SOAP 故障中禁用堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11674222/

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