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 2009/02/13 04:12:51 UTC

svn commit: r743965 - in /cxf/trunk: api/src/main/java/org/apache/cxf/io/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/core/src/main/java/org/apache/cxf/service/factory/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend...

Author: dkulp
Date: Fri Feb 13 03:12:50 2009
New Revision: 743965

URL: http://svn.apache.org/viewvc?rev=743965&view=rev
Log:
Update server side oneway operations to send response back sooner (PRE_LOGICAL phase)

Added:
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java   (with props)
Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/io/AbstractWrappedOutputStream.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ServiceInvokerInterceptor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/AbstractServiceFactoryBean.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
    cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
    cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
    cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
    cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/CountersClientServerTest.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/io/AbstractWrappedOutputStream.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/io/AbstractWrappedOutputStream.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/io/AbstractWrappedOutputStream.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/io/AbstractWrappedOutputStream.java Fri Feb 13 03:12:50 2009
@@ -42,7 +42,9 @@
             onFirstWrite();
             written = true;
         }
-        wrappedStream.write(b, off, len);
+        if (wrappedStream != null) {
+            wrappedStream.write(b, off, len);
+        }
     }
 
     protected void onFirstWrite() throws IOException {
@@ -59,7 +61,9 @@
             onFirstWrite();
             written = true;
         }
-        wrappedStream.write(b);
+        if (wrappedStream != null) {
+            wrappedStream.write(b);
+        }
     }
     
     @Override
@@ -71,7 +75,7 @@
 
     @Override
     public void flush() throws IOException {
-        if (written) {
+        if (written && wrappedStream != null) {
             wrappedStream.flush();
         }
     }

Added: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java?rev=743965&view=auto
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java (added)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java Fri Feb 13 03:12:50 2009
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.interceptor;
+
+import java.io.IOException;
+import java.util.concurrent.Executor;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.workqueue.WorkQueueManager;
+
+
+/**
+ * 
+ */
+public class OneWayProcessorInterceptor extends AbstractPhaseInterceptor<Message> {
+    public OneWayProcessorInterceptor() {
+        super(Phase.PRE_LOGICAL);
+    }
+    public OneWayProcessorInterceptor(String phase) {
+        super(phase);
+    }
+    
+    public void handleMessage(Message message) throws Fault {
+        
+        if (message.getExchange().isOneWay() 
+            && !isRequestor(message)
+            && message.get(OneWayProcessorInterceptor.class) == null
+            && message.getExchange().get(Executor.class) == null) { 
+            //one way on server side, fork the rest of this chain onto the
+            //workqueue, call the Outgoing chain directly.
+            
+            message.put(OneWayProcessorInterceptor.class, this);
+            final InterceptorChain chain = message.getInterceptorChain();
+            
+            try {
+                Message partial = createMessage(message.getExchange());
+                partial.setExchange(message.getExchange());
+                Conduit conduit = message.getExchange().getDestination()
+                    .getBackChannel(message, null, null);
+                conduit.prepare(partial);
+                conduit.close(partial);
+            } catch (IOException e) {
+                //IGNORE
+            }
+            
+            
+            chain.pause();
+            message.getExchange().get(Bus.class).getExtension(WorkQueueManager.class)
+                .getAutomaticWorkQueue().execute(new Runnable() {
+                    public void run() {
+                        chain.resume();
+                    }
+                });
+        }
+    }
+    
+    private static Message createMessage(Exchange exchange) {
+        Endpoint ep = exchange.get(Endpoint.class);
+        Message msg = null;
+        if (ep != null) {
+            msg = ep.getBinding().createMessage();
+        }
+        return msg;
+    }
+
+
+}

Propchange: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OneWayProcessorInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ServiceInvokerInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ServiceInvokerInterceptor.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ServiceInvokerInterceptor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ServiceInvokerInterceptor.java Fri Feb 13 03:12:50 2009
@@ -20,7 +20,9 @@
 package org.apache.cxf.interceptor;
 
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
+import java.util.concurrent.FutureTask;
 
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.message.Exchange;
@@ -37,7 +39,6 @@
  * @author Dan Diephouse
  */
 public class ServiceInvokerInterceptor extends AbstractPhaseInterceptor<Message> {
-   
     
     public ServiceInvokerInterceptor() {
         super(Phase.INVOKE);
@@ -89,7 +90,30 @@
             invocation.run();
         } else {
             exchange.put(Executor.class, executor);
-            executor.execute(invocation);
+            FutureTask<Object> o = new FutureTask<Object>(invocation, null);
+            synchronized (o) {
+                executor.execute(o);
+                if (!exchange.isOneWay()) {
+                    if (!o.isDone()) {
+                        try {
+                            o.wait();
+                        } catch (InterruptedException e) {
+                            //IGNORE
+                        }
+                    }
+                    try {
+                        o.get();
+                    } catch (InterruptedException e) {
+                        throw new Fault(e);
+                    } catch (ExecutionException e) {
+                        if (e.getCause() instanceof RuntimeException) {
+                            throw (RuntimeException)e.getCause();
+                        } else {
+                            throw new Fault(e.getCause());
+                        }
+                    }
+                }
+            }
         }
     }
     

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/AbstractServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/AbstractServiceFactoryBean.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/AbstractServiceFactoryBean.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/factory/AbstractServiceFactoryBean.java Fri Feb 13 03:12:50 2009
@@ -21,6 +21,7 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.interceptor.OneWayProcessorInterceptor;
 import org.apache.cxf.interceptor.OutgoingChainInterceptor;
 import org.apache.cxf.interceptor.ServiceInvokerInterceptor;
 import org.apache.cxf.service.Service;
@@ -35,6 +36,7 @@
     protected void initializeDefaultInterceptors() {
         service.getInInterceptors().add(new ServiceInvokerInterceptor());
         service.getInInterceptors().add(new OutgoingChainInterceptor());
+        service.getInInterceptors().add(new OneWayProcessorInterceptor());
     }
     
     protected void initializeDataBindings() {

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/FormEncodingProvider.java Fri Feb 13 03:12:50 2009
@@ -130,7 +130,8 @@
         }
     }
 
-    public long getSize(MultivaluedMap t, Class<?> type, Type genericType, Annotation[] annotations, 
+    public long getSize(MultivaluedMap<String, String> t, Class<?> type, 
+                        Type genericType, Annotation[] annotations, 
                         MediaType mediaType) {
         return -1;
     }
@@ -156,4 +157,5 @@
             }
         }
     }
+
 }

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java Fri Feb 13 03:12:50 2009
@@ -594,8 +594,7 @@
              
         
     }
-    
-    @SuppressWarnings("unchecked")
+
     private static Object processCookieParam(Message m, String cookieName, 
                               Class<?> pClass, Type genericType, String defaultValue) {
         List<String> values = new HttpHeadersImpl(m).getRequestHeader(HttpHeaders.COOKIE);

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java Fri Feb 13 03:12:50 2009
@@ -50,15 +50,16 @@
         Map<String, Object> handlerScopedStuff = removeHandlerProperties(ctx);
         
         WebServiceContextImpl.setMessageContext(ctx);
-        
-        List<Object> res = CastUtils.cast((List)super.invoke(exchange, serviceObject, m, params));
-        
-        addHandlerProperties(ctx, handlerScopedStuff);
-                
-        //update the webservice response context
-        updateWebServiceContext(exchange, ctx);
-        //clear the WebServiceContextImpl's ThreadLocal variable
-        WebServiceContextImpl.clear();
+        List<Object> res = null;
+        try {
+            res = CastUtils.cast((List)super.invoke(exchange, serviceObject, m, params));
+            addHandlerProperties(ctx, handlerScopedStuff);
+            //update the webservice response context
+            updateWebServiceContext(exchange, ctx);
+        } finally {
+            //clear the WebServiceContextImpl's ThreadLocal variable
+            WebServiceContextImpl.clear();
+        }
         return res;
     }
     

Modified: cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java (original)
+++ cxf/trunk/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java Fri Feb 13 03:12:50 2009
@@ -293,7 +293,6 @@
 
         try {    
             incomingObserver.onMessage(inMessage);
-            
             resp.flushBuffer();
             baseRequest.setHandled(true);
         } catch (SuspendedInvocationException ex) {

Modified: cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java (original)
+++ cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java Fri Feb 13 03:12:50 2009
@@ -740,6 +740,8 @@
                     EasyMock.expectLastCall();
                     response.addHeader(EasyMock.isA(String.class), EasyMock.isA(String.class));
                     EasyMock.expectLastCall().anyTimes();
+                    response.setContentLength(0);
+                    EasyMock.expectLastCall().anyTimes();
                     response.getOutputStream();
                     EasyMock.expectLastCall().andReturn(os);
                     response.getStatus();

Modified: cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
+++ cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Fri Feb 13 03:12:50 2009
@@ -80,6 +80,8 @@
     public static final String HTTP_CONFIG = "HTTP.CONFIG";
     public static final String PROTOCOL_HEADERS_CONTENT_TYPE = Message.CONTENT_TYPE.toLowerCase();
         
+    public static final String PARTIAL_RESPONSE = AbstractMultiplexDestination.class.getName()
+        + ".partial.response";
     private static final Logger LOG = LogUtils.getL7dLogger(AbstractHTTPDestination.class);
     
     private static final long serialVersionUID = 1L;
@@ -360,13 +362,18 @@
      * @param the decoupled target
      * @return true iff partial responses are supported
      */
-    protected boolean markPartialResponse(Message partialResponse,
+    protected final boolean markPartialResponse(Message partialResponse,
                                        EndpointReferenceType decoupledTarget) {
         // setup the outbound message to for 202 Accepted
         partialResponse.put(Message.RESPONSE_CODE, HttpURLConnection.HTTP_ACCEPTED);
         partialResponse.getExchange().put(EndpointReferenceType.class, decoupledTarget);
+        partialResponse.put(PARTIAL_RESPONSE, Boolean.TRUE);
         return true;
     }
+    
+    protected boolean isPartialResponse(Message m) {
+        return Boolean.TRUE.equals(m.get(PARTIAL_RESPONSE));
+    }
 
     private void initConfig() {
         PolicyEngine engine = bus.getExtension(PolicyEngine.class);
@@ -441,15 +448,21 @@
                     }
                 }
                 response.setStatus(status);
+            } else if (oneWay) {
+                response.setStatus(HttpURLConnection.HTTP_ACCEPTED);
             } else {
                 response.setStatus(HttpURLConnection.HTTP_OK);
             }
 
             copyResponseHeaders(outMessage, response);
-            responseStream = response.getOutputStream();
 
-            if (oneWay) {
+            
+            if (oneWay && !isPartialResponse(outMessage)) {
+                response.setContentLength(0);
                 response.flushBuffer();
+                response.getOutputStream().close();
+            } else {
+                responseStream = response.getOutputStream();                
             }
         } else if (null != responseObj) {
             String m = (new org.apache.cxf.common.i18n.Message("UNEXPECTED_RESPONSE_TYPE_MSG",
@@ -529,8 +542,10 @@
                     wrappedStream = responseStream;
                 }
             }
-            wrappedStream.close();
-            response.flushBuffer();
+            if (wrappedStream != null) {
+                wrappedStream.close();
+                response.flushBuffer();
+            }
         }
         
         public void flush() throws IOException {

Modified: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Fri Feb 13 03:12:50 2009
@@ -40,6 +40,7 @@
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.OneWayProcessorInterceptor;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
@@ -89,6 +90,7 @@
      */
     public MAPAggregator() {
         super(Phase.PRE_LOGICAL);
+        addBefore(OneWayProcessorInterceptor.class.getName());
     }
     
     /**

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java Fri Feb 13 03:12:50 2009
@@ -178,7 +178,7 @@
         while (it.hasNext()) {
             p = it.next();
             location.setPhase(p.getName());
-            if (Phase.INVOKE.equals(p.getName())) {
+            if (Phase.PRE_LOGICAL.equals(p.getName())) {
                 break;
             }             
             testFail(location);
@@ -226,6 +226,9 @@
         do {  
             location.setPhase(p.getName());
             if (Phase.INVOKE.equals(p.getName())) {
+                //faults from the PRE_LOGICAL and later phases won't make 
+                //it back to the client, the 200/202 response has already 
+                //been returned.  The server has accepted the message
                 break;
             }             
             testFail(location, true);
@@ -252,11 +255,11 @@
         try {
             greeter.greetMeOneWay("oneway");
             if (expectOnewayFault) {
-                fail("Oneway operation unexpectedly succeded.");
+                fail("Oneway operation unexpectedly succeded for phase " + location.getPhase());
             }
         } catch (WebServiceException ex) {
             if (!expectOnewayFault) {
-                fail("Oeway operation unexpectedly failed.");
+                fail("Oneway operation unexpectedly failed.");
             }
             Throwable cause = ex.getCause();
             Fault f = (Fault)cause;

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java Fri Feb 13 03:12:50 2009
@@ -275,6 +275,10 @@
         assertEquals("Hello", echoMsg);
     }
     private void runDocLitTest(DocLitWrappedCodeFirstService port) throws Exception {
+        long start = System.currentTimeMillis();
+        port.doOneWay();
+        assertTrue((System.currentTimeMillis() - start) < 500);
+        
         Set<Foo> fooSet = port.getFooSet();
         assertEquals(2, fooSet.size());
         

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java Fri Feb 13 03:12:50 2009
@@ -22,6 +22,7 @@
 import java.util.Set;
 import java.util.Vector;
 
+import javax.jws.Oneway;
 import javax.jws.WebMethod;
 import javax.jws.WebParam;
 import javax.jws.WebResult;
@@ -45,6 +46,10 @@
                        "org.apache.cxf.feature.FastInfosetFeature" })
 public interface DocLitWrappedCodeFirstService {
 
+    @Oneway
+    @WebMethod
+    void doOneWay();
+    
     @WebMethod
     String[] arrayOutput();
 

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java Fri Feb 13 03:12:50 2009
@@ -196,4 +196,13 @@
     public boolean listObjectIn(Holder<List<Foo[]>> foos) {
         return false;
     }
+
+    public void doOneWay() {
+        try {
+            Thread.sleep(2000);
+        } catch (InterruptedException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
 }

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/CountersClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/CountersClientServerTest.java?rev=743965&r1=743964&r2=743965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/CountersClientServerTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/management/CountersClientServerTest.java Fri Feb 13 03:12:50 2009
@@ -141,9 +141,23 @@
         }
         
         greeter.greetMeOneWay("hello");
+        for (int count = 0; count < 10; count++) {
+            if (6 != cr.getCounters().size()) {
+                Thread.sleep(100);
+            } else {
+                break;
+            }
+        }
         assertEquals("The Counters are not create yet", 6, cr.getCounters().size());
+        for (int count = 0; count < 10; count++) {
+            if (10 > mbs.queryNames(name, null).size()) {
+                Thread.sleep(100);
+            } else {
+                break;
+            }
+        }
         counterNames = mbs.queryNames(name, null);
-        assertEquals("The Counters are not export to JMX ", 6 + 3, counterNames.size());
+        assertEquals("The Counters are not export to JMX " + counterNames, 6 + 4, counterNames.size());
         
         ObjectName greetMeOneWayCounter =  new ObjectName(
             ManagementConstants.DEFAULT_DOMAIN_NAME + ":operation=\"greetMeOneWay\",*");