You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2013/02/04 05:04:02 UTC

svn commit: r1442021 - in /cxf/branches/2.7.x-fixes: ./ api/src/main/java/org/apache/cxf/interceptor/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/

Author: ffang
Date: Mon Feb  4 04:04:01 2013
New Revision: 1442021

URL: http://svn.apache.org/viewvc?rev=1442021&view=rev
Log:
Merged revisions 1442015 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1442015 | ffang | 2013-02-04 11:06:19 +0800 (δΈ€, 04  2 2013) | 1 line
  
  [CXF-4790]Set lang and subcode for soapfault
........

Modified:
    cxf/branches/2.7.x-fixes/   (props changed)
    cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/Fault.java
    cxf/branches/2.7.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java
    cxf/branches/2.7.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java

Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/trunk:r1442015

Propchange: cxf/branches/2.7.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/Fault.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/Fault.java?rev=1442021&r1=1442020&r2=1442021&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/Fault.java (original)
+++ cxf/branches/2.7.x-fixes/api/src/main/java/org/apache/cxf/interceptor/Fault.java Mon Feb  4 04:04:01 2013
@@ -44,11 +44,12 @@ public class Fault extends UncheckedExce
     private Element detail;
     private String message;
     private QName code;
+    private String lang;
     /**
      * response http header status code
      */
     private int statusCode = DEFAULT_HTTP_RESPONSE_CODE;
-    
+
     public Fault(Message message, Throwable throwable) {
         super(message, throwable);
         this.message = message.toString();
@@ -185,4 +186,12 @@ public class Fault extends UncheckedExce
     public void setStatusCode(int statusCode) {
         this.statusCode = statusCode;
     }
+
+    public void setLang(String convertedLang) {
+        lang = convertedLang;
+    }
+
+    public String getLang() {
+        return lang;
+    }
 }

Modified: cxf/branches/2.7.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java?rev=1442021&r1=1442020&r2=1442021&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java (original)
+++ cxf/branches/2.7.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java Mon Feb  4 04:04:01 2013
@@ -105,7 +105,11 @@ public class Soap12FaultOutInterceptor e
 
                 writer.writeStartElement(defaultPrefix, "Reason", ns);
                 writer.writeStartElement(defaultPrefix, "Text", ns);
-                writer.writeAttribute("xml", "http://www.w3.org/XML/1998/namespace", "lang", getLangCode());
+                String lang = f.getLang();
+                if (lang == null || lang.equalsIgnoreCase("")) {
+                    lang = getLangCode();
+                }
+                writer.writeAttribute("xml", "http://www.w3.org/XML/1998/namespace", "lang", lang);
                 writer.writeCharacters(getFaultMessage(message, fault));
                 writer.writeEndElement();
                 writer.writeEndElement();

Modified: cxf/branches/2.7.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.7.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java?rev=1442021&r1=1442020&r2=1442021&view=diff
==============================================================================
--- cxf/branches/2.7.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java (original)
+++ cxf/branches/2.7.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java Mon Feb  4 04:04:01 2013
@@ -21,6 +21,7 @@ package org.apache.cxf.jaxws.interceptor
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -28,7 +29,9 @@ import java.util.logging.Logger;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.ws.WebFault;
+import javax.xml.ws.soap.SOAPFaultException;
 
+import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.logging.LogUtils;
@@ -82,7 +85,35 @@ public class WebFaultOutInterceptor exte
         if (f == null) {
             return;
         }
-
+        try {
+            if (f.getCause().getClass().equals(SOAPFaultException.class)) {
+                SOAPFaultException sf = (SOAPFaultException) (f.getCause());
+                if (sf.getFault().getFaultSubcodes().hasNext()
+                        && f.getClass().equals(SoapFault.class)) {
+                    String subcode = sf.getFault().getFaultSubcodes().next()
+                           .toString();
+                    String nameSpace = subcode.substring(
+                           subcode.indexOf("{") + 1, subcode.indexOf("}"));
+                    String localPart = subcode
+                           .substring(subcode.indexOf("}") + 1);
+                    QName subcodeQName = new QName(nameSpace, localPart);
+                    ((SoapFault) f).setSubCode(subcodeQName);
+                }
+                if (sf.getFault().getFaultReasonLocales().hasNext()) {
+                    Locale lang = (Locale) sf.getFault()
+                           .getFaultReasonLocales().next();
+                    String convertedLang = lang.getLanguage();
+                    String country = lang.getCountry();
+                    if (country.length() > 0) {
+                        convertedLang = convertedLang + '-' + country;
+                    }
+                    f.setLang(convertedLang);
+                }
+                message.setContent(Exception.class, f);
+            }
+        } catch (Exception e) {
+          // do nothing;
+        }
         Throwable cause = f.getCause();
         WebFault fault = null;
         if (cause != null) {