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 2008/08/06 04:43:20 UTC

svn commit: r683089 - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/ rt/frontend/jaxws/src/m...

Author: dkulp
Date: Tue Aug  5 19:43:19 2008
New Revision: 683089

URL: http://svn.apache.org/viewvc?rev=683089&view=rev
Log:
[CXF-1733] Merge SoapActionOut and SoapPreProtocolOut nterceptors to 
make sure the action and content types are properly set.

Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
    cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java
    cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java Tue Aug  5 19:43:19 2008
@@ -49,7 +49,6 @@
 import org.apache.cxf.binding.soap.interceptor.Soap12FaultInInterceptor;
 import org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapHeaderOutFilterInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
@@ -342,7 +341,6 @@
             sb.getInInterceptors().add(new StaxInInterceptor());
             sb.getInInterceptors().add(new SoapActionInInterceptor());
             
-            sb.getOutInterceptors().add(new SoapActionOutInterceptor());
             sb.getOutInterceptors().add(new AttachmentOutInterceptor());
             sb.getOutInterceptors().add(new StaxOutInterceptor());
             sb.getOutInterceptors().add(new SoapHeaderOutFilterInterceptor());

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionOutInterceptor.java Tue Aug  5 19:43:19 2008
@@ -19,22 +19,16 @@
 
 package org.apache.cxf.binding.soap.interceptor;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cxf.binding.soap.Soap11;
-import org.apache.cxf.binding.soap.Soap12;
-import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapMessage;
-import org.apache.cxf.binding.soap.model.SoapOperationInfo;
-import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
-import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
-import org.apache.cxf.service.model.BindingOperationInfo;
 
+
+/**
+ * This has been merged into the SoapPreProtocolOutInterceptor
+ * to make sure the content type is set properly only once.
+ */
+@Deprecated
 public class SoapActionOutInterceptor extends AbstractSoapInterceptor {
     
     public SoapActionOutInterceptor() {
@@ -42,64 +36,7 @@
     }
     
     public void handleMessage(SoapMessage message) throws Fault {
-        if (!(message == message.getExchange().getInMessage())) {
-            setSoapAction(message);
-        }
-    }
-
-    private void setSoapAction(SoapMessage message) {
-        BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
-        
-        // The soap action is set on the wrapped operation.
-        if (boi != null && boi.isUnwrapped()) {
-            boi = boi.getWrappedOperation();
-        }
-        
-        String action = getSoapAction(message, boi);
-        
-        if (message.getVersion() instanceof Soap11) {
-            Map<String, List<String>> reqHeaders = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
-            if (reqHeaders == null) {
-                reqHeaders = new HashMap<String, List<String>>();
-            }
-            
-            if (reqHeaders.size() == 0) {
-                message.put(Message.PROTOCOL_HEADERS, reqHeaders);
-            }
-            
-            if (!reqHeaders.containsKey(SoapBindingConstants.SOAP_ACTION)) {            
-                reqHeaders.put(SoapBindingConstants.SOAP_ACTION, Collections.singletonList(action));
-            }
-        } else if (message.getVersion() instanceof Soap12 && !"\"\"".equals(action)) {
-            String ct = (String) message.get(Message.CONTENT_TYPE);
-            
-            if (ct.indexOf("action=\"") == -1) {
-                ct = new StringBuilder().append(ct)
-                    .append("; action=").append(action).toString();
-                message.put(Message.CONTENT_TYPE, ct);
-            }
-        }
-    }
-
-    private String getSoapAction(SoapMessage message, BindingOperationInfo boi) {
-        // allow an interceptor to override the SOAPAction if need be
-        String action = (String) message.get(SoapBindingConstants.SOAP_ACTION);
-        
-        // Fall back on the SOAPAction in the operation info
-        if (action == null) {
-            if (boi == null) {
-                action = "\"\"";
-            } else {
-                SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
-                action = soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction();
-            }
-        }
-        
-        if (!action.startsWith("\"")) {
-            action = new StringBuffer().append("\"").append(action).append("\"").toString();
-        }
-        
-        return action;
+        //no-op
     }
 
 }

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapPreProtocolOutInterceptor.java Tue Aug  5 19:43:19 2008
@@ -19,16 +19,22 @@
 
 package org.apache.cxf.binding.soap.interceptor;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
+import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.SoapVersion;
-import org.apache.cxf.interceptor.AttachmentOutInterceptor;
+import org.apache.cxf.binding.soap.model.SoapOperationInfo;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.BindingOperationInfo;
 
 import static org.apache.cxf.message.Message.MIME_HEADERS;
 
@@ -40,8 +46,7 @@
 public class SoapPreProtocolOutInterceptor extends AbstractSoapInterceptor {
 
     public SoapPreProtocolOutInterceptor() {
-        super(Phase.PRE_STREAM);
-        getBefore().add(AttachmentOutInterceptor.class.getName());
+        super(Phase.POST_LOGICAL);
     }
 
     /**
@@ -53,6 +58,10 @@
     public void handleMessage(SoapMessage message) throws Fault {
         ensureVersion(message);
         ensureMimeHeaders(message);
+        if (isRequestor(message)) {
+            setSoapAction(message);
+        }
+
     }
     
     /**
@@ -86,4 +95,60 @@
             message.put(MIME_HEADERS, new HashMap<String, List<String>>());
         }
     }
+    
+    private void setSoapAction(SoapMessage message) {
+        BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
+        
+        // The soap action is set on the wrapped operation.
+        if (boi != null && boi.isUnwrapped()) {
+            boi = boi.getWrappedOperation();
+        }
+        
+        String action = getSoapAction(message, boi);
+        
+        if (message.getVersion() instanceof Soap11) {
+            Map<String, List<String>> reqHeaders = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS));
+            if (reqHeaders == null) {
+                reqHeaders = new HashMap<String, List<String>>();
+            }
+            
+            if (reqHeaders.size() == 0) {
+                message.put(Message.PROTOCOL_HEADERS, reqHeaders);
+            }
+            
+            if (!reqHeaders.containsKey(SoapBindingConstants.SOAP_ACTION)) {            
+                reqHeaders.put(SoapBindingConstants.SOAP_ACTION, Collections.singletonList(action));
+            }
+        } else if (message.getVersion() instanceof Soap12 && !"\"\"".equals(action)) {
+            String ct = (String) message.get(Message.CONTENT_TYPE);
+            
+            if (ct.indexOf("action=\"") == -1) {
+                ct = new StringBuilder().append(ct)
+                    .append("; action=").append(action).toString();
+                message.put(Message.CONTENT_TYPE, ct);
+            }
+        }
+    }
+
+    private String getSoapAction(SoapMessage message, BindingOperationInfo boi) {
+        // allow an interceptor to override the SOAPAction if need be
+        String action = (String) message.get(SoapBindingConstants.SOAP_ACTION);
+        
+        // Fall back on the SOAPAction in the operation info
+        if (action == null) {
+            if (boi == null) {
+                action = "\"\"";
+            } else {
+                SoapOperationInfo soi = (SoapOperationInfo) boi.getExtensor(SoapOperationInfo.class);
+                action = soi == null ? "\"\"" : soi.getAction() == null ? "\"\"" : soi.getAction();
+            }
+        }
+        
+        if (!action.startsWith("\"")) {
+            action = new StringBuffer().append("\"").append(action).append("\"").toString();
+        }
+        
+        return action;
+    }
+
 }

Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapActionInterceptorTest.java Tue Aug  5 19:43:19 2008
@@ -24,7 +24,7 @@
 
 import javax.xml.namespace.QName;
 
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
 import org.apache.cxf.binding.soap.model.SoapOperationInfo;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.ExchangeImpl;
@@ -42,7 +42,7 @@
     
     @Test
     public void testSoapAction() throws Exception {
-        SoapActionOutInterceptor i = new SoapActionOutInterceptor();
+        SoapPreProtocolOutInterceptor i = new SoapPreProtocolOutInterceptor();
         
         Message message = new MessageImpl();
         message.setExchange(new ExchangeImpl());
@@ -52,8 +52,9 @@
         assertNotNull(message);
         assertTrue(message instanceof SoapMessage);
         SoapMessage soapMessage = (SoapMessage) message;
+        soapMessage.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
         assertEquals(Soap11.getInstance(), soapMessage.getVersion());
-        (new SoapActionOutInterceptor()).handleMessage(soapMessage);
+        (new SoapPreProtocolOutInterceptor()).handleMessage(soapMessage);
         Map<String, List<String>> reqHeaders = CastUtils.cast((Map)soapMessage.get(Message.PROTOCOL_HEADERS));
         assertNotNull(reqHeaders);
         assertEquals("\"\"", reqHeaders.get(SoapBindingConstants.SOAP_ACTION).get(0));
@@ -61,6 +62,7 @@
         sb.setSoapVersion(Soap12.getInstance());
         soapMessage.clear();
         soapMessage = (SoapMessage) sb.createMessage(soapMessage);
+        soapMessage.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
         i.handleMessage(soapMessage);
         String ct = (String) message.get(Message.CONTENT_TYPE);
         assertEquals("application/soap+xml", ct);

Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingFactoryTest.java Tue Aug  5 19:43:19 2008
@@ -202,7 +202,7 @@
         SoapOperationInfo sboi = boi.getExtensor(SoapOperationInfo.class);
         assertNotNull(sboi);
         assertEquals("document", sboi.getStyle());
-        assertEquals("", sboi.getAction());
+        assertEquals("sayHiAction", sboi.getAction());
 
         BindingMessageInfo input = boi.getInput();
         SoapBodyInfo bodyInfo = input.getExtensor(SoapBodyInfo.class);
@@ -216,6 +216,7 @@
         sboi = boi.getExtensor(SoapOperationInfo.class);
         assertNotNull(sboi);
         assertEquals("document", sboi.getStyle());
+        assertEquals("", sboi.getAction());
         Collection<BindingFaultInfo> faults = boi.getFaults();
         assertEquals(1, faults.size());
         BindingFaultInfo faultInfo = boi.getFault(new QName("http://apache.org/hello_world_soap12_http", 

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java Tue Aug  5 19:43:19 2008
@@ -56,7 +56,7 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.binding.soap.SoapBinding;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ConduitSelector;
@@ -281,7 +281,7 @@
         }
 
         if (getBinding() instanceof SOAPBinding) {
-            chain.add(new SoapActionOutInterceptor());
+            chain.add(new SoapPreProtocolOutInterceptor());
         }
 
         chain.add(new MessageSenderInterceptor());

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerInterceptor.java Tue Aug  5 19:43:19 2008
@@ -45,8 +45,8 @@
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
 import org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor;
-import org.apache.cxf.binding.soap.interceptor.SoapActionOutInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapInterceptor;
+import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
 import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
 import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
 import org.apache.cxf.endpoint.Endpoint;
@@ -215,7 +215,8 @@
                     // well for outbound case, as many outbound interceptors
                     // have their ending interceptors.
                     // For example, we can not skip MessageSenderInterceptor.
-                    chain.doInterceptStartingAfter(responseMsg, SoapActionOutInterceptor.class.getName());
+                    chain.doInterceptStartingAfter(responseMsg, 
+                                                   SoapPreProtocolOutInterceptor.class.getName());
                 }
 
             } else {

Modified: cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java (original)
+++ cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/GreeterClientTest.java Tue Aug  5 19:43:19 2008
@@ -47,6 +47,9 @@
     @Before
     public 
     void before() throws Exception {
+        //something seems to be cached someplace that is screwing up the second test SOMETIMES
+        //make sure the garbage collector cleans up first.
+        System.gc();
         setupRhino("greeter-service-endpoint",  
                    "/org/apache/cxf/javascript/GreeterTests.js",
                    true);

Modified: cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl?rev=683089&r1=683088&r2=683089&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl (original)
+++ cxf/trunk/testutils/src/main/resources/wsdl/hello_world_soap12.wsdl Tue Aug  5 19:43:19 2008
@@ -90,7 +90,7 @@
     <wsdl:binding name="Greeter_SOAPBinding" type="tns:Greeter">
 	<soap12:binding transport="http://www.w3.org/2003/05/soap/bindings/HTTP/" style="document" />
 	<operation name="sayHi">
-	    <soap12:operation style="document" soapAction=""/>
+	    <soap12:operation style="document" soapAction="sayHiAction"/>
 	    <input>
 		<soap12:body use="literal" />
 	    </input>