You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Ivo Studensky (JIRA)" <ji...@apache.org> on 2017/07/25 14:01:00 UTC

[jira] [Created] (CXF-7453) WebFaultOutInterceptor calls getFaultSubcodes() even in case of SOAP1.1 faults

Ivo Studensky created CXF-7453:
----------------------------------

             Summary: WebFaultOutInterceptor calls getFaultSubcodes() even in case of SOAP1.1 faults
                 Key: CXF-7453
                 URL: https://issues.apache.org/jira/browse/CXF-7453
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
            Reporter: Ivo Studensky


When {{SOAPFaultException}} is thrown in an application with SOAP 1.1, the {{WebFaultOutInterceptor}} calls {{getFaultSubcodes}} method relevant for SOAP 1.2 only and that leads to an error message logged in a server log in case of SOAP 1.1.

Code snippet:
{code:java|title=cxf-3.1.10/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java}
 88     public void handleMessage(Message message) throws Fault {
 89         Fault f = (Fault)message.getContent(Exception.class);
 90         if (f == null) {
 91             return;
 92         }
 93         try { 
 94             Throwable thr = f.getCause();
 95             SOAPFaultException sf = null;
 96             if (thr instanceof SOAPFaultException) {
 97                 sf = (SOAPFaultException)thr;
 98             } else if (thr.getCause() instanceof SOAPFaultException) {
 99                 sf = (SOAPFaultException)thr.getCause();              
100             }
101             if (sf != null) {
102                 if (f instanceof SoapFault) {
103                     for (Iterator<QName> it = CastUtils.cast(sf.getFault().getFaultSubcodes()); it.hasNext();) { // <-- here
104                         ((SoapFault) f).addSubCode(it.next());
105                     }
106                 } 
107                 if (sf.getFault().getFaultReasonLocales().hasNext()) {
108                     Locale lang = (Locale) sf.getFault()
109                            .getFaultReasonLocales().next();
110                     String convertedLang = lang.getLanguage();
111                     String country = lang.getCountry();
112                     if (country.length() > 0) {
113                         convertedLang = convertedLang + '-' + country;
114                     }
115                     f.setLang(convertedLang);
116                 } 
117                 message.setContent(Exception.class, f);
118             } 
119         } catch (Exception e) {
120           // do nothing;   // <- UnsupportedOperationException is swallowed here.
121         }
122         Throwable cause = f.getCause();
123         WebFault fault = null;
124         if (cause != null) {
125             fault = getWebFaultAnnotation(cause.getClass());      
126         }
 :
{code}

Both SOAP1.1 and 1.2 the "getFaultSubcodes()" is called, but SOAP 1.1 does not have an attribute "faultsubcoded"  which leads to the message logged in the log.

The "getFaultSubcodes()" should be called only in case of SOAP1.2 usage. 




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)