You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2006/12/20 09:07:59 UTC

svn commit: r488948 [2/3] - in /incubator/cxf/trunk: ./ api/src/main/java/org/apache/cxf/io/ api/src/main/java/org/apache/cxf/phase/ api/src/main/java/org/apache/cxf/service/model/ buildtools/src/main/resources/ integration/jca/src/main/java/org/apache...

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JAXWSMethodInvoker.java Wed Dec 20 00:07:54 2006
@@ -20,19 +20,10 @@
 package org.apache.cxf.jaxws;
 
 import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.TreeSet;
 
-import javax.xml.ws.Holder;
 import javax.xml.ws.handler.MessageContext;
 
-import org.apache.cxf.binding.soap.model.SoapHeaderInfo;
 import org.apache.cxf.common.util.factory.Factory;
 import org.apache.cxf.jaxws.context.WebServiceContextImpl;
 import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
@@ -40,8 +31,6 @@
 import org.apache.cxf.service.invoker.ApplicationScopePolicy;
 import org.apache.cxf.service.invoker.FactoryInvoker;
 import org.apache.cxf.service.invoker.ScopePolicy;
-import org.apache.cxf.service.model.BindingMessageInfo;
-import org.apache.cxf.service.model.BindingOperationInfo;
 
 public class JAXWSMethodInvoker extends FactoryInvoker {
 
@@ -66,106 +55,15 @@
 
     @SuppressWarnings("unchecked")
     protected Object invoke(Exchange exchange, final Object serviceObject, Method m, List<Object> params) {
-        BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);
-        List<Object> orderedParams = params;
-        if (bop != null && bop.getInput() != null) {
-            orderedParams = getOrderedParamList(params, bop.getInput());
-        }
-        checkHolder(m, orderedParams, exchange);
         // set up the webservice request context 
         MessageContext ctx = 
             ContextPropertiesMapping.createWebServiceContext(exchange);
         WebServiceContextImpl.setMessageContext(ctx);
         
-        List<Object> res = (List<Object>) super.invoke(exchange, serviceObject,
-            m, orderedParams);
-        if (bop != null && bop.getOutput() != null) {
-            getOrderedReturnList(res, orderedParams, bop.getOutput());
-        } else {
-            for (Object o : orderedParams) {
-                if (o instanceof Holder) {
-                    res.add(((Holder) o).value);
-                }
-            }
-        }
+        List<Object> res = (List<Object>) super.invoke(exchange, serviceObject, m, params);
+        
         //update the webservice response context
         ContextPropertiesMapping.updateWebServiceContext(exchange, ctx);
         return res;
     }
-
-    @SuppressWarnings("unchecked")
-    private void checkHolder(Method method, List<Object> params, Exchange exchange) {
-        if (method != null) {
-
-            Type[] para = method.getGenericParameterTypes();
-            for (int i = 0; i < para.length; i++) {
-                if (para[i] instanceof ParameterizedType) {
-                    ParameterizedType paramType = (ParameterizedType)para[i];
-                    if (((Class)paramType.getRawType()).getName().equals("javax.xml.ws.Holder")) {
-                        if (i >= params.size()) {
-                            params.add(new Holder());
-                        } else {
-                            params.set(i, new Holder(params.get(i)));
-                        }
-                    }
-                }
-            }
-        }
-    }
-    
-    private List<Object> getOrderedParamList(List<Object> params, BindingMessageInfo bmi) {
-        List<SoapHeaderInfo> headers = bmi.getExtensors(SoapHeaderInfo.class);
-        if (headers == null || headers.isEmpty()) {
-            return params;
-        }
-        List<Object> orderedParams = new ArrayList<Object>();
-        
-        // Add non-header params to the list first.
-        int headerIdx = params.size() - headers.size();
-        orderedParams.addAll(params.subList(0, headerIdx));
-        
-        Map<Integer, Object> headerParams = new TreeMap<Integer, Object>();
-        for (SoapHeaderInfo header : headers) {
-            headerParams.put(header.getSequence(), params.get(headerIdx));
-            headerIdx++;
-        }
-        // Insert the header params according to their wsdl message order.
-        for (Integer i : headerParams.keySet()) {
-            if (i.intValue() <= orderedParams.size()) {
-                orderedParams.add(i.intValue(), headerParams.get(i));
-            } else {
-                orderedParams.add(headerParams.get(i));
-            }
-        }
-
-        return orderedParams;
-    }
-
-    private void getOrderedReturnList(List<Object> res, List<Object> params, BindingMessageInfo bmi) {
-        List<SoapHeaderInfo> headers = bmi.getExtensors(SoapHeaderInfo.class);
-        int returnIdx = 0;
-        if (headers != null && !headers.isEmpty()) {
-            Collection<Integer> headerIndices = new TreeSet<Integer>();
-            for (SoapHeaderInfo header : headers) {
-                headerIndices.add(header.getSequence());
-            }
-            // XXX - Does this assume that the header parts in the IN message
-            // have the same order as in the out message?
-            for (Integer i : headerIndices) {
-                if (i.intValue() <= returnIdx && params.get(i) instanceof Holder) {
-                    res.add(i.intValue(), ((Holder) params.get(i.intValue())).value);
-                    returnIdx++;
-                } else {
-                    break;
-                }
-            }
-        }
-        for (int i = returnIdx; i < params.size(); i++) {
-            Object o = params.get(i);
-            if (o instanceof Holder) {
-                res.add(((Holder) o).value);
-            }
-        }
-    }
-
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientFactoryBean.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -18,8 +18,8 @@
  */
 package org.apache.cxf.jaxws;
 
+import org.apache.cxf.frontend.ClientFactoryBean;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
-import org.apache.cxf.service.factory.ClientFactoryBean;
 
 /**
  * Bean to help easily create Client endpoints for JAX-WS.

Copied: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (from r486881, 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/JaxWsClientProxy.java?view=diff&rev=488948&p1=incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointInvocationHandler.java&r1=486881&p2=incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java&r2=488948
==============================================================================
--- 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/JaxWsClientProxy.java Wed Dec 20 00:07:54 2006
@@ -21,60 +21,62 @@
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.FutureTask;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.logging.Logger;
 
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Binding;
 import javax.xml.ws.BindingProvider;
-import javax.xml.ws.Holder;
 import javax.xml.ws.Response;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.handler.MessageContext;
 
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.frontend.MethodDispatcher;
 import org.apache.cxf.jaxws.support.ContextPropertiesMapping;
-import org.apache.cxf.service.factory.MethodDispatcher;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.workqueue.OneShotAsyncExecutor;
 
-public final class EndpointInvocationHandler extends BindingProviderImpl implements InvocationHandler {
+public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implements
+    InvocationHandler, BindingProvider {
 
-    private static final Logger LOG = LogUtils.getL7dLogger(EndpointInvocationHandler.class);
+    private static final Logger LOG = LogUtils.getL7dLogger(JaxWsClientProxy.class);
 
-    private Endpoint endpoint;
+    protected AtomicReference<Map<String, Object>> requestContext = 
+            new AtomicReference<Map<String, Object>>();
+    protected Map<String, Object> responseContext;
 
-    private Client client;
+    private Endpoint endpoint;
+    private final Binding binding;
 
-    public EndpointInvocationHandler(Client c, Binding b) {
-        super(b);
-        endpoint = c.getEndpoint();
-        client = c;
+    public JaxWsClientProxy(Client c, Binding b) {
+        super(c);
+        this.endpoint = c.getEndpoint();
+        this.binding = b;
         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());
-        }    
+        // NOTE for jms transport the address would be null
+        if (null != endpoint && null != endpoint.getEndpointInfo().getAddress()) {
+            getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
+                                    endpoint.getEndpointInfo().getAddress());
+        }
     }
 
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
-       
-        MethodDispatcher dispatcher = 
-            (MethodDispatcher)endpoint.getService().get(MethodDispatcher.class.getName());
+
+        MethodDispatcher dispatcher = (MethodDispatcher)endpoint.getService().get(
+                                                                                  MethodDispatcher.class
+                                                                                      .getName());
         BindingOperationInfo oi = dispatcher.getBindingOperation(method, endpoint);
         if (oi == null) {
             // check for method on BindingProvider and Object
@@ -87,74 +89,43 @@
             Message msg = new Message("NO_OPERATION_INFO", LOG, method.getName());
             throw new WebServiceException(msg.toString());
         }
-       
+
         Object[] params = args;
         if (null == params) {
             params = new Object[0];
         }
 
-        Object[] paramsWithOutHolder = handleHolder(params);
-        Map<String, Object> requestContext = this.getRequestContext();
-        Map<String, Object> responseContext = this.getResponseContext();
+        Map<String, Object> reqContext = this.getRequestContext();
+        Map<String, Object> resContext = this.getResponseContext();
         Map<String, Object> context = new HashMap<String, Object>();
-        
-        //need to do context mapping from jax-ws to cxf message
-        ContextPropertiesMapping.mapRequestfromJaxws2Cxf(requestContext);
-        
-        context.put(Client.REQUEST_CONTEXT, requestContext);
-        context.put(Client.RESPONSE_CONTEXT, responseContext);
 
-        requestContext.put(Method.class.getName(), method);
+        // need to do context mapping from jax-ws to cxf message
+        ContextPropertiesMapping.mapRequestfromJaxws2Cxf(reqContext);
+
+        context.put(Client.REQUEST_CONTEXT, reqContext);
+        context.put(Client.RESPONSE_CONTEXT, resContext);
+
+        reqContext.put(Method.class.getName(), method);
 
         boolean isAsync = method.getName().endsWith("Async");
-        
+
         Object result = null;
         if (isAsync) {
-            result = invokeAsync(method, oi, params, paramsWithOutHolder, context);
+            result = invokeAsync(method, oi, params, context);
         } else {
-            result = invokeSync(method, oi, params, paramsWithOutHolder, context);
+            result = invokeSync(method, oi, params, context);
         }
-        // need to do context mapping from cxf message to jax-ws 
-        ContextPropertiesMapping.mapResponsefromCxf2Jaxws(responseContext);
+        // need to do context mapping from cxf message to jax-ws
+        ContextPropertiesMapping.mapResponsefromCxf2Jaxws(resContext);
         return result;
-        
-    }
-
 
-    Object invokeSync(Method method, 
-                          BindingOperationInfo oi, 
-                          Object[] params, 
-                          Object[] paramsWithOutHolder, 
-                          Map<String, Object> context) throws Exception {
-        Object rawRet[] = client.invoke(oi, paramsWithOutHolder, context);
-
-        if (rawRet != null && rawRet.length != 0) {
-            List<Object> retList = new ArrayList<Object>();
-            handleHolderReturn(params, method, rawRet, retList);
-            Object[] obj = retList.toArray();
-            return obj == null || obj.length == 0 ? null : obj[0];
-        } else {
-            return null;
-        }
-    }
-    
-    Client getClient() {
-        return client;
     }
 
-    private Object invokeAsync(Method method, 
-                               BindingOperationInfo oi, 
-                               Object[] params, 
-                               Object[] paramsWithOutHolder, 
+    private Object invokeAsync(Method method, BindingOperationInfo oi, Object[] params,
                                Map<String, Object> context) {
-        
-        FutureTask<Object> f = new FutureTask<Object>(new JAXWSAsyncCallable(this, 
-                                                                             method,
-                                                                             oi,
-                                                                             params,
-                                                                             paramsWithOutHolder,
-                                                                             context
-                                                                             ));
+
+        FutureTask<Object> f = new FutureTask<Object>(new JAXWSAsyncCallable(this, method, oi, params,
+                                                                             context));
 
         endpoint.getService().setExecutor(OneShotAsyncExecutor.getInstance());
         endpoint.getService().getExecutor().execute(f);
@@ -170,59 +141,32 @@
         }
     }
 
-    private Object[] handleHolder(Object[] params) {
-        // get value out of Holder
-        Object[] ret = new Object[params.length];
-        for (int i = 0; i < params.length; i++) {
-            if (params[i] instanceof Holder) {
-                ret[i] = ((Holder)params[i]).value;
-            } else {
-                ret[i] = params[i];
-            }
+    public Map<String, Object> getRequestContext() {
+        if (null == requestContext.get()) {
+            requestContext.compareAndSet(null, new ConcurrentHashMap<String, Object>(4));
         }
-        return ret;
+        return (Map<String, Object>)requestContext.get();
     }
 
-    private void handleHolderReturn(Object[] params, Method method, Object[] rawRet, List<Object> retList) {
-
-        int idx = 0;
-
-        if (method == null) {
-            return;
-        }
-        if (!((Class)method.getReturnType()).getName().equals("void")) {
-            retList.add(rawRet[0]);
-            idx++;
-        }
-        int holderStartIndex = 0;
-        Type[] para = method.getGenericParameterTypes();
-        for (int i = 0; i < para.length; i++) {
-            if (para[i] instanceof ParameterizedType) {
-                ParameterizedType paramType = (ParameterizedType)para[i];
-                if (((Class)paramType.getRawType()).getName().equals("javax.xml.ws.Holder")) {
-                    break;
-                } else {
-                    holderStartIndex++;
-                }
-            } else {
-                holderStartIndex++;
-            }
+    public Map<String, Object> getResponseContext() {
+        if (responseContext == null) {
+            responseContext = new HashMap<String, Object>();
         }
+        return responseContext;
+    }
 
-        for (int i = idx; i < rawRet.length; i++, holderStartIndex++) {
-            try {
-                ((Holder)params[holderStartIndex]).getClass().getField("value").set(params[holderStartIndex],
-                                                                                    rawRet[i]);
-            } catch (IllegalArgumentException e) {
-                e.printStackTrace();
-            } catch (SecurityException e) {
-                e.printStackTrace();
-            } catch (IllegalAccessException e) {
-                e.printStackTrace();
-            } catch (NoSuchFieldException e) {
-                e.printStackTrace();
-            }
+    public Binding getBinding() {
+        return binding;
+    }
 
+    protected void populateResponseContext(MessageContext ctx) {
+        Iterator<String> iter = ctx.keySet().iterator();
+        Map<String, Object> respCtx = getResponseContext();
+        while (iter.hasNext()) {
+            String obj = iter.next();
+            if (MessageContext.Scope.APPLICATION.compareTo(ctx.getScope(obj)) == 0) {
+                respCtx.put(obj, ctx.get(obj));
+            }
         }
     }
 }

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java?view=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,30 @@
+/**
+ * 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.jaxws;
+
+import org.apache.cxf.frontend.ClientProxyFactoryBean;
+
+public class JaxWsProxyFactoryBean extends ClientProxyFactoryBean {
+
+    public JaxWsProxyFactoryBean() {
+        super();
+        setClientFactoryBean(new JaxWsClientFactoryBean());
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsProxyFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsServerFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -18,8 +18,10 @@
  */
 package org.apache.cxf.jaxws;
 
+import org.apache.cxf.frontend.ServerFactoryBean;
+import org.apache.cxf.jaxws.binding.soap.JaxWsSoapBindingInfoFactoryBean;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.invoker.Invoker;
 
 /**
  * Bean to help easily create Server endpoints for JAX-WS.
@@ -27,5 +29,11 @@
 public class JaxWsServerFactoryBean extends ServerFactoryBean {
     public JaxWsServerFactoryBean() {
         setServiceFactory(new JaxWsServiceFactoryBean());
+        setBindingFactory(new JaxWsSoapBindingInfoFactoryBean());
+    }
+
+    @Override
+    protected Invoker createInvoker() {
+        return new JAXWSMethodInvoker(getServiceBean());
     }
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Wed Dec 20 00:07:54 2006
@@ -63,6 +63,7 @@
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.factory.AbstractBindingInfoFactoryBean;
 import org.apache.cxf.service.factory.AbstractServiceFactoryBean;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.ServiceInfo;
@@ -146,7 +147,7 @@
             dispatchService.setDataBinding(db);
             serviceFactory = sf;
         } else {
-            JaxWsServiceFactoryBean sf = new JaxWsServiceFactoryBean();
+            ReflectionServiceFactoryBean sf = new JaxWsServiceFactoryBean();
             sf.setBus(bus);
             sf.setServiceName(serviceName);
             // maybe we can find another way to create service which have no SEI
@@ -229,7 +230,7 @@
         LOG.log(Level.FINE, "creating port for portName", portName);
         LOG.log(Level.FINE, "endpoint interface:", serviceEndpointInterface);
 
-        JaxWsServiceFactoryBean serviceFactory = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean serviceFactory = new JaxWsServiceFactoryBean();
         serviceFactory.setBus(bus);
         serviceFactory.setServiceName(serviceName);
         serviceFactory.setServiceClass(serviceEndpointInterface);
@@ -282,7 +283,7 @@
 
         Client client = new ClientImpl(bus, jaxwsEndpoint);
 
-        InvocationHandler ih = new EndpointInvocationHandler(client, jaxwsEndpoint.getJaxwsBinding());
+        InvocationHandler ih = new JaxWsClientProxy(client, jaxwsEndpoint.getJaxwsBinding());
 
         // configuration stuff
         // createHandlerChainForBinding(serviceEndpointInterface, portName,

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/JaxWsSoapBindingInfoFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/JaxWsSoapBindingInfoFactoryBean.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/JaxWsSoapBindingInfoFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/JaxWsSoapBindingInfoFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -18,12 +18,17 @@
  */
 package org.apache.cxf.jaxws.binding.soap;
 
+import java.lang.reflect.Method;
+
 import javax.jws.soap.SOAPBinding;
 import javax.jws.soap.SOAPBinding.Style;
 import javax.jws.soap.SOAPBinding.Use;
 
 import org.apache.cxf.binding.soap.SoapBindingInfoFactoryBean;
+import org.apache.cxf.frontend.MethodDispatcher;
 import org.apache.cxf.jaxws.support.AbstractJaxWsServiceFactoryBean;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
 
 /**
  * Introspects the SOAPBinding annotation to provide to construct
@@ -45,9 +50,13 @@
     }
 
     Class<?> getServiceClass() {
-        return ((AbstractJaxWsServiceFactoryBean)getServiceFactory()).getJaxWsImplementorInfo()
+        return getJaxWsServiceFactory().getJaxWsImplementorInfo()
             .getEndpointClass();
     }
+
+    private AbstractJaxWsServiceFactoryBean getJaxWsServiceFactory() {
+        return (AbstractJaxWsServiceFactoryBean)getServiceFactory();
+    }
     
     @Override
     public String getUse() {
@@ -61,5 +70,14 @@
         }
         return super.getStyle();
     }
+
+    @Override
+    protected boolean isHeader(BindingOperationInfo op, MessagePartInfo part) {
+        MethodDispatcher md = (MethodDispatcher) getService().get(MethodDispatcher.class.getName());
+        Method method = md.getMethod(op);
+        
+        return getJaxWsServiceFactory().isHeader(method, part.getIndex());
+    }
+    
     
 }

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java?view=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,92 @@
+/**
+ * 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.jaxws.interceptors;
+
+import java.util.List;
+
+import javax.xml.ws.Holder;
+
+import org.apache.cxf.interceptor.Fault;
+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.service.factory.ReflectionServiceFactoryBean;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
+
+public class HolderInInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    public static final String CLIENT_HOLDERS = "client.holders";
+    
+    public HolderInInterceptor() {
+        super();
+        setPhase(Phase.PRE_INVOKE);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message message) throws Fault {
+        List<Object> inObjects = message.getContent(List.class);
+
+        Exchange exchange = message.getExchange();
+        
+        OperationInfo op = exchange.get(OperationInfo.class);
+        if (op == null || !op.hasOutput() || op.getOutput().size() == 0) {
+            return;
+        }
+        
+        List<MessagePartInfo> parts = op.getOutput().getMessageParts();
+        
+        boolean client = Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+        if (client) {
+            int holderIdx = 0;
+            int partIdx = 0;
+            for (MessagePartInfo part : parts) {
+                if (part.getIndex() == -1) {
+                    partIdx++;
+                    break;
+                }
+            }
+            
+            List<Holder> holders = (List<Holder>) exchange.get(CLIENT_HOLDERS);
+            for (MessagePartInfo part : parts) {
+                int idx = part.getIndex();
+                if (idx >= 0) {
+                    Holder holder = holders.get(holderIdx);
+                    holder.value = inObjects.get(partIdx);
+                    holderIdx++;
+                    partIdx++;
+                }
+            }
+        } else {
+            for (MessagePartInfo part : parts) {
+                int idx = part.getIndex();
+                if (idx >= 0) {
+                    if (part.getProperty(ReflectionServiceFactoryBean.MODE_INOUT) != null) {
+                        Object object = inObjects.get(idx);
+                        inObjects.set(idx, new Holder(object));
+                    } else {
+                        inObjects.add(idx, new Holder());
+                    } 
+                }
+            }
+        }
+    }
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,124 @@
+/**
+ * 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.jaxws.interceptors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.ws.Holder;
+
+import org.apache.cxf.interceptor.Fault;
+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.service.factory.ReflectionServiceFactoryBean;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
+
+
+public class HolderOutInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    public HolderOutInterceptor() {
+        super();
+        addBefore(WrapperClassOutInterceptor.class.getName());
+        setPhase(Phase.PRE_LOGICAL);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void handleMessage(Message message) throws Fault {
+        List<Object> outObjects = message.getContent(List.class);
+        Exchange exchange = message.getExchange();
+        OperationInfo op = exchange.get(OperationInfo.class);
+        
+        if (op == null || !op.hasOutput() || op.getOutput().size() == 0) {
+            return;
+        }
+
+        List<MessagePartInfo> parts = op.getOutput().getMessageParts();
+        
+        // is this a client invocation?
+        if (Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE))) {
+            // Extract the Holders and store them for later
+            List<Holder> holders = new ArrayList<Holder>();
+            int size = op.getInput().size();
+            List<Object> newObjects = new ArrayList<Object>(size);
+            for (int i = 0; i < size; i++) {
+                newObjects.add(null);
+            }
+            
+            for (MessagePartInfo part : parts) {
+                int idx = part.getIndex();
+                if (idx >= 0) {
+                    Holder holder = (Holder) outObjects.get(idx);
+                    if (part.getProperty(ReflectionServiceFactoryBean.MODE_INOUT) != null) {
+                        newObjects.set(idx, holder.value);
+                    } 
+                    holders.add(holder);
+                }
+            }
+            
+            if (holders.size() == 0) {
+                return;
+            }
+            
+            int i = 0;
+            for (MessagePartInfo part : op.getInput().getMessageParts()) {
+                // if this is an in/out param, we already took care of it above since it has a holder.
+                if (part.getProperty(ReflectionServiceFactoryBean.MODE_INOUT) != null) {
+                    i++;
+                    continue;
+                }
+                
+                newObjects.set(part.getIndex(), outObjects.get(i));
+                i++;
+            }
+            
+            message.setContent(List.class, newObjects);
+            message.getExchange().put(HolderInInterceptor.CLIENT_HOLDERS, holders);
+        } else {
+            // Add necessary holders so we match the method signature of the service class
+            List<Object> reqObjects = 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);
+                    } else {
+                        outObjects.add(outIdx, o);
+                    }
+                    outIdx++;
+                }
+            }
+        }
+    }
+    
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/HolderOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java Wed Dec 20 00:07:54 2006
@@ -35,6 +35,8 @@
 import org.apache.cxf.jaxws.handler.LogicalHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.StreamHandlerInterceptor;
 import org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor;
+import org.apache.cxf.jaxws.interceptors.HolderInInterceptor;
+import org.apache.cxf.jaxws.interceptors.HolderOutInterceptor;
 import org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor;
 import org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor;
 import org.apache.cxf.service.Service;
@@ -73,11 +75,13 @@
         List<Interceptor> in = super.getInInterceptors();
         in.addAll(handlerInterceptors);
         in.add(new WrapperClassInInterceptor());
+        in.add(new HolderInInterceptor());
         
         List<Interceptor> out = super.getOutInterceptors();
         out.addAll(handlerInterceptors);
         out.add(new WrapperClassOutInterceptor());
-
+        out.add(new HolderOutInterceptor());
+        
         getInFaultInterceptors().add(new ClientFaultConverter());
     }
     

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java Wed Dec 20 00:07:54 2006
@@ -34,6 +34,7 @@
 import javax.jws.soap.SOAPBinding.ParameterStyle;
 import javax.jws.soap.SOAPBinding.Style;
 import javax.xml.namespace.QName;
+import javax.xml.ws.Holder;
 import javax.xml.ws.RequestWrapper;
 import javax.xml.ws.ResponseWrapper;
 import javax.xml.ws.WebFault;
@@ -315,6 +316,7 @@
 
     @Override
     public Boolean isInParam(Method method, int j) {
+        method = getDeclaredMethod(method);
         if (j < 0) {
             return Boolean.FALSE;
         }
@@ -330,13 +332,18 @@
 
     @Override
     public Boolean isOutParam(Method method, int j) {
+        method = getDeclaredMethod(method);
         if (j == -1) {
             return !method.getReturnType().equals(void.class);
         }
 
         WebParam webParam = getWebParam(method, j);
 
-        return webParam != null && (webParam.mode().equals(Mode.OUT) || webParam.mode().equals(Mode.INOUT));
+        if (webParam != null && (webParam.mode().equals(Mode.OUT) || webParam.mode().equals(Mode.INOUT))) {
+            return Boolean.TRUE;
+        }
+        
+        return method.getParameterTypes()[j] == Holder.class;
     }
 
     @Override
@@ -429,4 +436,17 @@
         }
         return null;
     }
+
+    @Override
+    public Boolean isHeader(Method method, int j) {
+        method = getDeclaredMethod(method);
+        if (j >= 0) {
+            WebParam webParam = getWebParam(method, j);
+            return webParam != null && webParam.header();
+        } else {
+            WebResult webResult = getWebResult(method);
+            return webResult != null && webResult.header();
+        }
+    }
+    
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -19,10 +19,7 @@
 
 package org.apache.cxf.jaxws.support;
 
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
 import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -31,12 +28,12 @@
 import javax.wsdl.Operation;
 import javax.xml.namespace.QName;
 import javax.xml.ws.AsyncHandler;
-import javax.xml.ws.Holder;
 import javax.xml.ws.Service;
 
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.endpoint.EndpointException;
 import org.apache.cxf.jaxws.interceptors.WebFaultOutInterceptor;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.factory.ServiceConstructionException;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.FaultInfo;
@@ -48,12 +45,6 @@
 
 public class JaxWsServiceFactoryBean extends AbstractJaxWsServiceFactoryBean {
 
-    public static final String MODE_OUT = "messagepart.mode.out";
-
-    public static final String MODE_INOUT = "messagepart.mode.inout";
-
-    public static final String HOLDER = "messagepart.isholder";
-
     private JaxWsServiceConfiguration jaxWsConfiguration;
 
     public JaxWsServiceFactoryBean() {
@@ -85,7 +76,7 @@
     }
 
     @Override
-    protected Endpoint createEndpoint(EndpointInfo ei) throws EndpointException {
+    public Endpoint createEndpoint(EndpointInfo ei) throws EndpointException {
         return new JaxWsEndpointImpl(getBus(), getService(), ei);
     }
 
@@ -193,6 +184,7 @@
                 MessageInfo input = o.getOutput();
                 MessagePartInfo part = input.getMessageParts().get(0);
                 part.setTypeClass(getResponseWrapper(method));
+                part.setIndex(-1);
             }
             
             setFaultClassInfo(o, method);
@@ -226,54 +218,32 @@
 
     private void initializeParameter(OperationInfo o, Method method, int i, 
                                      Class paramType, Type genericType) {
-        if (isWrapped(method)) {
-            return;
-        }
         boolean isIn = isInParam(method, i);
         boolean isOut = isOutParam(method, i);
 
+        MessagePartInfo part = null;
         if (isIn && !isOut) {
             QName name = getInPartName(o, method, i);
-            MessagePartInfo part = o.getInput().getMessagePart(name);
+            part = o.getInput().getMessagePart(name);
             initializeParameter(part, paramType, genericType);
+            part.setIndex(i);
         } else if (!isIn && isOut) {
             QName name = getOutPartName(o, method, i);
-            MessagePartInfo part = o.getOutput().getMessagePart(name);
+            part = o.getOutput().getMessagePart(name);
             initializeParameter(part, paramType, genericType);
+            part.setIndex(i);
         } else if (isIn && isOut) {
             QName name = getOutPartName(o, method, i);
-            MessagePartInfo part = o.getInput().getMessagePart(name);
-            part.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
+            part = o.getInput().getMessagePart(name);
+            part.setProperty(ReflectionServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
             initializeParameter(part, paramType, genericType);
+            part.setIndex(i);
             
             part = o.getOutput().getMessagePart(name);
-            part.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
+            part.setProperty(ReflectionServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
             initializeParameter(part, paramType, genericType);
+            part.setIndex(i);
         }
-    }
-
-    private void initializeParameter(MessagePartInfo part, Class rawClass, Type type) {
-        if (rawClass.equals(Holder.class) && type instanceof ParameterizedType) {
-            ParameterizedType paramType = (ParameterizedType)type;
-            rawClass = getHolderClass(paramType);
-        }
-        part.setProperty(GENERIC_TYPE, type);
-        part.setTypeClass(rawClass);
-    }
-
-    private static Class getHolderClass(ParameterizedType paramType) {
-        Object rawType = paramType.getActualTypeArguments()[0];
-        Class rawClass;
-        if (rawType instanceof GenericArrayType) {
-            rawClass = (Class) ((GenericArrayType) rawType).getGenericComponentType();
-            rawClass = Array.newInstance(rawClass, 0).getClass();
-        } else {
-            if (rawType instanceof ParameterizedType) {
-                rawType = (Class) ((ParameterizedType) rawType).getRawType();
-            }
-            rawClass = (Class) rawType;
-        }
-        return rawClass;
     }
 
     public void setJaxWsConfiguration(JaxWsServiceConfiguration jaxWsConfiguration) {

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java Wed Dec 20 00:07:54 2006
@@ -72,7 +72,7 @@
     }
 
     @Override
-    protected Endpoint createEndpoint(EndpointInfo ei) throws EndpointException  {
+    public Endpoint createEndpoint(EndpointInfo ei) throws EndpointException  {
         return new JaxWsEndpointImpl(getBus(), getService(), ei);
     }
     

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxWsTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxWsTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxWsTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/AbstractJaxWsTest.java Wed Dec 20 00:07:54 2006
@@ -21,7 +21,7 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.binding.BindingFactoryManager;
 import org.apache.cxf.binding.soap.SoapBindingFactory;
-import org.apache.cxf.binding.soap.SoapDestinationFactory;
+import org.apache.cxf.binding.soap.SoapTransportFactory;
 import org.apache.cxf.test.AbstractCXFTest;
 import org.apache.cxf.transport.ConduitInitiatorManager;
 import org.apache.cxf.transport.DestinationFactoryManager;
@@ -34,7 +34,7 @@
  */
 public abstract class AbstractJaxWsTest extends AbstractCXFTest {
 
-    LocalTransportFactory localTransport;
+    protected LocalTransportFactory localTransport;
 
     private Bus bus;
 
@@ -51,7 +51,7 @@
 
         DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
 
-        SoapDestinationFactory soapDF = new SoapDestinationFactory();
+        SoapTransportFactory soapDF = new SoapTransportFactory();
         soapDF.setBus(bus);
         dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/", soapDF);
         dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/", soapDF);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java Wed Dec 20 00:07:54 2006
@@ -32,11 +32,12 @@
 
 import org.apache.cxf.Bus;
 
+import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.jaxws.service.Hello;
 import org.apache.cxf.jaxws.service.HelloInterface;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.InterfaceInfo;
 import org.apache.cxf.transport.local.LocalTransportFactory;
@@ -81,7 +82,7 @@
     }
     
     private Definition createService(boolean wrapped) throws Exception {
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
 
         Bus bus = getBus();
         bean.setBus(bus);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ConfiguredEndpointTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ConfiguredEndpointTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ConfiguredEndpointTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ConfiguredEndpointTest.java Wed Dec 20 00:07:54 2006
@@ -32,7 +32,7 @@
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.binding.BindingFactoryManager;
 import org.apache.cxf.binding.soap.SoapBindingFactory;
-import org.apache.cxf.binding.soap.SoapDestinationFactory;
+import org.apache.cxf.binding.soap.SoapTransportFactory;
 import org.apache.cxf.bus.cxf.CXFBusFactory;
 import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.configuration.Configurer;
@@ -86,7 +86,7 @@
         javax.xml.ws.Service service = new SOAPService();
         Greeter greeter = service.getPort(PORT_NAME, Greeter.class);
         
-        EndpointInvocationHandler eih = (EndpointInvocationHandler)Proxy.getInvocationHandler(greeter);
+        JaxWsClientProxy eih = (JaxWsClientProxy)Proxy.getInvocationHandler(greeter);
         Client client = eih.getClient();
         JaxWsEndpointImpl endpoint = (JaxWsEndpointImpl)client.getEndpoint();
         assertEquals("Unexpected bean name", PORT_NAME.toString(), endpoint.getBeanName());
@@ -150,7 +150,7 @@
         javax.xml.ws.Service service = new SOAPService();
         Greeter greeter = service.getPort(PORT_NAME, Greeter.class);
 
-        EndpointInvocationHandler eih = (EndpointInvocationHandler)Proxy.getInvocationHandler(greeter);
+        JaxWsClientProxy eih = (JaxWsClientProxy)Proxy.getInvocationHandler(greeter);
         Client client = eih.getClient();
         JaxWsEndpointImpl endpoint = (JaxWsEndpointImpl)client.getEndpoint();
         assertEquals("Unexpected bean name", PORT_NAME.toString(), endpoint.getBeanName());
@@ -320,7 +320,7 @@
             .registerBindingFactory("http://schemas.xmlsoap.org/wsdl/soap/", bindingFactory);
 
         DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
-        SoapDestinationFactory soapDF = new SoapDestinationFactory();
+        SoapTransportFactory soapDF = new SoapTransportFactory();
         soapDF.setBus(bus);
         dfm.registerDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/", soapDF);
         dfm.registerDestinationFactory("http://schemas.xmlsoap.org/soap/", soapDF);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/GreeterTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/GreeterTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/GreeterTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/GreeterTest.java Wed Dec 20 00:07:54 2006
@@ -24,9 +24,10 @@
 import org.w3c.dom.Node;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.cxf.transport.local.LocalTransportFactory;
 import org.apache.hello_world_soap_http.GreeterImpl;
@@ -43,7 +44,7 @@
     }
 
     public void testEndpoint() throws Exception {
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         URL resource = getClass().getResource("/wsdl/hello_world.wsdl");
         assertNotNull(resource);        
         bean.setWsdlURL(resource);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java Wed Dec 20 00:07:54 2006
@@ -25,9 +25,10 @@
 import org.w3c.dom.Node;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.MessagePartInfo;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.transport.local.LocalTransportFactory;
@@ -36,7 +37,7 @@
 
 public class HeaderTest extends AbstractJaxWsTest {
     public void testInvocation() throws Exception {
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
 
         Bus bus = getBus();
         bean.setBus(bus);

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=488948&r1=488947&r2=488948
==============================================================================
--- 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 Wed Dec 20 00:07:54 2006
@@ -19,9 +19,6 @@
 
 package org.apache.cxf.jaxws;
 
-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;
@@ -39,25 +36,25 @@
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.factory.ServiceConstructionException;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
-import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.service.model.MessagePartInfo;
 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";
+    private Destination d;
     @Override
     public void setUp() throws Exception {
         super.setUp();
@@ -65,8 +62,7 @@
         EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/soap/http");
         ei.setAddress(address);
 
-        Destination d = localTransport.getDestination(ei);
-        d.setMessageObserver(new EchoObserver());
+        d = localTransport.getDestination(ei);
     }
 
     public void testCreate() throws Exception {
@@ -103,7 +99,7 @@
     }
 
     public void testEndpoint() throws Exception {
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         URL resource = getClass().getResource("/wsdl/hello_world.wsdl");
         assertNotNull(resource);
         bean.setWsdlURL(resource);
@@ -126,7 +122,10 @@
         bop = bop.getUnwrappedOperation();
         assertNotNull(bop);
 
-        responseMessage = "sayHiResponse.xml";
+        MessagePartInfo part = bop.getOutput().getMessageParts().get(0);
+        assertEquals(-1, part.getIndex());
+        
+        d.setMessageObserver(new MessageReplayObserver("sayHiResponse.xml"));
         Object ret[] = client.invoke(bop, new Object[0], null);
         assertNotNull(ret);
         assertEquals("Wrong number of return objects", 1, ret.length);
@@ -134,7 +133,7 @@
         // test fault handling
         bop = ei.getBinding().getOperation(new QName(namespace, "testDocLitFault"));
         bop = bop.getUnwrappedOperation();
-        responseMessage = "testDocLitFault.xml";
+        d.setMessageObserver(new MessageReplayObserver("testDocLitFault.xml"));
         try {
             client.invoke(bop, new Object[] {"BadRecordLitFault"}, null);
             fail("Should have returned a fault!");
@@ -142,7 +141,7 @@
             assertEquals("foo", fault.getFaultInfo().trim());
             assertEquals("Hadrian did it.", fault.getMessage());
         }
-        
+
         try {
             client.getEndpoint().getOutInterceptors().add(new NestedFaultThrower());
             client.getEndpoint().getOutInterceptors().add(new FaultThrower());
@@ -186,46 +185,4 @@
 
     }
 
-    static class EchoObserver implements MessageObserver {
-
-        public void onMessage(Message message) {
-            try {
-
-                InputStream in = message.getContent(InputStream.class);
-                while (in.available() > 0) {
-                    in.read();
-                }
-                
-                Conduit backChannel = message.getDestination().getBackChannel(message, null, null);
-
-                backChannel.send(message);
-
-                OutputStream out = message.getContent(OutputStream.class);
-                assertNotNull(out);
-                in = getClass().getResourceAsStream(responseMessage);
-                copy(in, out, 2045);
-
-                out.close();
-                in.close();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private static void copy(final InputStream input, final OutputStream output, final int bufferSize)
-        throws IOException {
-        try {
-            final byte[] buffer = new byte[bufferSize];
-
-            int n = input.read(buffer);
-            while (-1 != n) {
-                output.write(buffer, 0, n);
-                n = input.read(buffer);
-            }
-        } finally {
-            input.close();
-            output.close();
-        }
-    }
 }

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java?view=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,62 @@
+/**
+ * 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.jaxws;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import junit.framework.Assert;
+
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.MessageObserver;
+
+public class MessageReplayObserver implements MessageObserver {
+    String responseMessage;
+    
+    public MessageReplayObserver(String responseMessage) {
+        this.responseMessage = responseMessage;
+    }
+    
+    public void onMessage(Message message) {
+        try {
+
+            InputStream in = message.getContent(InputStream.class);
+            while (in.available() > 0) {
+                in.read();
+            }
+            
+            Conduit backChannel = message.getDestination().getBackChannel(message, null, null);
+
+            backChannel.send(message);
+
+            OutputStream out = message.getContent(OutputStream.class);
+            Assert.assertNotNull(out);
+            in = getClass().getResourceAsStream(responseMessage);
+            IOUtils.copy(in, out, 2045);
+
+            out.close();
+            in.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
\ No newline at end of file

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/MessageReplayObserver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ServiceModelUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ServiceModelUtilsTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ServiceModelUtilsTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/ServiceModelUtilsTest.java Wed Dec 20 00:07:54 2006
@@ -34,6 +34,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.ServiceModelUtil;
@@ -44,7 +45,7 @@
    
     Message message;
     Exchange exchange;
-    JaxWsServiceFactoryBean bean;
+    ReflectionServiceFactoryBean bean;
     
     public void setUp() throws Exception {
         super.setUp();

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SoapFaultTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SoapFaultTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SoapFaultTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/SoapFaultTest.java Wed Dec 20 00:07:54 2006
@@ -27,11 +27,12 @@
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.cxf.transport.local.LocalTransportFactory;
 import org.apache.hello_world_soap_http.GreeterImpl;
@@ -47,7 +48,7 @@
 
         bus = getBus();
 
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         URL resource = getClass().getResource("/wsdl/hello_world.wsdl");
         assertNotNull(resource);
         bean.setWsdlURL(resource);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java Wed Dec 20 00:07:54 2006
@@ -37,6 +37,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
@@ -61,7 +62,7 @@
         message.setExchange(exchange);        
 
 
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         URL resource = getClass().getResource("/wsdl/calculator.wsdl");
         assertNotNull(resource);
         bean.setWsdlURL(resource);

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java?view=diff&rev=488948&r1=488947&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java Wed Dec 20 00:07:54 2006
@@ -36,6 +36,7 @@
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageImpl;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.invoker.BeanInvoker;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
@@ -60,7 +61,7 @@
         message.setExchange(exchange);        
 
 
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         URL resource = getClass().getResource("/wsdl/hello_world_rpc_lit.wsdl");
         assertNotNull(resource);
         bean.setWsdlURL(resource);

Copied: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java (from r481634, incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/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=488948&p1=incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/HeaderClientServerTest.java&r1=481634&p2=incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java&r2=488948
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/HeaderClientServerTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java Wed Dec 20 00:07:54 2006
@@ -17,24 +17,22 @@
  * under the License.
  */
 
-package org.apache.cxf.systest.jaxws;
+package org.apache.cxf.jaxws.header;
 
 
 
 import java.lang.reflect.UndeclaredThrowableException;
-
 import java.net.URL;
 
 import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Holder;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.cxf.systest.common.ClientServerSetupBase;
-import org.apache.cxf.systest.common.ClientServerTestBase;
-import org.apache.cxf.systest.common.TestServerBase;
+import org.apache.cxf.BusFactoryHelper;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxws.AbstractJaxWsTest;
+import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.header_test.SOAPHeaderService;
 import org.apache.header_test.TestHeader;
 import org.apache.header_test.TestHeaderImpl;
@@ -49,7 +47,7 @@
 import org.apache.header_test.types.TestHeader6Response;
 
 
-public class HeaderClientServerTest extends ClientServerTestBase {
+public class HeaderClientServerTest extends AbstractJaxWsTest {
 
     private final QName serviceName = new QName("http://apache.org/header_test",
                                                 "SOAPHeaderService");    
@@ -58,40 +56,18 @@
 
     private TestHeader proxy;
     
-    
-    public static class MyServer extends TestServerBase {
+    public void setUp() throws Exception {
+        super.setUp();
+        BusFactoryHelper.newInstance().setDefaultBus(getBus());
+        
+        Object implementor = new TestHeaderImpl();
+        String address = "http://localhost:9104/SoapHeaderContext/SoapHeaderPort";
+        EndpointImpl e = (EndpointImpl) Endpoint.publish(address, implementor);
         
-        protected void run()  {
-            Object implementor = new TestHeaderImpl();
-            String address = "http://localhost:9104/SoapHeaderContext/SoapHeaderPort";
-            Endpoint.publish(address, implementor);
-            
-        }
-        
-
-        public static void main(String[] args) {
-            try { 
-                MyServer s = new MyServer(); 
-                s.start();
-            } catch (Exception ex) {
-                ex.printStackTrace();
-                System.exit(-1);
-            } finally { 
-                System.out.println("done!");
-            }
-        }
+        e.getServer().getEndpoint().getInInterceptors().add(new LoggingInInterceptor());
+        e.getServer().getEndpoint().getOutInterceptors().add(new LoggingOutInterceptor());
     }
     
-    public static Test suite() throws Exception {
-        TestSuite suite = new TestSuite(HeaderClientServerTest.class);
-        return new ClientServerSetupBase(suite) {
-            public void startServers() throws Exception {
-                assertTrue("server did not launch correctly", launchServer(MyServer.class));
-            }
-        };
-                       
-    }  
-
     public void testInHeader() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
         assertNotNull(wsdl);
@@ -203,32 +179,28 @@
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
         proxy = service.getPort(portName, TestHeader.class);
-        
-        try {
-            TestHeader6 in = new TestHeader6();
-            String val = new String(TestHeader6.class.getSimpleName());
-            Holder<TestHeader3> inoutHeader = new Holder<TestHeader3>();
-            for (int idx = 0; idx < 2; idx++) {
-                val += idx;                
-                in.setRequestType(val);
-                inoutHeader.value = new TestHeader3();
-                TestHeader6Response returnVal = proxy.testHeaderPartBeforeBodyPart(inoutHeader, in);
-                //inoutHeader copied to return
-                //in copied to inoutHeader
-                assertNotNull(returnVal);
-                assertNull(returnVal.getResponseType());
-                assertEquals(val, inoutHeader.value.getRequestType());
-                
-                in.setRequestType(null);
-                inoutHeader.value.setRequestType(val);
-                returnVal = proxy.testHeaderPartBeforeBodyPart(inoutHeader, in);
-                assertNotNull(returnVal);
-                assertEquals(val, returnVal.getResponseType());
-                assertNull(inoutHeader.value.getRequestType());
-            }
-        } catch (UndeclaredThrowableException ex) {
-            throw (Exception)ex.getCause();
-        } 
+    
+        TestHeader6 in = new TestHeader6();
+        String val = new String(TestHeader6.class.getSimpleName());
+        Holder<TestHeader3> inoutHeader = new Holder<TestHeader3>();
+        for (int idx = 0; idx < 2; idx++) {
+            val += idx;                
+            in.setRequestType(val);
+            inoutHeader.value = new TestHeader3();
+            TestHeader6Response returnVal = proxy.testHeaderPartBeforeBodyPart(inoutHeader, in);
+            //inoutHeader copied to return
+            //in copied to inoutHeader
+            assertNotNull(returnVal);
+            assertNull(returnVal.getResponseType());
+            assertEquals(val, inoutHeader.value.getRequestType());
+            
+            in.setRequestType(null);
+            inoutHeader.value.setRequestType(val);
+            returnVal = proxy.testHeaderPartBeforeBodyPart(inoutHeader, in);
+            assertNotNull(returnVal);
+            assertEquals(val, returnVal.getResponseType());
+            assertNull(inoutHeader.value.getRequestType());
+        }
     }
 
     public static void main(String[] args) {

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java?view=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,38 @@
+/**
+ * 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.jaxws.holder;
+
+import javax.jws.WebParam;
+import javax.jws.WebParam.Mode;
+import javax.jws.WebService;
+import javax.xml.ws.Holder;
+
+@WebService
+public interface HolderService {
+
+    String echo(String s1, String s2, @WebParam(mode = Mode.OUT)
+    Holder<String> outS2);
+
+    String echo2(String s1, @WebParam(mode = Mode.OUT)
+    Holder<String> outS2, String s2);
+
+    String echo3(@WebParam(mode = Mode.INOUT, header = true)
+    Holder<String> header, String s1);
+
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderService.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java?view=auto&rev=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java Wed Dec 20 00:07:54 2006
@@ -0,0 +1,45 @@
+/**
+ * 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.jaxws.holder;
+
+import javax.jws.WebParam;
+import javax.jws.WebParam.Mode;
+import javax.jws.WebService;
+import javax.xml.ws.Holder;
+
+
+@WebService(endpointInterface = "org.apache.cxf.jaxws.holder.HolderService")
+public class HolderServiceImpl implements HolderService {
+
+    public String echo(String s1, String s2, @WebParam(mode = Mode.OUT)
+    Holder<String> outS2) {
+        outS2.value = s2;
+        return s1;
+    }
+
+    public String echo2(String s1, @WebParam(mode = Mode.OUT)
+    Holder<String> outS2, String s2) {
+        outS2.value = s2;
+        return s1;
+    }
+
+    public String echo3(Holder<String> header, String s1) {
+        return s1;
+    }
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderServiceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderTest.java (from r482349, incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HolderTest.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderTest.java?view=diff&rev=488948&p1=incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HolderTest.java&r1=482349&p2=incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderTest.java&r2=488948
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HolderTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/holder/HolderTest.java Wed Dec 20 00:07:54 2006
@@ -16,42 +16,72 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.jaxws;
+package org.apache.cxf.jaxws.holder;
+
+import javax.xml.ws.Holder;
 
 import org.w3c.dom.Node;
-import org.apache.cxf.Bus;
-import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
-import org.apache.cxf.mtom_xop.TestMtomImpl;
-import org.apache.cxf.service.Service;
-import org.apache.cxf.service.factory.ServerFactoryBean;
+
+import org.apache.cxf.jaxws.AbstractJaxWsTest;
+import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.apache.cxf.jaxws.MessageReplayObserver;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.Destination;
 import org.apache.cxf.transport.local.LocalTransportFactory;
 
+public class HolderTest extends AbstractJaxWsTest {
+    private final String address = "http://localhost:9000/HolderService";
 
+    public void testClient() throws Exception {
+        EndpointInfo ei = new EndpointInfo(null, "http://schemas.xmlsoap.org/soap/http");
+        ei.setAddress(address);
+
+        Destination d = localTransport.getDestination(ei);
+        d.setMessageObserver(new MessageReplayObserver("/org/apache/cxf/jaxws/holder/echoResponse.xml"));
+
+        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
+        factory.getClientFactoryBean().setServiceClass(HolderService.class);
+        factory.getClientFactoryBean().setBus(getBus());
+        factory.getClientFactoryBean().setAddress(address);
+
+        HolderService h = (HolderService)factory.create();
+        Holder<String> holder = new Holder<String>();
+        assertEquals("one", h.echo("one", "two", holder));
+        assertEquals("two", holder.value);
+    }
 
-public class HolderTest extends AbstractJaxWsTest {
-    public void testInvocation() throws Exception {
-        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+    public void testServer() throws Exception {
+        JaxWsServerFactoryBean svr = new JaxWsServerFactoryBean();
+        svr.setBus(getBus());
+        svr.setServiceBean(new HolderServiceImpl());
+        svr.setAddress(address);
+        svr.create();
 
-        Bus bus = getBus();
-        bean.setBus(bus);
-        bean.setServiceClass(TestMtomImpl.class);
-        
-        Service service = bean.create();
-        service.setInvoker(new JAXWSMethodInvoker(new TestMtomImpl()));
+        addNamespace("h", "http://holder.jaxws.cxf.apache.org");
+
+        Node response = invoke(address, LocalTransportFactory.TRANSPORT_ID, "echo.xml");
         
-        ServerFactoryBean svr = new ServerFactoryBean();
-        svr.setBus(bus);
-        svr.setServiceFactory(bean);
-        svr.create();
+        assertNotNull(response);
+        assertValid("//h:echoResponse/h:return[text()='one']", response);
+        assertValid("//h:echoResponse/h:outS2[text()='two']", response);
+        assertNoFault(response);
 
-        Node response = invoke("http://localhost:9036/mime-test",
-                               LocalTransportFactory.TRANSPORT_ID, 
-                               "echoData.xml");
-        addNamespace("h", "http://cxf.apache.org/mime/types");        
+        response = invoke(address, LocalTransportFactory.TRANSPORT_ID, "echo2.xml");
+
+        assertNotNull(response);
+        assertNoFault(response);
+        assertValid("//h:echo2Response/h:return[text()='one']", response);
+        assertValid("//h:echo2Response/h:outS2[text()='two']", response);
+        
+        // test holder with in/out header
+        response = invoke(address, LocalTransportFactory.TRANSPORT_ID, "echo3.xml");
         
-        assertValid("//h:name", response);        
-        assertValid("/s:Envelope/s:Body", response); 
         assertNotNull(response);
         assertNoFault(response);
+        assertValid("//h:echo3Response/h:return[text()='one']", response);
+        assertValid("//s:Header/h:header[text()='header']", response);
+
     }
+
 }