Author: dkulp
Date: Wed May 13 17:49:13 2009
New Revision: 774446

URL: http://svn.apache.org/viewvc?rev=774446&view=rev
Log:
Make sure features are applied for dispatch clients.
Allow specifying operation for displatch clients so policies and actions and 
stuff on the operation in the wsdl can be used.
Add test for ws-addressing for dispatch clients

Modified:
    
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/ServiceImpl.java
    
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
    
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_wsdl/WSAPureWsdlTest.java

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=774446&r1=774445&r2=774446&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
 Wed May 13 17:49:13 2009
@@ -38,6 +38,7 @@
 import javax.xml.ws.Response;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.handler.MessageContext;
 import javax.xml.ws.handler.MessageContext.Scope;
 import javax.xml.ws.http.HTTPBinding;
 import javax.xml.ws.http.HTTPException;
@@ -248,8 +249,12 @@
                     
client.getRequestContext().put(AttachmentOutInterceptor.WRITE_ATTACHMENTS, 
Boolean.TRUE);
                 }
             }
-            Object ret[] = client.invokeWrapped(new 
QName("http://cxf.apache.org/jaxws/dispatch";,
-                                                          "Invoke" + (isOneWay 
? "OneWay" : "")),
+            QName opName = 
(QName)getRequestContext().get(MessageContext.WSDL_OPERATION);
+            if (opName == null) {
+                opName = new QName(DISPATCH_NS,
+                                   isOneWay ? INVOKE_ONEWAY_NAME : 
INVOKE_NAME);
+            }
+            Object ret[] = client.invokeWrapped(opName,
                                                 obj);
             if (isOneWay) {
                 return null;
@@ -269,10 +274,14 @@
              
         Response<T> ret = new JaxwsResponseCallback<T>(callback);
         try {
+            QName opName = 
(QName)getRequestContext().get(MessageContext.WSDL_OPERATION);
+            if (opName == null) {
+                opName = new QName(DISPATCH_NS, INVOKE_NAME);
+            }
+
             client.invokeWrapped(callback, 
-                                 new 
QName("http://cxf.apache.org/jaxws/dispatch";,
-                                       "Invoke"),
-                                       obj);
+                                 opName,
+                                 obj);
             
             return ret;
         } catch (Exception ex) {

Modified: 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?rev=774446&r1=774445&r2=774446&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java 
(original)
+++ 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java 
Wed May 13 17:49:13 2009
@@ -219,7 +219,7 @@
         portInfos.put(portName, portInfo);
     }
 
-    private Endpoint getJaxwsEndpoint(QName portName, 
AbstractServiceFactoryBean sf, 
+    private JaxWsClientEndpointImpl getJaxwsEndpoint(QName portName, 
AbstractServiceFactoryBean sf, 
                                       WebServiceFeature...features) {
         Service service = sf.getService();
         EndpointInfo ei = null;
@@ -584,11 +584,15 @@
         } catch (ServiceConstructionException e) {
             throw new WebServiceException(e);
         }
-        Endpoint endpoint = getJaxwsEndpoint(portName, sf, features);
+        JaxWsEndpointImpl endpoint = getJaxwsEndpoint(portName, sf, features);
         Client client = new ClientImpl(getBus(), endpoint, 
clientFac.getConduitSelector());
         for (AbstractFeature af : clientFac.getFeatures()) {
             af.initialize(client, bus);
         }
+        for (AbstractFeature af : endpoint.getFeatures()) {
+            af.initialize(client, bus);
+        }
+        
         if (executor != null) {
             client.getEndpoint().setExecutor(executor);
         }

Modified: 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?rev=774446&r1=774445&r2=774446&view=diff
==============================================================================
--- 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
 (original)
+++ 
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
 Wed May 13 17:49:13 2009
@@ -187,7 +187,7 @@
                 || addressingRequired(portExtensors)) {
                 feature.setAddressingRequired(true);
             }
-            addAddressingFeature(new WSAddressingFeature());
+            addAddressingFeature(feature);
         }
     }
     
@@ -280,6 +280,10 @@
             removeAddressingFeature();
         }
     }
+    
+    public List<AbstractFeature> getFeatures() {
+        return features;
+    }
 
     private WSAddressingFeature getWSAddressingFeature() {
         if (features == null) {

Modified: 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_wsdl/WSAPureWsdlTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_wsdl/WSAPureWsdlTest.java?rev=774446&r1=774445&r2=774446&view=diff
==============================================================================
--- 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_wsdl/WSAPureWsdlTest.java
 (original)
+++ 
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_wsdl/WSAPureWsdlTest.java
 Wed May 13 17:49:13 2009
@@ -20,9 +20,15 @@
 package org.apache.cxf.systest.ws.addr_wsdl;
 
 import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
 import java.net.URL;
 import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
 import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service.Mode;
+import javax.xml.ws.handler.MessageContext;
 
 import org.apache.cxf.systest.ws.AbstractWSATestBase;
 import org.apache.cxf.systest.ws.addr_feature.AddNumbersPortType;
@@ -65,6 +71,59 @@
         assertTrue(output.toString().indexOf(expectedOut) != -1);
         assertTrue(input.toString().indexOf(expectedIn) != -1);
     }
+    @Test
+    public void testBasicDispatchInvocation() throws Exception {
+        String req = "<addNumbers 
xmlns=\"http://apache.org/cxf/systest/ws/addr_feature/\";>"
+            + "<number1>1</number1><number2>2</number2></addNumbers>";
+        String base = 
"http://apache.org/cxf/systest/ws/addr_feature/AddNumbersPortType/";;
+        String expectedOut = base + "addNumbersRequest";
+        String expectedIn = base + "addNumbersResponse</Action>";
+
+        
+        ByteArrayOutputStream input = setupInLogging();
+        ByteArrayOutputStream output = setupOutLogging();
+        
+        URL wsdl = getClass().getResource("/wsdl_systest/add_numbers.wsdl");
+        assertNotNull("WSDL is null", wsdl);
+        AddNumbersService service = new AddNumbersService(wsdl, serviceName);
+
+
+        Dispatch<Source> disp = 
service.createDispatch(AddNumbersService.AddNumbersPort,
+                                                       Source.class, 
Mode.PAYLOAD);
+
+        
disp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
+                                     "http://localhost:9094/jaxws/add";);
+
+        //manually set the action
+        disp.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY,
+                                     expectedOut);
+        disp.invoke(new StreamSource(new StringReader(req)));
+        
+        assertTrue(output.toString().indexOf(expectedOut) != -1);
+        assertTrue(input.toString().indexOf(expectedIn) != -1);
+        
+
+        output.reset();
+        input.reset();
+        
+        disp = service.createDispatch(AddNumbersService.AddNumbersPort,
+                                      Source.class, Mode.PAYLOAD);
+
+        
disp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
+                                     "http://localhost:9094/jaxws/add";);
+        
+        //set the operation name so action can be pulled from the wsdl
+        disp.getRequestContext().put(MessageContext.WSDL_OPERATION, 
+                                     new 
QName("http://apache.org/cxf/systest/ws/addr_feature/";,
+                                               "addNumbers"));
+        
+        disp.invoke(new StreamSource(new StringReader(req)));
+        
+        assertTrue(output.toString().indexOf(expectedOut) != -1);
+        assertTrue(input.toString().indexOf(expectedIn) != -1);
+
+        
+    }
 
     private AddNumbersPortType getPort() {
         URL wsdl = getClass().getResource("/wsdl_systest/add_numbers.wsdl");


Reply via email to