You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2006/10/28 04:30:51 UTC

svn commit: r468617 - in /incubator/cxf/trunk/rt/frontend/jaxws/src: main/java/org/apache/cxf/jaxws/DispatchImpl.java main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java test/java/org/apache/cxf/jaxws/JaxWsClientTest.java

Author: ningjiang
Date: Fri Oct 27 19:30:50 2006
New Revision: 468617

URL: http://svn.apache.org/viewvc?view=rev&rev=468617
Log:
put endpoint address to the requestContext  

Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java?view=diff&rev=468617&r1=468616&r2=468617
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java Fri Oct 27 19:30:50 2006
@@ -32,6 +32,7 @@
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.BindingProvider;
 import javax.xml.ws.Dispatch;
 import javax.xml.ws.Response;
 import javax.xml.ws.Service;
@@ -68,13 +69,13 @@
 
     private Endpoint endpoint;
 
-    DispatchImpl(Bus b, Service.Mode m, Class<T> clazz, Executor e, Endpoint ep) {
+    DispatchImpl(Bus b, Service.Mode m, Class<T> clazz, Executor e, Endpoint ep) {        
         bus = b;
         cl = clazz;
         executor = e;
         mode = m;
-
         endpoint = ep;
+        setupEndpointAddressContext();
     }
 
     DispatchImpl(Bus b, Service.Mode m, JAXBContext ctx, Class<T> clazz, Executor e, Endpoint ep) {
@@ -83,10 +84,19 @@
         context = ctx;
         cl = clazz;
         mode = m;
-
         endpoint = ep;
+        setupEndpointAddressContext();
     }
 
+    private void setupEndpointAddressContext() {
+        //NOTE for jms transport the address would be null
+        if (null != endpoint
+            && null != endpoint.getEndpointInfo().getAddress()) {
+            Map<String, Object> requestContext = this.getRequestContext();
+            requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                           endpoint.getEndpointInfo().getAddress());
+        }    
+    }
     public T invoke(T obj) {
         return invoke(obj, false);
     }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java?view=diff&rev=468617&r1=468616&r2=468617
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java Fri Oct 27 19:30:50 2006
@@ -57,6 +57,17 @@
         super(b);
         endpoint = c.getEndpoint();
         client = c;
+        setupEndpointAddressContext();
+    }
+    
+    private void setupEndpointAddressContext() {
+        //NOTE for jms transport the address would be null
+        if (null != endpoint 
+            && null != endpoint.getEndpointInfo().getAddress()) {
+            Map<String, Object> requestContext = this.getRequestContext();
+            requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
+                           endpoint.getEndpointInfo().getAddress());
+        }    
     }
 
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java?view=diff&rev=468617&r1=468616&r2=468617
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/JaxWsClientTest.java Fri Oct 27 19:30:50 2006
@@ -22,10 +22,14 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 import java.net.URL;
+import java.util.Map;
 import java.util.ResourceBundle;
 
 import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
 
 import org.apache.cxf.endpoint.ClientImpl;
 import org.apache.cxf.interceptor.Fault;
@@ -43,18 +47,23 @@
 import org.apache.cxf.transport.Destination;
 import org.apache.cxf.transport.MessageObserver;
 import org.apache.hello_world_soap_http.BadRecordLitFault;
+import org.apache.hello_world_soap_http.Greeter;
 import org.apache.hello_world_soap_http.GreeterImpl;
 
 public class JaxWsClientTest extends AbstractJaxWsTest {
 
     static String responseMessage;
-
+    private final QName serviceName = new QName("http://apache.org/hello_world_soap_http",
+                    "SOAPService");    
+    private final QName portName = new QName("http://apache.org/hello_world_soap_http",
+                    "SoapPort");
+    private final String address = "http://localhost:9000/SoapContext/SoapPort";
     @Override
     public void setUp() throws Exception {
         super.setUp();
 
         EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/soap/http");
-        ei.setAddress("http://localhost:9000/SoapContext/SoapPort");
+        ei.setAddress(address);
 
         Destination d = localTransport.getDestination(ei);
         d.setMessageObserver(new EchoObserver());
@@ -64,12 +73,32 @@
         javax.xml.ws.Service s = javax.xml.ws.Service
             .create(new QName("http://apache.org/hello_world_soap_http", "SoapPort"));
         assertNotNull(s);
-
+        
         try {
             s = javax.xml.ws.Service.create(new URL("file:/does/not/exist.wsdl"),
                                             new QName("http://apache.org/hello_world_soap_http", "SoapPort"));
         } catch (ServiceConstructionException sce) {
             // ignore, this is expected
+        }
+    }
+    
+    public void testRequestContext() throws Exception {
+        javax.xml.ws.Service s = javax.xml.ws.Service
+        .create(serviceName);
+        Greeter greeter = s.getPort(portName, Greeter.class);
+        InvocationHandler handler  = Proxy.getInvocationHandler(greeter);
+        BindingProvider  bp = null;
+        
+        if (handler instanceof BindingProvider) {
+            bp = (BindingProvider)handler;
+            //System.out.println(bp.toString());
+            Map<String, Object> requestContext = bp.getRequestContext();
+            String reqAddr = 
+                (String)requestContext.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
+            assertEquals("the address get from requestContext is not equal",
+                         reqAddr, address);
+        } else {
+            fail("can't get the requset context");
         }
     }