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 2012/07/11 16:29:09 UTC

svn commit: r1360192 - in /cxf/branches/2.6.x-fixes: rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/ systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/

Author: dkulp
Date: Wed Jul 11 14:29:09 2012
New Revision: 1360192

URL: http://svn.apache.org/viewvc?rev=1360192&view=rev
Log:
Merged revisions 1357091 via  git cherry-pick from
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1357091 | ema | 2012-07-04 02:03:57 -0400 (Wed, 04 Jul 2012) | 2 lines

  [CXF-4405]:Fix OneWay faultTo request is not correctly transmitted to the specified address

........

Modified:
    cxf/branches/2.6.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java
    cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/FaultToEndpointServer.java
    cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAFaultToClientServerTest.java

Modified: cxf/branches/2.6.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java?rev=1360192&r1=1360191&r2=1360192&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java (original)
+++ cxf/branches/2.6.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java Wed Jul 11 14:29:09 2012
@@ -136,6 +136,10 @@ final class InternalContextUtils {
                             in.cacheInput();
                         }
                         inMessage.getInterceptorChain().reset();
+                        //cleanup pathinfo
+                        if (inMessage.get(Message.PATH_INFO) != null) {
+                            inMessage.remove(Message.PATH_INFO);
+                        }
                         inMessage.getInterceptorChain().doIntercept(inMessage);
 
                     }
@@ -246,7 +250,10 @@ final class InternalContextUtils {
                         // has been sent (i.e. to a oneway, or a partial response
                         // to a decoupled twoway)
                         
-        
+                        //cleanup pathinfo
+                        if (inMessage.get(Message.PATH_INFO) != null) {
+                            inMessage.remove(Message.PATH_INFO);
+                        }
                         // pause dispatch on current thread ...
                         inMessage.getInterceptorChain().pause();
 

Modified: cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/FaultToEndpointServer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/FaultToEndpointServer.java?rev=1360192&r1=1360191&r2=1360192&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/FaultToEndpointServer.java (original)
+++ cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/FaultToEndpointServer.java Wed Jul 11 14:29:09 2012
@@ -19,23 +19,39 @@
 package org.apache.cxf.systest.ws.addr_feature;
 
 import java.io.IOException;
+import java.util.concurrent.Future;
 
+import javax.jws.WebService;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Endpoint;
+import javax.xml.ws.Response;
+import javax.xml.ws.soap.Addressing;
 
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 import org.apache.cxf.ws.addressing.WSAddressingFeature;
 import org.apache.cxf.ws.addressing.soap.DecoupledFaultHandler;
+import org.apache.hello_world_soap_http.BadRecordLitFault;
+import org.apache.hello_world_soap_http.Greeter;
+import org.apache.hello_world_soap_http.NoSuchCodeLitFault;
+import org.apache.hello_world_soap_http.types.BareDocumentResponse;
+import org.apache.hello_world_soap_http.types.GreetMeLaterResponse;
+import org.apache.hello_world_soap_http.types.GreetMeResponse;
+import org.apache.hello_world_soap_http.types.GreetMeSometimeResponse;
+import org.apache.hello_world_soap_http.types.SayHiResponse;
+import org.apache.hello_world_soap_http.types.TestDocLitFaultResponse;
+import org.apache.hello_world_soap_http.types.TestNillableResponse;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.AbstractHandler;
 
-public class FaultToEndpointServer extends AbstractBusTestServerBase {
+public class FaultToEndpointServer extends AbstractBusTestServerBase {  
     static final String FAULT_PORT = allocatePort(FaultToEndpointServer.class);
     static final String PORT = allocatePort(FaultToEndpointServer.class, 1);
+   
     EndpointImpl ep;
     private org.eclipse.jetty.server.Server faultToserver;
     protected void run()  { 
@@ -46,16 +62,23 @@ public class FaultToEndpointServer exten
         } catch (Exception e) {
             e.printStackTrace();
         }
+
         
         setBus(BusFactory.getDefaultBus());
         Object implementor = new AddNumberImpl();
         String address = "http://localhost:" + PORT + "/jaxws/add";
-        //Endpoint.publish(address, implementor);
 
         ep = (EndpointImpl) Endpoint.create(implementor);
         ep.getInInterceptors().add(new DecoupledFaultHandler());
         ep.getFeatures().add(new WSAddressingFeature());
-        ep.publish(address);     
+        ep.publish(address); 
+        
+        Object implementor2 = new GreeterImpl();
+        String address2 = "http://localhost:" + PORT + "/jaxws/greeter";
+        ep = (EndpointImpl) Endpoint.create(implementor2);
+        ep.getInInterceptors().add(new DecoupledFaultHandler());
+        ep.getFeatures().add(new WSAddressingFeature());
+        ep.publish(address2);
     }
     
     public void tearDown() throws Exception {
@@ -80,15 +103,135 @@ public class FaultToEndpointServer exten
             System.out.println("done!");
         }
     }
+       
     
-    class HelloHandler extends AbstractHandler {
+
+
+    public static class HelloHandler extends AbstractHandler {
+        private static String faultRequestPath;
+
         public void handle(String target, Request baseRequest, HttpServletRequest request,
                            HttpServletResponse response) throws IOException, ServletException {
             response.setContentType("text/html;charset=utf-8");
-            response.setStatus(HttpServletResponse.SC_OK);
+            faultRequestPath = request.getPathInfo();
+            if ("/faultTo".equals(faultRequestPath)) {
+                response.setStatus(HttpServletResponse.SC_OK);
+            } else {
+                response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+            }
             baseRequest.setHandled(true);
             response.getWriter().println("Received");
         }
+
+        public static String getFaultRequestPath() {
+            return faultRequestPath;
+        }
+
+    }
+    
+    @WebService(serviceName = "SOAPServiceAddressing", 
+                portName = "SoapPort", 
+                endpointInterface = "org.apache.hello_world_soap_http.Greeter", 
+                targetNamespace = "http://apache.org/hello_world_soap_http",
+                wsdlLocation = "testutils/hello_world.wsdl")
+    @Addressing
+    public class GreeterImpl implements Greeter {
+
+        public String greetMe(String me) {
+            return "Hello " + me;
+        }
+
+        public String greetMeLater(long delay) {
+            if (delay > 0) {
+                try {
+                    Thread.sleep(delay);
+                } catch (InterruptedException ex) {
+                    // ignore
+                }
+            }
+            return "Hello, finally";
+        }
+
+        public void greetMeOneWay(String requestType) {
+            throw new RuntimeException("intended error"); 
+        }
+
+        public String sayHi() {
+            return null;
+        }
+        
+        public void testDocLitFault(String faultType) throws BadRecordLitFault, NoSuchCodeLitFault {
+        }
+
+        public BareDocumentResponse testDocLitBare(String in) {
+            return null;
+        }
+
+        public String greetMeSometime(String me) {
+            return null;
+        }
+        
+        public Future<?>  greetMeSometimeAsync(String requestType, 
+                                               AsyncHandler<GreetMeSometimeResponse> asyncHandler) { 
+            return null; 
+        }
+        
+        public Response<GreetMeSometimeResponse> greetMeSometimeAsync(String requestType) { 
+            return null; 
+        }
+        
+        public Response<TestDocLitFaultResponse> testDocLitFaultAsync(String faultType) {  
+            return null; 
+        }
+        
+        public Response<BareDocumentResponse> testDocLitBareAsync(String bare) {
+            return null;
+        }
+        
+        public Future<?> greetMeAsync(String requestType, AsyncHandler<GreetMeResponse> asyncHandler) { 
+            return null; 
+        }
+        
+        public Response<GreetMeResponse> greetMeAsync(String requestType) { 
+            return null; 
+        }
+        
+        public Future<?> greetMeLaterAsync(long requestType, AsyncHandler<GreetMeLaterResponse> asyncHandler) { 
+            return null; 
+        }
+        
+        public Response<GreetMeLaterResponse> greetMeLaterAsync(long requestType) { 
+            return null; 
+        }
+        
+        public Future<?> sayHiAsync(AsyncHandler<SayHiResponse> asyncHandler) { 
+            return null; 
+        }
+        
+        public Response<SayHiResponse> sayHiAsync() { 
+            return null; 
+        }
+
+        public String testNillable(String nillElem, int intElem) {
+            return null;
+        }
+
+        public Response<TestNillableResponse> testNillableAsync(String nillElem,
+                                                                int intElem) {
+            return null;
+        }
+        
+        public Future<?> testNillableAsync(String nillElem, 
+                                           int intElem,
+                                           AsyncHandler<TestNillableResponse> asyncHandler) {
+            return null;
+        }
+
+        public Future<?> testDocLitFaultAsync(String faultType,
+                                              AsyncHandler<TestDocLitFaultResponse> asyncHandler) {
+            return null;
+        }
+        
     }
 }   
 

Modified: cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAFaultToClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAFaultToClientServerTest.java?rev=1360192&r1=1360191&r2=1360192&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAFaultToClientServerTest.java (original)
+++ cxf/branches/2.6.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_feature/WSAFaultToClientServerTest.java Wed Jul 11 14:29:09 2012
@@ -27,19 +27,20 @@ import javax.xml.ws.BindingProvider;
 import javax.xml.ws.soap.AddressingFeature;
 
 import org.apache.cxf.systest.ws.AbstractWSATestBase;
+import org.apache.cxf.systest.ws.addr_feature.FaultToEndpointServer.HelloHandler;
 import org.apache.cxf.ws.addressing.AddressingProperties;
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.addressing.JAXWSAConstants;
 import org.apache.cxf.ws.addressing.impl.AddressingPropertiesImpl;
+import org.apache.hello_world_soap_http.Greeter;
+import org.apache.hello_world_soap_http.SOAPService;
 
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class WSAFaultToClientServerTest  extends AbstractWSATestBase {
-    private final QName serviceName = new QName("http://apache.org/cxf/systest/ws/addr_feature/",
-                                                "AddNumbersService");
 
     @Before
     public void setUp() throws Exception {
@@ -50,16 +51,47 @@ public class WSAFaultToClientServerTest 
     public static void startServers() throws Exception {
         assertTrue("FaultTo server did not launch correctly", launchServer(FaultToEndpointServer.class, true));
     }
+    
+    @Test
+    public void testOneWayFaultTo() throws Exception {
+        URL wsdl = getClass().getResource("/wsdl/hello_world.wsdl");
+        QName serviceName = new QName("http://apache.org/hello_world_soap_http", "SOAPServiceAddressing");
+
+        Greeter greeter = new SOAPService(wsdl, serviceName).getPort(Greeter.class, new AddressingFeature());
+        EndpointReferenceType faultTo = new EndpointReferenceType();
+        AddressingProperties addrProperties = new AddressingPropertiesImpl();
+        AttributedURIType epr = new AttributedURIType();
+        String faultToAddress = "http://localhost:" + FaultToEndpointServer.FAULT_PORT  + "/faultTo";
+        epr.setValue(faultToAddress);
+        faultTo.setAddress(epr);
+        addrProperties.setFaultTo(faultTo);
+        
+        BindingProvider provider = (BindingProvider) greeter;
+        Map<String, Object> requestContext = provider.getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
+                           "http://localhost:" + FaultToEndpointServer.PORT + "/jaxws/greeter");
+        requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, addrProperties);
 
+        greeter.greetMeOneWay("test");
+        //wait for the fault request
+        int i = 2;
+        while (HelloHandler.getFaultRequestPath() == null && i > 0) {
+            Thread.sleep(500);
+            i--;
+        }
+        assertTrue("FaultTo request fpath isn't expected", 
+                   "/faultTo".equals(HelloHandler.getFaultRequestPath()));
+    }
+    
     @Test
-    public void testJaxwsWsaFeature() throws Exception {
+    public void testTwoWayFaultTo() throws Exception {
         ByteArrayOutputStream input = setupInLogging();
-        AddNumbersPortType port = getPort();
+        AddNumbersPortType port = getTwoWayPort();
 
         EndpointReferenceType faultTo = new EndpointReferenceType();
         AddressingProperties addrProperties = new AddressingPropertiesImpl();
         AttributedURIType epr = new AttributedURIType();
-        epr.setValue("http://localhost:" + FaultToEndpointServer.FAULT_PORT);
+        epr.setValue("http://localhost:" + FaultToEndpointServer.FAULT_PORT + "/faultTo");
         faultTo.setAddress(epr);
         addrProperties.setFaultTo(faultTo);
         
@@ -85,14 +117,16 @@ public class WSAFaultToClientServerTest 
                    new String(input.toByteArray()).indexOf("Negative numbers cant be added") > -1);
     }
      
-    private AddNumbersPortType getPort() throws Exception {
+    private AddNumbersPortType getTwoWayPort() throws Exception {
         URL wsdl = getClass().getResource("/wsdl_systest_wsspec/add_numbers.wsdl");
         assertNotNull("WSDL is null", wsdl);
-
+        QName serviceName = new QName("http://apache.org/cxf/systest/ws/addr_feature/", "AddNumbersService");
         AddNumbersService service = new AddNumbersService(wsdl, serviceName);
         assertNotNull("Service is null ", service);
         AddNumbersPortType port = service.getAddNumbersPort(new AddressingFeature());
         //updateAddressPort(port, PORT);
         return port;
     }
+    
+    
 }