繁体   English   中英

如何从SOAP Fault中禁用堆栈跟踪?

[英]how to disabling the Stack Trace from the SOAP Fault?

我有一个使用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代码的系统属性中进行设置,这很简单,并且与部署的服务器类型无关。 只需在服务实现调用的开头添加以下行(粗体)。 希望能有所帮助。

例:

@WebService(endpointInterface =“ com.service.IMyService”)公共类MyServiceImpl实现IMyService {

@Override公共列表myService(String pnr)引发MyException {

System.setProperty(“ com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace”,“ false”);

}

在尝试了所有其他方法之后,这对我有用。

import com.sun.xml.ws.fault.SOAPFaultBuilder到您的类中

为SOAPFaultBuilder声明一个变量,即: SOAPFaultBuilder soapFaultBuilder;

在构造函数中,设置soapFaultBuilder.captureStackTrace = false;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM