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

svn commit: r1447876 - in /cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor: ReadHeadersInterceptor.java SoapHeaderInterceptor.java

Author: dkulp
Date: Tue Feb 19 19:16:55 2013
New Revision: 1447876

URL: http://svn.apache.org/r1447876
Log:
[CXF-4819] Don't actually remove the attributes as SoapHandlers or Provider<SOAPMessage> or similar may need/expect them.   Instead, ignore those attributes for the purpose of validation.

Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapHeaderInterceptor.java

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java?rev=1447876&r1=1447875&r2=1447876&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java Tue Feb 19 19:16:55 2013
@@ -229,12 +229,8 @@ public class ReadHeadersInterceptor exte
                                                            dataBinding);
                         String mu = hel.getAttributeNS(soapVersion.getNamespace(),
                                                       soapVersion.getAttrNameMustUnderstand());
-                        hel.removeAttributeNS(soapVersion.getNamespace(),
-                                           soapVersion.getAttrNameMustUnderstand());
                         String act = hel.getAttributeNS(soapVersion.getNamespace(),
                                                         soapVersion.getAttrNameRole());
-                        hel.removeAttributeNS(soapVersion.getNamespace(),
-                                              soapVersion.getAttrNameRole());
 
                         if (!StringUtils.isEmpty(act)) {
                             shead.setActor(act);

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapHeaderInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapHeaderInterceptor.java?rev=1447876&r1=1447875&r2=1447876&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapHeaderInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapHeaderInterceptor.java Tue Feb 19 19:16:55 2013
@@ -27,11 +27,14 @@ import javax.xml.stream.XMLStreamExcepti
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.validation.Schema;
+import javax.xml.validation.Validator;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 import org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
 import org.apache.cxf.binding.soap.SoapMessage;
@@ -162,21 +165,38 @@ public class SoapHeaderInterceptor exten
         }
     }
 
-    private void validateHeader(SoapMessage message, MessagePartInfo mpi, Schema schema) {
+    private void validateHeader(final SoapMessage message, MessagePartInfo mpi, Schema schema) {
         Header param = findHeader(message, mpi);
-        Element el = null;
         if (param != null
             && param.getDataBinding() == null) {
             Node source = (Node)param.getObject();
-            if (source instanceof Element) {
-                el = (Element)source;
-            } else {
+            if (!(source instanceof Element)) {
                 return;
             }
             if (schema != null) {
+                final Element el = (Element)source;
                 DOMSource ds = new DOMSource(el);
                 try {
-                    schema.newValidator().validate(ds);
+                    Validator v = schema.newValidator();
+                    ErrorHandler errorHandler = new ErrorHandler() {
+                        public void warning(SAXParseException exception) throws SAXException {
+                        }
+                        public void error(SAXParseException exception) throws SAXException {
+                            String msg = exception.getMessage();
+                            if (msg.contains(el.getLocalName())
+                                && (msg.contains(":" + message.getVersion().getAttrNameRole())
+                                    || msg.contains(":" + message.getVersion().getAttrNameMustUnderstand()))) {
+                                return;
+                            }
+                            System.out.println("2");
+                            throw exception;
+                        }
+                        public void fatalError(SAXParseException exception) throws SAXException {
+                            throw exception;
+                        }
+                    };
+                    v.setErrorHandler(errorHandler);
+                    v.validate(ds);
                 } catch (SAXException e) {
                     throw new Fault("COULD_NOT_VALIDATE_SOAP_HEADER_CAUSED_BY", LOG, e, e.getClass()
                         .getCanonicalName(), e.getMessage());