You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2008/11/12 13:42:49 UTC

svn commit: r713355 [2/5] - in /cxf/sandbox/2.2.x-continuations: ./ api/ api/src/ api/src/main/ api/src/main/java/ api/src/main/java/org/ api/src/main/java/org/apache/ api/src/main/java/org/apache/cxf/ api/src/main/java/org/apache/cxf/continuations/ rt...

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,74 @@
+/**
+ * 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.service.invoker;
+
+import java.lang.reflect.Modifier;
+import java.util.ResourceBundle;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.injection.ResourceInjector;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.resource.ResourceManager;
+
+/**
+ * Creates a new instance of the service object for each call to create().
+ */
+public class PerRequestFactory implements Factory {
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(PerRequestFactory.class);
+
+    private final Class svcClass;
+
+    public PerRequestFactory(final Class svcClass) {
+        super();
+        this.svcClass = svcClass;
+    }
+
+    public Object create(Exchange ex) throws Throwable {
+        try {
+            if (svcClass.isInterface()) {
+                throw new Fault(new Message("SVC_CLASS_IS_INTERFACE", BUNDLE, svcClass.getName()));
+            }
+
+            if (Modifier.isAbstract(svcClass.getModifiers())) {
+                throw new Fault(new Message("SVC_CLASS_IS_ABSTRACT", BUNDLE, svcClass.getName()));
+            }
+            Object o = svcClass.newInstance();
+            Bus b = ex.get(Bus.class);
+            ResourceManager resourceManager = b.getExtension(ResourceManager.class);
+            if (resourceManager != null) {
+                ResourceInjector injector = new ResourceInjector(resourceManager);
+                injector.inject(o);
+                injector.construct(o);
+            }
+            return o;
+        } catch (InstantiationException e) {
+            throw new Fault(new Message("COULD_NOT_INSTANTIATE", BUNDLE), e);
+        } catch (IllegalAccessException e) {
+            throw new Fault(new Message("ILLEGAL_ACCESS", BUNDLE), e);
+        }
+    }
+
+    public void release(Exchange ex, Object o) {
+        //nothing to do
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PerRequestFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,114 @@
+/**
+ * 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.service.invoker;
+
+import java.util.Collection;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+
+import org.apache.cxf.message.Exchange;
+
+/**
+ * Factory the maintains a pool of instances that are used.
+ * 
+ * Can optionally create more instances than the size of the queue
+ */
+public class PooledFactory implements Factory {
+    BlockingQueue<Object> pool;
+    Factory factory;
+    int count;
+    int max;
+    boolean createMore;
+
+    /**
+     * Pool of instances of the svcClass
+     * @param svcClass the class to create
+     * @param max the absolute maximum number to create and pool
+     */
+    public PooledFactory(final Class svcClass, int max) {
+        this(new PerRequestFactory(svcClass), max, false);
+    }
+    /**
+     * Pool of instances contructed from the given factory
+     * @param factory
+     * @param max the absolute maximum number to create and pool
+     */
+    public PooledFactory(final Factory factory, int max) {
+        this(factory, max, false);
+    }
+
+    /**
+     * Pool of instances contructed from the given factory
+     * @param factory
+     * @param max the absolute maximum number to create and pool
+     * @param createMore If the pool is empty, but max objects have already 
+     * been constructed, should more be constructed on a per-request basis (and 
+     * then discarded when done) or should requests block until instances are 
+     * released back into the pool. 
+     */
+    public PooledFactory(final Factory factory, int max, boolean createMore) {
+        this.factory = factory;
+        if (max < 1) {
+            max = 16;
+        }
+        pool = new ArrayBlockingQueue<Object>(max, true);
+        this.max = max;
+        this.count = 0;
+        this.createMore = createMore;
+    }
+    
+    /**
+     * Pool constructed from the give Collection of objects. 
+     * @param objs The collection of objects to pre-polulate the pool
+     */
+    public PooledFactory(Collection<Object> objs) {
+        pool = new ArrayBlockingQueue<Object>(objs.size(), true);
+        pool.addAll(objs);
+    }
+
+    /** {@inheritDoc}*/
+    public Object create(Exchange ex) throws Throwable {
+        if (factory == null 
+            || ((count >= max) && !createMore)) {
+            return pool.take();
+        }
+        Object o = pool.poll();
+        if (o == null) {
+            return createObject(ex);
+        }
+        return o;
+    }
+    protected synchronized Object createObject(Exchange e) throws Throwable {
+        //recheck the count/max stuff now that we're in a sync block
+        if (factory == null 
+            || ((count >= max) && !createMore)) {
+            return pool.take();
+        }
+        
+        count++;
+        return factory.create(e);        
+    }
+
+    /** {@inheritDoc}*/
+    public void release(Exchange ex, Object o) {
+        pool.offer(o);
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/PooledFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,59 @@
+/**
+ * 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.service.invoker;
+
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.service.Service;
+
+/**
+ * Creates a new instance for each session.
+ * 
+ * This may have restrictions on what the bean can look like.   For example, 
+ * some session implementations require the beans to be Serializable
+ */
+public class SessionFactory implements Factory {
+    Factory factory;
+    public SessionFactory(Class<?> svcClass) {
+        this(new PerRequestFactory(svcClass));
+    }
+    public SessionFactory(Factory f) {
+        factory = f;
+    }
+
+    /** {@inheritDoc}*/
+    public Object create(Exchange e) throws Throwable {
+        Service serv = e.get(Service.class);
+        Object o = null;
+        synchronized (serv) {
+            o = e.getSession().get(serv.getName());
+            if (o == null) {
+                o = factory.create(e);
+                e.getSession().put(serv.getName(), o);
+            }
+        }
+        return o;
+    }
+
+    /** {@inheritDoc}*/
+    public void release(Exchange e, Object o) {
+        //nothing
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SessionFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,61 @@
+/**
+ * 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.service.invoker;
+
+import org.apache.cxf.message.Exchange;
+
+/**
+ * Always returns a single instance of the bean.
+ * 
+ * This is generally the default.
+ */
+public class SingletonFactory implements Factory {
+    Object bean;
+    Factory factory;
+    public SingletonFactory(final Object bean) {
+        this.bean = bean;
+    }
+    public SingletonFactory(final Class<?> beanClass) {
+        this.factory = new PerRequestFactory(beanClass);
+    }
+    public SingletonFactory(final Factory f) {
+        this.factory = f;
+    }
+
+    /** {@inheritDoc}*/
+    public Object create(Exchange ex) throws Throwable {
+        if (bean == null && factory != null) {
+            createBean(ex);
+        }
+        return bean;
+    }
+
+    private synchronized void createBean(Exchange e) throws Throwable {
+        if (bean == null) {
+            bean = factory.create(e);
+        }
+    }
+    
+    /** {@inheritDoc}*/
+    public void release(Exchange ex, Object o) {
+        //nothing to do
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SingletonFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,58 @@
+/**
+ * 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.service.invoker;
+
+import org.apache.cxf.message.Exchange;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * Factory that will query the Spring ApplicationContext for the 
+ * appropriate bean for each request.
+ * 
+ * This can be expensive.  If the bean is "prototype" or similar such that a 
+ * new instance is created each time, this could slow things down.  In that 
+ * case, it's recommended to use this in conjunction with the PooledFactory
+ * to pool the beans or the SessionFactory or similar.
+ */
+public class SpringBeanFactory implements Factory, ApplicationContextAware {
+    ApplicationContext ctx;
+    String beanName;
+    
+    public SpringBeanFactory(String name) {
+        beanName = name;
+    }
+    
+    /** {@inheritDoc}*/
+    public Object create(Exchange e) throws Throwable {
+        return ctx.getBean(beanName);
+    }
+
+    /** {@inheritDoc}*/
+    public void release(Exchange e, Object o) {
+        //nothing
+    }
+
+    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
+        ctx = arg0;
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,89 @@
+/**
+ * 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.transport;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+/**
+ * Abstract base class factoring out common Conduit logic,
+ * allowing non-decoupled transports to be written without any
+ * regard for the decoupled back-channel or partial response logic.
+ */
+public abstract class AbstractConduit 
+    extends AbstractObservable implements Conduit {
+
+    protected final EndpointReferenceType target;
+
+    public AbstractConduit(EndpointReferenceType t) {
+        target = t;
+    }
+
+    /**
+     * @return the reference associated with the target Destination
+     */    
+    public EndpointReferenceType getTarget() {
+        return target;
+    }
+
+    /**
+     * Retrieve the back-channel Destination.
+     * 
+     * @return the backchannel Destination (or null if the backchannel is
+     * built-in)
+     */
+    public Destination getBackChannel() {
+        return null;
+    }
+
+    /**
+     * @param message for which content should be closed.
+     */    
+    public void close(Message msg) throws IOException {
+        OutputStream os = msg.getContent(OutputStream.class);
+        if (os != null) {
+            os.close();
+        }
+        InputStream in = msg.getContent(InputStream.class);
+        if (in != null) {
+            in.close();
+        }
+    }
+    
+    /**
+     * Close the conduit.
+     */
+    public void close() {
+        // nothing to do by default
+    }
+    
+    public String toString() {
+        return "conduit: " + this.getClass() + System.identityHashCode(this)
+               + "target: "
+               +  ((getTarget() != null
+                   && getTarget().getAddress() != null)
+                   ? getTarget().getAddress().getValue()
+                   : "null");
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractConduit.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,180 @@
+/**
+ * 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.transport;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Logger;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+/**
+ * Abstract base class factoring out common Destination logic, 
+ * allowing non-decoupled transports to be written without any
+ * regard for the decoupled back-channel or partial response logic.
+ */
+public abstract class AbstractDestination
+    extends AbstractObservable implements Destination, DestinationWithEndpoint {
+
+    protected final EndpointReferenceType reference;
+    protected final EndpointInfo endpointInfo;
+    protected final Bus bus;
+    
+    public AbstractDestination(EndpointReferenceType ref,
+                               EndpointInfo ei) {
+        this(null, ref, ei);
+    }
+    
+    public AbstractDestination(Bus b,
+                               EndpointReferenceType ref,
+                               EndpointInfo ei) {
+        reference = ref;
+        endpointInfo = ei;
+        bus = b;
+    }
+    
+    /**
+     * @return the reference associated with this Destination
+     */    
+    public EndpointReferenceType getAddress() {
+        return reference;
+    }
+
+    /**
+     * Retreive a back-channel Conduit, which must be policy-compatible
+     * with the current Message and associated Destination. For example
+     * compatible Quality of Protection must be asserted on the back-channel.
+     * This would generally only be an issue if the back-channel is decoupled.
+     * 
+     * @param inMessage the current inbound message (null to indicate a 
+     * disassociated back-channel)
+     * @param partialResponse in the decoupled case, this is expected to be the
+     * outbound Message to be sent over the in-built back-channel. 
+     * @param address the backchannel address (null to indicate anonymous)
+     * @return a suitable Conduit
+     */
+    public Conduit getBackChannel(Message inMessage,
+                                  Message partialResponse,
+                                  EndpointReferenceType address)
+        throws IOException {
+        Conduit backChannel = null;
+        Exchange ex = inMessage.getExchange();
+        EndpointReferenceType target = address != null
+                                       ? address
+                                       : ex.get(EndpointReferenceType.class);
+        if (target == null) {
+            backChannel = getInbuiltBackChannel(inMessage);
+        } else {
+            if (partialResponse != null) {
+                if (markPartialResponse(partialResponse, target)) {
+                    backChannel = getInbuiltBackChannel(inMessage);
+                }
+            } else {
+                ConduitInitiator conduitInitiator = getConduitInitiator();
+                if (conduitInitiator != null) {
+                    backChannel = conduitInitiator.getConduit(endpointInfo, target);
+                    // ensure decoupled back channel input stream is closed
+                    backChannel.setMessageObserver(new MessageObserver() {
+                        public void onMessage(Message m) {
+                            if (m.getContentFormats().contains(InputStream.class)) {
+                                InputStream is = m.getContent(InputStream.class);
+                                try {
+                                    is.close();
+                                } catch (Exception e) {
+                                    // ignore
+                                }
+                            }
+                        }
+                    });
+                }
+            }
+        }
+        return backChannel;
+    }
+        
+    /**
+     * Shutdown the Destination, i.e. stop accepting incoming messages.
+     */
+    public void shutdown() {
+        // nothing to do by default
+    }
+
+    /**
+     * Mark message as a partial message. Only required if decoupled
+     * mode is supported.
+     * 
+     * @param partialResponse the partial response message
+     * @param the decoupled target
+     * @return true iff partial responses are supported
+     */
+    protected boolean markPartialResponse(Message partialResponse,
+                                          EndpointReferenceType decoupledTarget) {
+        return false;
+    }
+    
+    /**
+     * @return the associated conduit initiator, or null if decoupled mode
+     * not supported.
+     */
+    protected ConduitInitiator getConduitInitiator() {
+        return null;
+    }
+    
+    /**
+     * @param inMessage the incoming message
+     * @return the inbuilt backchannel
+     */
+    protected abstract Conduit getInbuiltBackChannel(Message inMessage);
+    
+    /**
+     * Backchannel conduit.
+     */
+    protected abstract class AbstractBackChannelConduit extends AbstractConduit {
+
+        public AbstractBackChannelConduit() {
+            super(EndpointReferenceUtils.getAnonymousEndpointReference());
+        }
+
+        /**
+         * Register a message observer for incoming messages.
+         * 
+         * @param observer the observer to notify on receipt of incoming
+         */
+        public void setMessageObserver(MessageObserver observer) {
+            // shouldn't be called for a back channel conduit
+        }
+        
+        protected Logger getLogger() {
+            return AbstractDestination.this.getLogger();
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public EndpointInfo getEndpointInfo() {
+        return endpointInfo;
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractDestination.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,105 @@
+/**
+ * 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.transport;
+
+import java.util.Map;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.ReferenceParametersType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND;
+
+public abstract class AbstractMultiplexDestination extends AbstractDestination implements
+    MultiplexDestination {
+
+    private static final QName MULTIPLEX_ID_QNAME = new QName("http://multiplex.transport.cxf.apache.org",
+                                                              "id");
+
+    public AbstractMultiplexDestination(Bus b, EndpointReferenceType ref, EndpointInfo ei) {
+        super(b, ref, ei);
+    }
+
+    /**
+     * Builds an new endpoint reference using the current target reference as a template. 
+     * The supplied id is endcoded using a reference parameter.
+     * This requires the ws-a interceptors to propagate the reference parameters
+     * on subsequent invokes using the returned reference.
+     * @param the id to encode in the new reference
+     * @return the new reference with the id encoded as a reference parameter
+     * @see org.apache.cxf.transport.MultiplexDestination#getAddressWithId(java.lang.String)
+      
+     */
+    public EndpointReferenceType getAddressWithId(String id) {
+        EndpointReferenceType epr = EndpointReferenceUtils.duplicate(
+            EndpointReferenceUtils.mint(reference, bus));
+        ReferenceParametersType newParams = new org.apache.cxf.ws.addressing.ObjectFactory()
+            .createReferenceParametersType();
+        
+        ReferenceParametersType existingParams = epr.getReferenceParameters();
+        if (null != existingParams) {
+            newParams.getAny().addAll(existingParams.getAny());
+        }
+        
+        newParams.getAny().add(new JAXBElement<String>(MULTIPLEX_ID_QNAME, String.class, id));
+        epr.setReferenceParameters(newParams);
+        return epr;
+    }
+
+    /**
+     * Obtain id from reference parameters of the ws-a to address
+     * Requires the existance of ws-a interceptors on dispatch path to provide access 
+     * to the ws-a headers
+     * @param the current invocation or message context
+     * @return the id from the reference parameters of the  ws-a-to address or null if not found
+     * @see org.apache.cxf.transport.MultiplexDestination#getId(java.util.Map)
+     */
+    public String getId(Map contextMap) {
+        String markedParam = null;
+        AddressingProperties maps = (AddressingProperties)contextMap
+            .get(SERVER_ADDRESSING_PROPERTIES_INBOUND);
+        if (null != maps) {
+            EndpointReferenceType toEpr = maps.getToEndpointReference();
+            if (null != toEpr) {
+                markedParam = extractStringElementFromAny(MULTIPLEX_ID_QNAME, toEpr);
+            }
+        }
+        return markedParam;
+    }
+
+    private String extractStringElementFromAny(QName elementQName, EndpointReferenceType epr) {
+        String elementStringValue = null;
+        if (null != epr.getReferenceParameters()) {
+            for (Object o : epr.getReferenceParameters().getAny()) {
+                if (o instanceof JAXBElement) {
+                    JAXBElement el = (JAXBElement)o;
+                    if (el.getName().equals(elementQName)) {
+                        elementStringValue = (String)el.getValue();
+                    }
+                }
+            }
+        }
+        return elementStringValue;
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,127 @@
+/**
+ * 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.transport;
+
+import java.util.logging.Logger;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+public abstract class AbstractObservable implements Observable {
+
+    protected MessageObserver incomingObserver;
+
+    /**
+     * Register a message observer for incoming messages.
+     * 
+     * @param observer the observer to notify on receipt of incoming
+     * message
+     */
+    public synchronized void setMessageObserver(MessageObserver observer) {
+        if (observer != incomingObserver) {
+            MessageObserver old = incomingObserver;
+            incomingObserver = observer;
+            if (observer != null) {
+                getLogger().fine("registering incoming observer: " + observer);
+                if (old == null) {
+                    try {
+                        activate();
+                    } catch (RuntimeException ex) {
+                        incomingObserver = null;
+                        throw ex;
+                    }
+                }
+            } else {
+                if (old != null) {
+                    getLogger().fine("unregistering incoming observer: " + old);
+                    deactivate();
+                }
+            }
+        }
+    }
+   
+    /**
+     * @return the observer to notify on receipt of incoming message
+     */
+    public MessageObserver getMessageObserver() {
+        return incomingObserver;
+    }
+
+    /**
+     * Get the target reference .
+     * 
+     * @param ei the corresponding EndpointInfo
+     * @return the actual target
+     */
+    protected static EndpointReferenceType getTargetReference(EndpointInfo ei, Bus bus) {
+        return getTargetReference(ei, null, bus);
+    }
+    
+    /**
+     * Get the target endpoint reference.
+     * 
+     * @param ei the corresponding EndpointInfo
+     * @param t the given target EPR if available
+     * @param bus the Bus
+     * @return the actual target
+     */
+    protected static EndpointReferenceType getTargetReference(EndpointInfo ei,
+                                                              EndpointReferenceType t,
+                                                              Bus bus) {
+        EndpointReferenceType ref = null;
+        if (null == t) {
+            ref = new EndpointReferenceType();
+            AttributedURIType address = new AttributedURIType();
+            address.setValue(ei.getAddress());
+            ref.setAddress(address);
+            if (ei.getService() != null) {
+                EndpointReferenceUtils.setServiceAndPortName(ref, 
+                                                             ei.getService().getName(), 
+                                                             ei.getName().getLocalPart());
+            }
+        } else {
+            ref = t;
+        }
+        return ref;
+    }
+    
+    /**
+     * Activate messages flow.
+     */
+    protected void activate() {
+        // nothing to do by default
+    }
+
+    /**
+     * Deactivate messages flow.
+     */
+    protected void deactivate() {
+        // nothing to do by default        
+    }
+    
+    /**
+     * @return the logger to use
+     */
+    protected abstract Logger getLogger();
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,44 @@
+/**
+ * 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.transport;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.cxf.helpers.CastUtils;
+
+/**
+ * Helper methods for {@link DestinationFactory}s and {@link ConduitInitiator}s.
+ */
+public abstract class AbstractTransportFactory {
+    private List<String> transportIds;
+
+    public List<String> getTransportIds() {
+        return transportIds;
+    }
+
+    public void setTransportIds(List<String> transportIds) {
+        this.transportIds = transportIds;
+    }
+
+    public Set<String> getUriPrefixes() {
+        return CastUtils.cast(Collections.EMPTY_SET);
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/AbstractTransportFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,138 @@
+/**
+ * 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.transport;
+
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.binding.Binding;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseChainCache;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.phase.PhaseManager;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.ServiceImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+
+public class ChainInitiationObserver implements MessageObserver {
+    protected Endpoint endpoint;
+    protected Bus bus;
+    
+    private PhaseChainCache chainCache = new PhaseChainCache();
+
+    public ChainInitiationObserver(Endpoint endpoint, Bus bus) {
+        super();
+        this.endpoint = endpoint;
+        this.bus = bus;
+    }
+
+    public void onMessage(Message m) {
+        Bus origBus = BusFactory.getThreadDefaultBus(false);
+        BusFactory.setThreadDefaultBus(bus);
+        try {
+            PhaseInterceptorChain phaseChain = null;
+            
+            if (m.getInterceptorChain() instanceof PhaseInterceptorChain) {
+                phaseChain = (PhaseInterceptorChain)m.getInterceptorChain();
+                if (phaseChain.getState() == InterceptorChain.State.PAUSED) {
+                    phaseChain.resume();
+                    return;
+                }
+            }
+            
+            Message message = getBinding().createMessage(m);
+            Exchange exchange = message.getExchange();
+            if (exchange == null) {
+                exchange = new ExchangeImpl();
+                exchange.setInMessage(message);
+            }
+            setExchangeProperties(exchange, message);
+    
+            // setup chain
+            phaseChain = chainCache.get(bus.getExtension(PhaseManager.class).getInPhases(),
+                                                         bus.getInInterceptors(),
+                                                         endpoint.getService().getInInterceptors(),
+                                                         endpoint.getInInterceptors(),
+                                                         getBinding().getInInterceptors());
+            
+            
+            message.setInterceptorChain(phaseChain);
+            
+            phaseChain.setFaultObserver(endpoint.getOutFaultObserver());
+           
+            phaseChain.doIntercept(message);
+        } finally {
+            BusFactory.setThreadDefaultBus(origBus);
+        }
+    }
+
+
+    protected Binding getBinding() {
+        return endpoint.getBinding();
+    }
+    
+    protected void setExchangeProperties(Exchange exchange, Message m) {
+        exchange.put(Endpoint.class, endpoint);
+        exchange.put(Service.class, endpoint.getService());
+        exchange.put(Binding.class, getBinding());
+        exchange.put(Bus.class, bus);
+        if (exchange.getDestination() == null) {
+            exchange.setDestination(m.getDestination());
+        }
+        if (endpoint != null && (endpoint.getService() instanceof ServiceImpl)) {
+
+            EndpointInfo endpointInfo = endpoint.getEndpointInfo();
+
+            QName serviceQName = endpointInfo.getService().getName();
+            exchange.put(Message.WSDL_SERVICE, serviceQName);
+
+            QName interfaceQName = endpointInfo.getService().getInterface().getName();
+            exchange.put(Message.WSDL_INTERFACE, interfaceQName);
+
+            QName portQName = endpointInfo.getName();
+            exchange.put(Message.WSDL_PORT, portQName);
+            URI wsdlDescription = endpointInfo.getProperty("URI", URI.class);
+            if (wsdlDescription == null) {
+                String address = endpointInfo.getAddress();
+                try {
+                    wsdlDescription = new URI(address + "?wsdl");
+                } catch (URISyntaxException e) {
+                    // do nothing
+                }
+                endpointInfo.setProperty("URI", wsdlDescription);
+            }
+            exchange.put(Message.WSDL_DESCRIPTION, wsdlDescription);
+        }  
+    }
+
+    public Endpoint getEndpoint() {
+        return endpoint;
+    }
+    
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,126 @@
+/**
+ * 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.transport;
+
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.configuration.spring.MapProvider;
+
+public final class ConduitInitiatorManagerImpl implements ConduitInitiatorManager {
+
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(ConduitInitiatorManager.class);
+
+    Map<String, ConduitInitiator> conduitInitiators;
+    
+    private Bus bus;
+    public ConduitInitiatorManagerImpl() {
+        conduitInitiators = new ConcurrentHashMap<String, ConduitInitiator>();
+    }
+    
+
+    public ConduitInitiatorManagerImpl(MapProvider<String, ConduitInitiator> conduitInitiators) {
+        this.conduitInitiators = conduitInitiators.createMap();
+    }
+
+    public ConduitInitiatorManagerImpl(Map<String, ConduitInitiator> conduitInitiators) {
+        this.conduitInitiators = conduitInitiators;
+    }
+    
+    /**
+     * Spring is slow to resolve constructors. This accessor allows
+     * for initialization via a property.
+     * @param mapProvider
+     */
+    public void setMapProvider(MapProvider<String, ConduitInitiator> mapProvider) {
+        this.conduitInitiators = mapProvider.createMap();
+    }
+    
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+    
+    @PostConstruct
+    public void register() {
+        if (null != bus) {
+            bus.setExtension(this, ConduitInitiatorManager.class);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.cxf.bus.ConduitInitiatorManager#registerConduitInitiator(java.lang.String,
+     *      org.apache.cxf.transports.ConduitInitiator)
+     */
+    public void registerConduitInitiator(String namespace, ConduitInitiator factory) {
+        conduitInitiators.put(namespace, factory);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.cxf.bus.ConduitInitiatorManager#deregisterConduitInitiator(java.lang.String)
+     */
+    public void deregisterConduitInitiator(String namespace) {
+        conduitInitiators.remove(namespace);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.cxf.bus.ConduitInitiatorManager#ConduitInitiator(java.lang.String)
+     */
+    /**
+     * Returns the conduit initiator for the given namespace, constructing it
+     * (and storing in the cache for future reference) if necessary, using its
+     * list of factory classname to namespace mappings.
+     * 
+     * @param namespace the namespace.
+     */
+    public ConduitInitiator getConduitInitiator(String namespace) throws BusException {
+        ConduitInitiator factory = conduitInitiators.get(namespace);
+        if (null == factory) {
+            throw new BusException(new Message("NO_CONDUIT_INITIATOR", BUNDLE, namespace));
+        }
+        return factory;
+    }
+
+    @PreDestroy
+    public void shutdown() {
+        // nothing to do
+    }
+
+    public ConduitInitiator getConduitInitiatorForUri(String uri) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/ConduitInitiatorManagerImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,153 @@
+/**
+ * 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.transport;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.bus.extension.DeferredMap;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.configuration.spring.MapProvider;
+
+public final class DestinationFactoryManagerImpl implements DestinationFactoryManager {
+
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(DestinationFactoryManager.class);
+
+    Map<String, DestinationFactory> destinationFactories;
+    Properties factoryNamespaceMappings;
+
+    private Bus bus;
+
+    public DestinationFactoryManagerImpl() {
+        destinationFactories = new ConcurrentHashMap<String, DestinationFactory>();
+    }
+
+    public DestinationFactoryManagerImpl(Map<String, DestinationFactory> destinationFactories) {
+        this.destinationFactories = destinationFactories;
+    }
+    public DestinationFactoryManagerImpl(MapProvider<String, DestinationFactory> destinationFactories) {
+        this.destinationFactories = destinationFactories.createMap();
+    }
+
+    /**
+     * Spring is slow for constructors with arguments. This
+     * accessor permits initialization via a property.
+     * @param mapProvider
+     */
+    public void setMapProvider(MapProvider<String, DestinationFactory> mapProvider) {
+        this.destinationFactories = mapProvider.createMap();
+    }
+
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+
+    @PostConstruct
+    public void register() {
+        if (null != bus) {
+            bus.setExtension(this, DestinationFactoryManager.class);
+        }
+    }
+
+
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.cxf.bus.DestinationFactoryManager#registerDestinationFactory(java.lang.String,
+     *      org.apache.cxf.transports.DestinationFactory)
+     */
+    public void registerDestinationFactory(String namespace, DestinationFactory factory) {
+        destinationFactories.put(namespace, factory);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.cxf.bus.DestinationFactoryManager#deregisterDestinationFactory(java.lang.String)
+     */
+    public void deregisterDestinationFactory(String namespace) {
+        destinationFactories.remove(namespace);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.cxf.bus.DestinationFactoryManager#DestinationFactory(java.lang.String)
+     */
+    /**
+     * Returns the conduit initiator for the given namespace, constructing it
+     * (and storing in the cache for future reference) if necessary, using its
+     * list of factory classname to namespace mappings.
+     *
+     * @param namespace the namespace.
+     */
+    public DestinationFactory getDestinationFactory(String namespace) throws BusException {
+        DestinationFactory factory = destinationFactories.get(namespace);
+        if (null == factory) {
+            throw new BusException(new Message("NO_DEST_FACTORY", BUNDLE, namespace));
+        }
+        return factory;
+    }
+
+    @PreDestroy
+    public void shutdown() {
+        // nothing to do
+    }
+
+    public DestinationFactory getDestinationFactoryForUri(String uri) {
+        //If the uri is related path or has no protocol prefix , we will set it to be http
+        if (uri.startsWith("/") || uri.indexOf(":") < 0) {
+            uri = "http://" + uri;
+        }
+        //first attempt the ones already registered
+        for (Map.Entry<String, DestinationFactory> df : destinationFactories.entrySet()) {
+            for (String prefix : df.getValue().getUriPrefixes()) {
+                if (uri.startsWith(prefix)) {
+                    return df.getValue();
+                }
+            }
+        }
+        //looks like we'll need to undefer everything so we can try again.
+        if (destinationFactories instanceof DeferredMap) {
+            ((DeferredMap)destinationFactories).undefer();
+            for (DestinationFactory df : destinationFactories.values()) {
+                for (String prefix : df.getUriPrefixes()) {
+                    if (uri.startsWith(prefix)) {
+                        return df;
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/DestinationFactoryManagerImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,48 @@
+/**
+ * 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.transport;
+
+public final class HttpUriMapper {
+    
+    private HttpUriMapper() {
+        // Util class doesn't need public constructor
+    }
+    
+    public static String getContextName(String path) {
+        String contextName = "";        
+        int idx = path.lastIndexOf('/');
+        if (idx >= 0) {
+            contextName = path.substring(0, idx);          
+        }
+        return contextName;
+    }
+    
+    public static String getResourceBase(String path) {
+        String servletMap = "";
+        int idx = path.lastIndexOf('/');
+        if (idx >= 0) {
+            servletMap = path.substring(idx);
+        }
+        if ("".equals(servletMap) || "".equals(path)) {
+            servletMap = "/";
+        } 
+        return servletMap;
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/HttpUriMapper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties Wed Nov 12 04:42:46 2008
@@ -0,0 +1,22 @@
+#
+#
+#    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.
+#
+#
+NO_CONDUIT_INITIATOR=No conduit initiator was found for the namespace {0}.
+NO_DEST_FACTORY=No DestinationFactory was found for the namespace {0}.

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/Messages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java Wed Nov 12 04:42:46 2008
@@ -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.transport;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.phase.PhaseManager;
+
+/**
+ * This MessageObserver creates an Interceptor chain which adds in the interceptors
+ * set on this class and the global Bus interceptors. At somepoint, it is expected
+ * that these interceptors will resolve the appropriate Endpoint/Binding combination
+ * and continue setting up the chain.
+ *
+ */
+public class MultipleEndpointObserver implements MessageObserver {
+    
+    public static final String ENDPOINTS = "multipleEndpointObserver.endpoints";
+    
+    protected Bus bus;
+    protected List<Interceptor> bindingInterceptors = new CopyOnWriteArrayList<Interceptor>();
+    protected List<Interceptor> routingInterceptors = new CopyOnWriteArrayList<Interceptor>();
+    private Set<Endpoint> endpoints = new CopyOnWriteArraySet<Endpoint>();
+    
+    public MultipleEndpointObserver(Bus bus) {
+        super();
+        this.bus = bus;
+    }
+
+    public void onMessage(Message message) {
+        Bus origBus = BusFactory.getThreadDefaultBus(false);
+        BusFactory.setThreadDefaultBus(bus);
+        try {
+            message = createMessage(message);
+            Exchange exchange = message.getExchange();
+            if (exchange == null) {
+                exchange = new ExchangeImpl();
+                exchange.setInMessage(message);
+            }
+            setExchangeProperties(exchange, message);
+            
+            // setup chain
+            PhaseInterceptorChain chain = createChain();
+            
+            message.setInterceptorChain(chain);
+            
+            chain.add(bus.getInInterceptors());
+            if (bindingInterceptors != null) {
+                chain.add(bindingInterceptors);
+            }
+            if (routingInterceptors != null) {
+                chain.add(routingInterceptors);
+            }
+            
+            if (endpoints != null) {
+                exchange.put(ENDPOINTS, endpoints);
+            }
+            
+            chain.doIntercept(message);
+        } finally {
+            BusFactory.setThreadDefaultBus(origBus);
+        }
+    }
+
+    /**
+     * Give a chance for a Binding to customize their message
+     */
+    protected Message createMessage(Message message) {
+        return message;
+    }
+
+    protected PhaseInterceptorChain createChain() {
+        PhaseInterceptorChain chain = new PhaseInterceptorChain(bus.getExtension(PhaseManager.class)
+            .getInPhases());
+        return chain;
+    }
+    
+    protected void setExchangeProperties(Exchange exchange, Message m) {
+        exchange.put(Bus.class, bus);
+        if (exchange.getDestination() == null) {
+            exchange.setDestination(m.getDestination());
+        }
+    }
+
+    public List<Interceptor> getBindingInterceptors() {
+        return bindingInterceptors;
+    }
+
+    public List<Interceptor> getRoutingInterceptors() {
+        return routingInterceptors;
+    }
+
+    public Set<Endpoint> getEndpoints() {
+        return endpoints;
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/MultipleEndpointObserver.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,87 @@
+/**
+ * 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.transport.http;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.transports.http.QueryHandler;
+import org.apache.cxf.transports.http.QueryHandlerRegistry;
+
+public class QueryHandlerRegistryImpl implements QueryHandlerRegistry {
+    
+    List<QueryHandler> queryHandlers;
+    Bus bus;
+    
+    
+    public QueryHandlerRegistryImpl() {
+    }
+    
+    public QueryHandlerRegistryImpl(Bus b, List<QueryHandler> handlers) {
+        bus = b;
+        queryHandlers = new CopyOnWriteArrayList<QueryHandler>(handlers);
+    }
+    
+    public void setQueryHandlers(List<QueryHandler> handlers) {
+        this.queryHandlers = new CopyOnWriteArrayList<QueryHandler>(handlers);
+    }
+
+    @PostConstruct
+    public void register() {
+        if (queryHandlers == null) {
+            queryHandlers = new CopyOnWriteArrayList<QueryHandler>();
+            if (bus != null) {
+                WSDLQueryHandler wsdlQueryHandler = new WSDLQueryHandler();
+                wsdlQueryHandler.setBus(bus);
+                queryHandlers.add(wsdlQueryHandler);
+            }
+        }
+        if (null != bus) {
+            bus.setExtension(this, QueryHandlerRegistry.class);
+        }
+    }
+
+    public List<QueryHandler> getHandlers() {
+        return queryHandlers;
+    }
+
+    public void registerHandler(QueryHandler handler) {
+        queryHandlers.add(handler);
+    }
+
+    public void registerHandler(QueryHandler handler, int position) {
+        queryHandlers.add(position, handler);
+    }
+    
+    @Resource
+    public void setBus(Bus b) {
+        bus = b;
+    }
+
+    public Bus getBus() {
+        return bus;
+    }
+
+}
+

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryHandlerRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties Wed Nov 12 04:42:46 2008
@@ -0,0 +1,23 @@
+#
+#
+#    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.
+#
+#
+COULD_NOT_PROVIDE_WSDL = Exception occurred while trying to process {0}
+WSDL_NOT_FOUND = Could not find wsdl {0}
+SCHEMA_NOT_FOUND = Could not find xsd {0}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/QueryMessages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java Wed Nov 12 04:42:46 2008
@@ -0,0 +1,71 @@
+/**
+ * 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.transport.http;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * Functions used to work with URLs in HTTP-related code. 
+ */
+public final class UrlUtilities {
+    
+    private UrlUtilities() {
+    }
+
+    /**
+     * Create a map from String to String that represents the contents of the query
+     * portion of a URL. For each x=y, x is the key and y is the value.
+     * @param s the query part of the URI.
+     * @return the map.
+     */
+    public static Map<String, String> parseQueryString(String s) {
+        Map<String, String> ht = new HashMap<String, String>();
+        StringTokenizer st = new StringTokenizer(s, "&");
+        while (st.hasMoreTokens()) {
+            String pair = (String)st.nextToken();
+            int pos = pair.indexOf('=');
+            if (pos == -1) {
+                ht.put(pair.toLowerCase(), "");
+            } else {
+                ht.put(pair.substring(0, pos).toLowerCase(),
+                       pair.substring(pos + 1));
+            }
+        }
+        return ht;
+    }
+    
+    /**
+     * Return everything in the path up to the last slash in a URI.
+     * @param baseURI
+     * @return the trailing 
+     */
+    public static String getStem(String baseURI) {
+        URI uri = URI.create(baseURI);
+        baseURI = uri.getRawPath();
+        int idx = baseURI.lastIndexOf('/');
+        if (idx != -1) {
+            baseURI = baseURI.substring(0, idx);
+        }
+        return URI.create(baseURI).getPath();
+    }
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/UrlUtilities.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java?rev=713355&view=auto
==============================================================================
--- cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java (added)
+++ cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java Wed Nov 12 04:42:46 2008
@@ -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.transport.http;
+
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.i18n.UncheckedException;
+
+public class WSDLQueryException extends UncheckedException {
+
+    public WSDLQueryException(Message msg, Throwable t) {
+        super(msg, t);
+    }
+
+}

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/sandbox/2.2.x-continuations/rt/core/src/main/java/org/apache/cxf/transport/http/WSDLQueryException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date