Author: dkulp
Date: Tue Aug  4 17:20:56 2009
New Revision: 800880

URL: http://svn.apache.org/viewvc?rev=800880&view=rev
Log:
[CXF-2379] Require endpoints to declare which mustUnderstand headers
they want to process

Modified:
    
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
    
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java

Modified: 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java?rev=800880&r1=800879&r2=800880&view=diff
==============================================================================
--- 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
 (original)
+++ 
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
 Tue Aug  4 17:20:56 2009
@@ -89,10 +89,7 @@
             .add(new 
UltimateReceiverMustUnderstandInterceptor(mustUnderstandQNames));
         Object o = 
soapMessage.getContextualProperty("endpoint-processes-headers");
         if (o == null) {
-            //The default here really should be to make o = "" and process
-            //so any mustUnderstands are kill immediately. That will break
-            //existing apps though.  Thus, it's a migration issue.
-            return;
+            o = Collections.EMPTY_LIST;
         }
         Collection<Object> o2;
         if (o instanceof Collection) {
@@ -109,7 +106,8 @@
             }
             Iterator<Header> hit = ultimateReceiverHeaders.iterator();
             while (hit.hasNext()) {
-                if (qn.equals(hit.next().getName())) {
+                Header h = hit.next();
+                if (qn.equals(h.getName())) {
                     hit.remove();
                 }
             }
@@ -117,10 +115,14 @@
         if (!ultimateReceiverHeaders.isEmpty()) {
             Set<QName> notFound = new HashSet<QName>();
             for (Header h : ultimateReceiverHeaders) {
-                notFound.add(h.getName());
+                if (!mustUnderstandQNames.contains(h.getName())) {
+                    notFound.add(h.getName());
+                }
             }
-            throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, 
notFound),
+            if (!notFound.isEmpty()) {
+                throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, 
notFound),
                                 soapMessage.getVersion().getMustUnderstand());
+            }
         }
     }
     private void initServiceSideInfo(Set<QName> mustUnderstandQNames, 
SoapMessage soapMessage,

Modified: 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java?rev=800880&r1=800879&r2=800880&view=diff
==============================================================================
--- 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java
 (original)
+++ 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java
 Tue Aug  4 17:20:56 2009
@@ -183,7 +183,7 @@
         priceData.setTickerPrice(1.0f);
         priceData.setTickerSymbol("CELTIX");
 
-        assertTrue(check(0, putLastTradedPrice, false, true, priceData));
+        assertFalse(check(0, putLastTradedPrice, false, true, priceData));
         assertFalse(check(1, putLastTradedPrice, false, true, priceData));
         assertTrue(check(2, putLastTradedPrice, false, true, priceData));      
  
 


Reply via email to