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 2007/04/18 09:26:12 UTC

svn commit: r529897 - in /incubator/cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/ testu...

Author: ffang
Date: Wed Apr 18 00:26:04 2007
New Revision: 529897

URL: http://svn.apache.org/viewvc?view=rev&rev=529897
Log:
[CXF-474] get testHolderOutIsTheFirstMessagePart system test work again


Modified:
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
    incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java
    incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?view=diff&rev=529897&r1=529896&r2=529897
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java Wed Apr 18 00:26:04 2007
@@ -127,28 +127,14 @@
                 return endedHeader;
             }
             
-            // This code is really ugly right now. Need to refactor...
-            int offset = 0;
-            int returnIdx = 0;
-            if (!client) {
-                for (int i = 0; i < parts.size(); i++) {
-                    MessagePartInfo part = parts.get(i);
-                    if (part.getIndex() == -1) {
-                        offset++;
-                        returnIdx = i;
-                        break;
-                    }
-                }
-            }
+                        
             
             for (SoapHeaderInfo header : headers) {
                 MessagePartInfo part = header.getPart();
 
                 int idx = parts.indexOf(part);
-                if (!client && idx < returnIdx) {
-                    idx += offset;
-                }
-                
+                //int idx = part.getIndex();
+                                
                 Object arg = objs.get(idx);
                 if (!(startedHeader || preexistingHeaders)) {
                     try {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java?view=diff&rev=529897&r1=529896&r2=529897
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java Wed Apr 18 00:26:04 2007
@@ -19,14 +19,12 @@
 
 package org.apache.cxf.jaxws.interceptors;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.Logger;
 
 import javax.xml.ws.Holder;
 
-import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.Exchange;
@@ -80,8 +78,6 @@
             for (int i = 0; i < size; i++) {
                 newObjects.add(null);
             }
-            
-            handleNullHolder(message, outObjects);
             int[] argsOffset = removeOutHolderFromParaList(outObjects, parts, holders, size, newObjects);
             
             if (holders.size() == 0) {
@@ -121,54 +117,39 @@
             message.setContent(List.class, newObjects);
             message.getExchange().put(HolderInInterceptor.CLIENT_HOLDERS, holders);
         } else {
-            handleResponse(message, outObjects, parts);
-        }
-    }
-
-    private void handleResponse(Message message, List<Object> outObjects, List<MessagePartInfo> parts) {
-        // Add necessary holders so we match the method signature of the service class
-        List<Object> reqObjects =
-            CastUtils.cast(message.getExchange().getInMessage().getContent(List.class));
-   
-        int outIdx = 0;
-        for (MessagePartInfo part : parts) {
-            if (part.getIndex() == -1) {
-                outIdx++;
-                break;
-            }
-        }
-        
-        for (MessagePartInfo part : parts) {
-            int methodIdx = part.getIndex();
-            if (methodIdx >= 0) {
-                Holder holder = (Holder) reqObjects.get(methodIdx);
-                Object o = holder.value;
-                if (outIdx >= outObjects.size()) {
-                    outObjects.add(o);
+            // Add necessary holders so we match the method signature of the service class
+            List<Object> reqObjects =
+                CastUtils.cast(message.getExchange().getInMessage().getContent(List.class));
+    
+            int outIdx = 0;
+            boolean holderOutIsFirst = false;
+            for (MessagePartInfo part : parts) {
+                if (part.getIndex() == -1) {
+                    outIdx++;
+                    break;
                 } else {
-                    outObjects.add(outIdx, o);
+                    holderOutIsFirst = true;
                 }
-                outIdx++;
             }
-        }
-        message.setContent(List.class, outObjects);
-    }
-
-    private void handleNullHolder(Message message, List<Object> outObjects) {
-        //process outObjects if Holder itself is null
-        Method method = (Method)message.get(Client.REQUEST_METHOD);
-        if (method == null) {
-            return;
-        }
-        Class<?>[] paramTypes = method.getParameterTypes();
-        int idx = 0;
-        for (Class rawClass : paramTypes) {
-            if (rawClass.equals(Holder.class) && outObjects.get(idx) == null) {
-                outObjects.set(idx, new Holder());
+            
+            for (MessagePartInfo part : parts) {
+                int methodIdx = part.getIndex();
+                if (methodIdx >= 0) {
+                    Holder holder = (Holder) reqObjects.get(methodIdx);
+                    Object o = holder.value;
+                    if (methodIdx < outIdx && holderOutIsFirst) {
+                        //Holder is first part of mesage
+                        outObjects.add(methodIdx, o);
+                    } else if (outIdx >= outObjects.size()) {
+                        outObjects.add(o);
+                    } else {
+                        outObjects.add(outIdx, o);
+                    }
+                    outIdx++;
+                }
             }
-            idx++;
+            message.setContent(List.class, outObjects);
         }
-        
     }
 
     private int[] removeOutHolderFromParaList(List<Object> outObjects, 

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java?view=diff&rev=529897&r1=529896&r2=529897
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java Wed Apr 18 00:26:04 2007
@@ -52,8 +52,10 @@
 import org.apache.header_test.types.TestHeader5ResponseBody;
 import org.apache.header_test.types.TestHeader6;
 import org.apache.header_test.types.TestHeader6Response;
+import org.apache.tests.type_test.all.SimpleAll;
+import org.apache.tests.type_test.choice.SimpleChoice;
+import org.apache.tests.type_test.sequence.SimpleStruct;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 
@@ -101,6 +103,7 @@
     } 
 
     @Test
+    
     public void testOutHeader() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
         assertNotNull(wsdl);
@@ -287,34 +290,27 @@
         }
     } 
     
+    
+
     @Test
-    @Ignore("test takes forever for what it does. Why?")
-    public void testHolderNull() {
+    public void testHolderOutIsTheFirstMessagePart() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
         assertNotNull(wsdl);
-        
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
         TestHeader proxy = service.getPort(portName, TestHeader.class);
-        proxy.testHeader2(null, null, null);
-        proxy.testHeader3(null, null);
-        proxy.testHeader5(null, null, null);
-        proxy.testHeaderPartBeforeBodyPart(null, null);
+        Holder<SimpleAll> simpleAll = new Holder<SimpleAll>();
+        SimpleAll sa = new SimpleAll();
+        sa.setVarAttrString("varAttrString");
+        sa.setVarInt(100);
+        sa.setVarString("varString");
+        simpleAll.value = sa;
+        SimpleChoice sc = new SimpleChoice();
+        sc.setVarString("scVarString");
+        SimpleStruct ss = proxy.sendReceiveAnyType(simpleAll, sc);
+        assertEquals(simpleAll.value.getVarString(), "scVarString");
+        assertEquals(ss.getVarInt(), 200);
+        assertEquals(ss.getVarAttrString(), "varAttrStringRet");
     }
-
-  // REVIST: This is not a valid WSDL according to WSI-BP V1.0
-  //     @Test
-  //     public void testHolderNotTheFirstMessagePart() throws Exception {
-  //         URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
-  //         assertNotNull(wsdl);
-  
-  //         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
-  //         assertNotNull(service);
-  //         TestHeader proxy = service.getPort(portName, TestHeader.class);
-  //         Holder<SimpleAll> simpleAll = new Holder<SimpleAll>();
-  //         simpleAll.value = new SimpleAll();
-  //         proxy.sendReceiveAnyType(simpleAll, new SimpleChoice());    
-  
-  //     }
    
 }

Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java?view=diff&rev=529897&r1=529896&r2=529897
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/TestHeaderImpl.java Wed Apr 18 00:26:04 2007
@@ -127,7 +127,14 @@
     }
 
     public SimpleStruct sendReceiveAnyType(Holder<SimpleAll> x, SimpleChoice y) {
-        return new SimpleStruct();
+        SimpleAll sa = new SimpleAll();
+        sa.setVarString(y.getVarString());
+        
+        SimpleStruct ss = new SimpleStruct();
+        ss.setVarAttrString(x.value.getVarAttrString() + "Ret");
+        ss.setVarInt(x.value.getVarInt() + 100);
+        x.value = sa;
+        return ss;
     }
 
 }

Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl?view=diff&rev=529897&r1=529896&r2=529897
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl (original)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader.wsdl Wed Apr 18 00:26:04 2007
@@ -225,13 +225,10 @@
                 message="tns:testHeaderPartBeforeBodyPartResponse"/>
         </wsdl:operation>
 
-	<!-- this is not a valid operation according to WSI-BP V1.0 R2210
-	     A unit test also commented out in HeaderClientServerTest in rt/frontend/jaxws
         <operation name="send_receive_any_type">
             <input name="send_receive_any_type_request" message="tns:AnyTypeRequest"/>
             <output name="send_receive_any_type_response" message="tns:AnyTypeResponse"/>
         </operation>
-	-->
     </wsdl:portType>
     <wsdl:binding name="TestHeader_SOAPBinding" type="tns:TestHeader">
         <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
@@ -300,7 +297,6 @@
                     part="inoutHeader" use="literal"/>
             </wsdl:output>
         </wsdl:operation>
-	<!-- this is not a valid operation according to WSI-BP V1.0 R2210
         <operation name="send_receive_any_type">
             <soap:operation soapAction="" style="document"/>
             <input>
@@ -310,7 +306,6 @@
                 <soap:body use="literal"/>
             </output>
         </operation>
-	-->
     </wsdl:binding>
     <wsdl:service name="SOAPHeaderService">
         <wsdl:port name="SoapHeaderPort" binding="tns:TestHeader_SOAPBinding">