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

svn commit: r469089 [1/2] - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/message/ api/src/main/java/org/apache/cxf/phase/ common/common/src/main/java/org/apache/cxf/common/util/ common/common/src/test/java/org/apache/cxf/common/util/ rt/bi...

Author: mmao
Date: Mon Oct 30 00:26:47 2006
New Revision: 469089

URL: http://svn.apache.org/viewvc?view=rev&rev=469089
Log:
CXF-159 Soap1.2 support HTTP GET

* Added soap12 namespaces for all the soap12 fault node
* Passthrough the interceptors when it's HTTP GET, to boost the speed.
* SOAP11,SOAP12,XMLBinding now all support HTTP GET (support both DOC/Lit, RPC)
* System tests for HTTP GET feature, add demos later.
* Set the content-type in Message.ProtocolHead, but can get from Message.ContentType as well.
  correct the fault message's content-type
* Added calculator service for GET test. (primitive type)
* Added soapbinding unit test for content-type etc.




Added:
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java   (with props)
    incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java   (with props)
    incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java   (with props)
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInterceptor.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java   (with props)
    incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/calculator/
    incubator/cxf/trunk/testutils/src/main/java/org/apache/cxf/calculator/CalculatorImpl.java   (with props)
    incubator/cxf/trunk/testutils/src/main/resources/wsdl/calculator.wsdl   (with props)
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
    incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java
    incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBinding.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MultipartMessageInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java
    incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
    incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingFactory.java
    incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainSetupInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/invoker/AbstractInvoker.java
    incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/Server.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/common/ClientServerTestBase.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxws/ClientServerXMLBareTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/soap12/Soap12ClientServerTest.java
    incubator/cxf/trunk/testutils/pom.xml

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/Message.java Mon Oct 30 00:26:47 2006
@@ -48,6 +48,7 @@
     String MTOM_ENABLED = Message.class.getName() + ".isMtomEnabled";
     String SCHEMA_VALIDATION_ENABLED = Message.class.getCanonicalName() + ".schemaValidationEnabled";
     String CONTENT_TYPE = Message.class.getName() + ".ContentType";
+    String BASE_PATH = Message.class.getName() + ".BASE_PATH";
 
     String getId();
     void setId(String id);

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/AbstractPhaseInterceptor.java Mon Oct 30 00:26:47 2006
@@ -22,6 +22,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.xml.stream.XMLStreamReader;
+
 import org.apache.cxf.message.Message;
 
 public abstract class AbstractPhaseInterceptor<T extends Message> implements PhaseInterceptor<T> {
@@ -82,5 +84,10 @@
     }
 
     public void handleFault(T message) {
+    }
+    
+    public boolean isGET(T message) {
+        String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
+        return "GET".equals(method) && message.getContent(XMLStreamReader.class) == null;
     }
 }

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java Mon Oct 30 00:26:47 2006
@@ -200,7 +200,7 @@
     private void unwind(Message message) {
         while (iterator.hasPrevious()) {
             Interceptor currentInterceptor = iterator.previous();
-            if (LOG.isLoggable(Level.FINE)) {
+            if (LOG.isLoggable(Level.INFO)) {
                 LOG.fine("Invoking handleFault on interceptor " + currentInterceptor);
             }
             currentInterceptor.handleFault(message);

Added: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java?view=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java (added)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,57 @@
+/**
+ * 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.common.util;
+
+public final class PrimitiveUtils {
+    
+    private PrimitiveUtils() {
+        
+    }
+
+    public static Object read(String value, Class type) {
+        Object ret = value;
+        if (Integer.TYPE.equals(type)) {
+            ret = Integer.valueOf(value);
+        }
+        if (Byte.TYPE.equals(type)) {
+            ret = Byte.valueOf(value);
+        }
+        if (Short.TYPE.equals(type)) {
+            ret = Short.valueOf(value);
+        }
+        if (Long.TYPE.equals(type)) {
+            ret = Long.valueOf(value);
+        }
+        if (Float.TYPE.equals(type)) {
+            ret = Float.valueOf(value);
+        }
+        if (Double.TYPE.equals(type)) {
+            ret = Double.valueOf(value);
+        }
+        if (Boolean.TYPE.equals(type)) {
+            ret = Boolean.valueOf(value);
+        }
+        if (Character.TYPE.equals(type)) {
+            ret = value.charAt(0);
+        }
+        // TODO others.
+        return ret;
+    }
+}

Propchange: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java Mon Oct 30 00:26:47 2006
@@ -68,6 +68,19 @@
         }
         return true;
     }
+    
+    public static String trim(String target, String token) {
+        int tokenLength = token.length();
+        int targetLength = target.length();
+        
+        if (target.startsWith(token)) {            
+            return trim(target.substring(tokenLength), token);
+        }
+        if (target.endsWith(token)) {            
+            return trim(target.substring(0, targetLength - tokenLength), token);
+        }
+        return target;
+    }
 
     public static boolean isEqualUri(String uri1, String uri2) {
 

Added: incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java?view=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java (added)
+++ incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,29 @@
+/**
+ * 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.common.util;
+
+import junit.framework.TestCase;
+
+public class StringUtilsTest extends TestCase {
+    public void testTrim() throws Exception {
+        String target = "////soapport///";
+        assertEquals("soapport", StringUtils.trim(target, "/"));
+    }
+}

Propchange: incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/common/common/src/test/java/org/apache/cxf/common/util/StringUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/http/src/main/java/org/apache/cxf/binding/http/URIParameterInterceptor.java Mon Oct 30 00:26:47 2006
@@ -22,6 +22,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -43,7 +44,7 @@
 import org.apache.ws.commons.schema.XmlSchemaElement;
 
 public class URIParameterInterceptor extends AbstractPhaseInterceptor<Message> {
-
+    private static final Logger LOG = Logger.getLogger(URIParameterInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(URIParameterInterceptor.class);
 
     public URIParameterInterceptor() {
@@ -55,8 +56,11 @@
     public void handleMessage(Message message) {
         String path = (String)message.get(Message.PATH_INFO);
         String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
-        String contentType = (String)message.get(HttpConstants.CONTENT_TYPE);
+        String contentType = (String)message.get(Message.CONTENT_TYPE);
 
+        LOG.info("URIParameterInterceptor handle message on path [" + path 
+                 + "] with Content-Type ["  + contentType + "]");
+        
         BindingOperationInfo op = message.getExchange().get(BindingOperationInfo.class);
 
         URIMapper mapper = (URIMapper)message.getExchange().get(Service.class).get(URIMapper.class.getName());
@@ -81,6 +85,8 @@
         if ("application/x-www-form-urlencoded.".equals(contentType)) {
             params = IriDecoderHelper.decode(path, location, message.getContent(InputStream.class));
         } else if ("application/xml".equals(contentType)) {
+            params = IriDecoderHelper.decodeIri(path, location);
+        } else if ("text/xml".equals(contentType)) {
             params = IriDecoderHelper.decodeIri(path, location);
         } else if ("multipart/form-data".equals(contentType)) {
             // TODO

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBinding.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBinding.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBinding.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBinding.java Mon Oct 30 00:26:47 2006
@@ -48,13 +48,15 @@
         return createMessage(new MessageImpl());
     }
 
+    @SuppressWarnings("unchecked")
     public Message createMessage(Message m) {
         SoapMessage soapMessage = new SoapMessage(m);
         soapMessage.setVersion(version);
+
         soapMessage.put(Message.CONTENT_TYPE, version.getContentType());
 
         if (mtomEnabled) {
-            m.put(Message.MTOM_ENABLED, Boolean.TRUE);
+            soapMessage.put(Message.MTOM_ENABLED, Boolean.TRUE);
         }
         return soapMessage;
     }

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java Mon Oct 30 00:26:47 2006
@@ -60,6 +60,7 @@
 import org.apache.cxf.interceptor.BareOutInterceptor;
 import org.apache.cxf.interceptor.StaxInInterceptor;
 import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
 import org.apache.cxf.interceptor.WrappedInInterceptor;
 import org.apache.cxf.interceptor.WrappedOutInterceptor;
 import org.apache.cxf.service.model.BindingInfo;
@@ -181,6 +182,7 @@
             sb.getOutInterceptors().add(new BareOutInterceptor());
         }
         
+        sb.getInInterceptors().add(new URIMappingInterceptor());
         return sb;
     }
 

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MultipartMessageInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MultipartMessageInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MultipartMessageInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MultipartMessageInterceptor.java Mon Oct 30 00:26:47 2006
@@ -19,6 +19,8 @@
 
 package org.apache.cxf.binding.soap.interceptor;
 
+import java.util.logging.Logger;
+
 import org.apache.cxf.binding.attachment.AttachmentDeserializer;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
@@ -29,6 +31,7 @@
     public static final String ATTACHMENT_DIRECTORY = "attachment-directory";
     public static final String ATTACHMENT_MEMORY_THRESHOLD = "attachment-memory-threshold";
     public static final int THRESHHOLD = 1024 * 100;
+    private static final Logger LOG = Logger.getLogger(MultipartMessageInterceptor.class.getName());
 
     /**
      * contruct the soap message with attachments from mime input stream
@@ -42,7 +45,10 @@
     }
     
     public void handleMessage(Message message) {
-        
+        if (isGET(message)) {
+            LOG.info("MultipartMessageInterceptor skipped in HTTP GET method");
+            return;
+        }
         AttachmentDeserializer ad = new AttachmentDeserializer(message);
         if (ad.preprocessMessage()) {
             message.put(AttachmentDeserializer.class, ad);

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/RPCInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -21,6 +21,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 
@@ -29,6 +30,7 @@
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
 import org.apache.cxf.interceptor.BareInInterceptor;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.model.BindingOperationInfo;
@@ -40,9 +42,12 @@
 
 public class RPCInInterceptor extends AbstractInDatabindingInterceptor {
 
+    private static final Logger LOG = Logger.getLogger(RPCInInterceptor.class.getName());
+    
     public RPCInInterceptor() {
         super();
         setPhase(Phase.UNMARSHAL);
+        addAfter(URIMappingInterceptor.class.getName());
     }
 
     private BindingOperationInfo getOperation(Message message, QName opName) {
@@ -50,6 +55,10 @@
     }
 
     public void handleMessage(Message message) {
+        if (isGET(message)) {
+            LOG.info("RPCInInterceptor skipped in HTTP GET method");
+            return;
+        }
         DepthXMLStreamReader xmlReader = getXMLStreamReader(message);
 
         BindingOperationInfo operation = null;

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java Mon Oct 30 00:26:47 2006
@@ -21,6 +21,7 @@
 
 import java.io.InputStream;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamConstants;
@@ -42,6 +43,7 @@
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class ReadHeadersInterceptor extends AbstractSoapInterceptor {
+    private static final Logger LOG = Logger.getLogger(ReadHeadersInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(ReadHeadersInterceptor.class);
 
     public ReadHeadersInterceptor() {
@@ -50,7 +52,10 @@
     }
 
     public void handleMessage(SoapMessage message) {
-        
+        if (isGET(message)) {
+            LOG.info("ReadHeadersInterceptor skipped in HTTP GET method");
+            return;
+        }
         XMLStreamReader xmlReader = message.getContent(XMLStreamReader.class);
         
         if (xmlReader == null) {

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -61,40 +61,40 @@
 
         XMLStreamReader reader = message.getContent(XMLStreamReader.class);
         Map<String, String> ns = new HashMap<String, String>();
-        ns.put("soap12", Soap12.SOAP_NAMESPACE);
+        ns.put("s", Soap12.SOAP_NAMESPACE);
         XPathUtils xu = new XPathUtils(ns);        
         
         try {
             Document fault = StaxUtils.read(new FragmentStreamReader(reader));
-            String faultCodeString = (String) xu.getValue("//soap12:Fault/Code/Value/text()", 
+            String faultCodeString = (String) xu.getValue("//s:Fault/s:Code/s:Value/text()", 
                                                         fault, 
                                                         XPathConstants.STRING);
             
             faultCode = XMLUtils.getQName(faultCodeString, fault);
             
-            String subCodeString = (String) xu.getValue("//soap12:Fault/Code/Subcode/Value/text()", 
+            String subCodeString = (String) xu.getValue("//s:Fault/s:Code/s:Subcode/s:Value/text()", 
                                                         fault,
                                                         XPathConstants.STRING);
             if (StringUtils.isEmpty(subCodeString)) {
                 subCode = XMLUtils.getQName(subCodeString, fault);
             }
             
-            exMessage = (String) xu.getValue("//soap12:Fault/Reason/Text/text()", 
+            exMessage = (String) xu.getValue("//s:Fault/s:Reason/s:Text/text()", 
                                              fault,
                                              XPathConstants.STRING);
             
-            Node detailNode = (Node) xu.getValue("//soap12:Fault/Detail",
+            Node detailNode = (Node) xu.getValue("//s:Fault/s:Detail",
                                                  fault,
                                                  XPathConstants.NODE);
             if (detailNode != null) {
                 detail = (Element) detailNode;
             }
             
-            role = (String) xu.getValue("//soap12:Fault/Role/text()", 
+            role = (String) xu.getValue("//s:Fault/s:Role/text()", 
                                         fault,
                                         XPathConstants.STRING);
 
-            node = (String) xu.getValue("//soap12:Fault/Node/text()", 
+            node = (String) xu.getValue("//s:Fault/s:Node/text()", 
                                         fault,
                                         XPathConstants.STRING);                       
         } catch (XMLStreamException e) {

Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java Mon Oct 30 00:26:47 2006
@@ -21,6 +21,7 @@
 
 import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
@@ -34,10 +35,12 @@
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class Soap12FaultOutInterceptor extends AbstractSoapInterceptor {
+    private static final Logger LOG = Logger.getLogger(URIMappingInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(Soap12FaultOutInterceptor.class);
 
     public Soap12FaultOutInterceptor() {
@@ -46,6 +49,7 @@
     }
 
     public void handleMessage(SoapMessage message) throws Fault {
+        LOG.info(getClass() + (String) message.get(SoapMessage.CONTENT_TYPE));
         message.put(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
         
         XMLStreamWriter writer = message.getContent(XMLStreamWriter.class);
@@ -64,23 +68,23 @@
 
             writer.writeStartElement(defaultPrefix, "Fault", ns);
 
-            writer.writeStartElement("Code");
-            writer.writeStartElement("Value");
+            writer.writeStartElement(defaultPrefix, "Code", ns);
+            writer.writeStartElement(defaultPrefix, "Value", ns);
        
             writer.writeCharacters(fault.getCodeString(getFaultCodePrefix(writer, fault.getFaultCode()), 
                                                        defaultPrefix));
             writer.writeEndElement();
             
             if (fault.getSubCode() != null) {
-                writer.writeStartElement("Subcode");
+                writer.writeStartElement(defaultPrefix, "Subcode", ns);
                 writer.writeCharacters(fault.getSubCodeString(getFaultCodePrefix(writer, fault.getSubCode()), 
                                                               defaultPrefix));                
                 writer.writeEndElement();
             }
             writer.writeEndElement();
 
-            writer.writeStartElement("Reason");
-            writer.writeStartElement("Text");
+            writer.writeStartElement(defaultPrefix, "Reason", ns);
+            writer.writeStartElement(defaultPrefix, "Text", ns);
             writer.writeAttribute("xml", "http://www.w3.org/XML/1998/namespace", "lang ", getLangCode());
             if (fault.getMessage() != null) {
                 writer.writeCharacters(fault.getMessage());
@@ -92,7 +96,7 @@
 
             if (fault.hasDetails()) {
                 Element detail = fault.getDetail();
-                writer.writeStartElement("Detail");
+                writer.writeStartElement(defaultPrefix, "Detail", ns);
 
                 NodeList details = detail.getChildNodes();
                 for (int i = 0; i < details.getLength(); i++) {

Added: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java?view=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java (added)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,47 @@
+/**
+ * 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.binding.soap;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+
+public class SoapBindingTest extends TestCase {
+    
+    @SuppressWarnings("unchecked")
+    public void testCreateMessage() throws Exception {
+        Message message = new MessageImpl();
+        SoapBinding sb = new SoapBinding();
+        message = sb.createMessage(message);
+        assertNotNull(message);
+        assertTrue(message instanceof SoapMessage);
+        SoapMessage soapMessage = (SoapMessage) message;
+        assertEquals(Soap11.getInstance(), soapMessage.getVersion());
+
+        assertEquals("text/xml", soapMessage.get(Message.CONTENT_TYPE));
+        
+        sb.setSoapVersion(Soap12.getInstance());
+        soapMessage = (SoapMessage) sb.createMessage(soapMessage);
+        assertEquals(Soap12.getInstance(), soapMessage.getVersion());     
+        assertEquals("application/soap+xml", soapMessage.get(Message.CONTENT_TYPE));
+    }
+
+}

Propchange: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/SoapBindingTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java Mon Oct 30 00:26:47 2006
@@ -105,10 +105,14 @@
 
         Document faultDoc = DOMUtils.readXml(new ByteArrayInputStream(out.toByteArray()));
         
-        assertValid("//soap12env:Fault/Code/Value[text()='ns1:Sender']", faultDoc);
-        assertValid("//soap12env:Fault/Code/Subcode[text()='ns2:invalidsoap']", faultDoc);
-        assertValid("//soap12env:Fault/Reason/Text[@xml:lang='en']", faultDoc);
-        assertValid("//soap12env:Fault/Reason/Text[text()='" + faultString + "']", faultDoc);
+        assertValid("//soap12env:Fault/soap12env:Code/soap12env:Value[text()='ns1:Sender']", 
+                    faultDoc);
+        assertValid("//soap12env:Fault/soap12env:Code/soap12env:Subcode[text()='ns2:invalidsoap']", 
+                    faultDoc);
+        assertValid("//soap12env:Fault/soap12env:Reason/soap12env:Text[@xml:lang='en']", 
+                    faultDoc);
+        assertValid("//soap12env:Fault/soap12env:Reason/soap12env:Text[text()='" + faultString + "']", 
+                    faultDoc);
 
         XMLStreamReader reader = StaxUtils.createXMLStreamReader(new ByteArrayInputStream(out.toByteArray()));
         m.setContent(XMLStreamReader.class, reader);
@@ -120,8 +124,8 @@
 
         SoapFault fault2 = (SoapFault)m.getContent(Exception.class);
         assertNotNull(fault2);
-        assertEquals(fault.getMessage(), fault2.getMessage());
         assertEquals(Soap12.getInstance().getSender(), fault2.getFaultCode());
+        assertEquals(fault.getMessage(), fault2.getMessage());        
     }
     
 }

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingFactory.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingFactory.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/XMLBindingFactory.java Mon Oct 30 00:26:47 2006
@@ -35,6 +35,7 @@
 import org.apache.cxf.binding.xml.interceptor.XMLMessageOutInterceptor;
 import org.apache.cxf.interceptor.StaxInInterceptor;
 import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
 import org.apache.cxf.service.model.BindingInfo;
 
 public class XMLBindingFactory extends AbstractBindingFactory {
@@ -85,6 +86,8 @@
         
         xb.getOutFaultInterceptors().add(new StaxOutInterceptor());
         xb.getOutFaultInterceptors().add(new XMLFaultOutInterceptor());
+        
+        xb.getInInterceptors().add(new URIMappingInterceptor());
 
         return xb;
     }

Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLMessageInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -23,6 +23,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
@@ -47,7 +48,7 @@
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class XMLMessageInInterceptor extends AbstractInDatabindingInterceptor {
-
+    private static final Logger LOG = Logger.getLogger(XMLMessageInInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(XMLMessageInInterceptor.class);
     
     // TODO: this should be part of the chain!!
@@ -60,8 +61,14 @@
     }
 
     public void handleMessage(Message message) throws Fault {
+        if (isGET(message)) {            
+            LOG.info("XMLMessageInInterceptor skipped in HTTP GET method");
+            return;
+        }
         XMLStreamReader xsr = message.getContent(XMLStreamReader.class);
+        
         DepthXMLStreamReader reader = new DepthXMLStreamReader(xsr);
+        
         Endpoint ep = message.getExchange().get(Endpoint.class);
         BindingInfo service = ep.getEndpointInfo().getBinding();
         

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractFaultChainIntiatorObserver.java Mon Oct 30 00:26:47 2006
@@ -43,6 +43,7 @@
         this.bus = bus;
     }
 
+    @SuppressWarnings("unchecked")
     public void onMessage(Message m) {
         Message faultMessage = m.getExchange().getFaultMessage();
         if (faultMessage == null) {
@@ -51,7 +52,9 @@
         
         faultMessage = m.getExchange().get(Binding.class).createMessage(faultMessage);
         m.getExchange().setFaultMessage(faultMessage);
+        m.putAll(faultMessage);
         faultMessage.putAll(m);
+
         MessageImpl.copyContent(m, faultMessage);
         
         Exception e = m.getContent(Exception.class);
@@ -84,4 +87,4 @@
     public Bus getBus() {
         return bus;
     }
-}
\ No newline at end of file
+}

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -26,6 +26,7 @@
 import java.util.List;
 import java.util.ResourceBundle;
 import java.util.Set;
+import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
 
@@ -47,7 +48,7 @@
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class BareInInterceptor extends AbstractInDatabindingInterceptor {
-
+    private static final Logger LOG = Logger.getLogger(BareInInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(BareInInterceptor.class);
 
     private static Set<String> filter = new HashSet<String>();
@@ -60,9 +61,15 @@
     public BareInInterceptor() {
         super();
         setPhase(Phase.UNMARSHAL);
+        addAfter(URIMappingInterceptor.class.getName());
     }
 
     public void handleMessage(Message message) {
+        if (isGET(message) && message.getContent(List.class) != null) {  
+            LOG.info("BareInInterceptor skipped in HTTP GET method");
+            return;
+        }        
+
         DepthXMLStreamReader xmlReader = getXMLStreamReader(message);
         Exchange exchange = message.getExchange();
 

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainSetupInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainSetupInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainSetupInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/OutgoingChainSetupInterceptor.java Mon Oct 30 00:26:47 2006
@@ -19,7 +19,14 @@
 
 package org.apache.cxf.interceptor;
 
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
 import org.apache.cxf.Bus;
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
@@ -33,7 +40,7 @@
  * @author Dan Diephouse
  */
 public class OutgoingChainSetupInterceptor extends AbstractPhaseInterceptor<Message> {
-
+    private static final Logger LOG = Logger.getLogger(OutgoingChainSetupInterceptor.class.getName());
     public OutgoingChainSetupInterceptor() {
         super();
         setPhase(Phase.PRE_LOGICAL);
@@ -52,14 +59,36 @@
             outMessage = ep.getBinding().createMessage();
             ex.setOutMessage(outMessage);
         }
+        setUpContentType(outMessage);
 
         Message faultMessage = message.getExchange().getFaultMessage();
         if (faultMessage == null) {
-            faultMessage = ep.getBinding().createMessage();
+            faultMessage = ep.getBinding().createMessage();            
             ex.setFaultMessage(faultMessage);
         }
+
+        setUpContentType(faultMessage);
         
         outMessage.setInterceptorChain(getOutInterceptorChain(ex));
+    }
+    
+    @SuppressWarnings("unchecked")
+    private void setUpContentType(Message message) {
+        if (StringUtils.isEmpty((String)message.get(Message.CONTENT_TYPE))) {
+            return;
+        }
+        
+        Map<String, List<String>> headers = (Map<String, List<String>>)message.get(Message.PROTOCOL_HEADERS);
+        if (headers == null) {
+            headers = new HashMap<String, List<String>>();
+            message.put(Message.PROTOCOL_HEADERS, headers);         
+        }
+        
+        LOG.info("OutgoingChainSetupInterceptor set the content-type to: " 
+                 + message.get(Message.CONTENT_TYPE));
+
+        headers.put("Content-Type",  
+                    Arrays.asList(new String[] {(String)message.get(Message.CONTENT_TYPE)}));
     }
     
     public static InterceptorChain getOutInterceptorChain(Exchange ex) {

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/StaxInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
@@ -40,6 +41,8 @@
  */
 public class StaxInInterceptor extends AbstractPhaseInterceptor<Message> {
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(StaxInInterceptor.class);
+    private static final Logger LOG = Logger.getLogger(StaxInInterceptor.class.getName());    
+
     private static Map<Object, XMLInputFactory> factories = new HashMap<Object, XMLInputFactory>();
 
     public StaxInInterceptor() {
@@ -48,6 +51,10 @@
     }
 
     public void handleMessage(Message message) {
+        if (isGET(message)) {
+            LOG.info("StaxInInterceptor skipped in HTTP GET method");
+            return;
+        }
         InputStream is = message.getContent(InputStream.class);
         assert is != null;
 

Added: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInterceptor.java?view=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInterceptor.java (added)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/URIMappingInterceptor.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,156 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.interceptor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.util.PrimitiveUtils;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.MessageInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.ServiceModelUtil;
+
+public class URIMappingInterceptor extends AbstractInDatabindingInterceptor {
+    
+    private static final Logger LOG = Logger.getLogger(URIMappingInterceptor.class.getName());
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(URIMappingInterceptor.class);
+    
+    public URIMappingInterceptor() {
+        super();
+        setPhase(Phase.UNMARSHAL);
+    }
+
+    public void handleMessage(Message message) throws Fault {
+        String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
+        LOG.info("Invoking HTTP method " + method);
+        BindingOperationInfo op = message.getExchange().get(BindingOperationInfo.class);
+        if (!"GET".equalsIgnoreCase(method)) {
+            return;
+        }
+        if (op != null) {
+            return;
+        }
+        String opName = getOperationName(message);
+        LOG.info("URIMappingInterceptor get operation: " + opName);
+        op = ServiceModelUtil.getOperation(message.getExchange(), opName);
+        
+        if (op == null || opName == null || op.getName() == null
+            || StringUtils.isEmpty(op.getName().getLocalPart())
+            || !opName.equals(op.getName().getLocalPart())) {
+            throw new Fault(new org.apache.cxf.common.i18n.Message("NO_OPERATION", BUNDLE, opName));
+        }
+        message.getExchange().put(BindingOperationInfo.class, op);
+        message.setContent(List.class, getParameters(message, op));
+    }
+
+    protected List<Object> getParameters(Message message, BindingOperationInfo operation) {
+        List<Object> parameters = new ArrayList<Object>();
+        MessageInfo msg = operation.getOperationInfo().getInput();
+        int idx = parameters.size();
+
+        Map<String, String> queries = getQueries(message);
+        for (String key : queries.keySet()) {
+            MessagePartInfo p = msg.getMessageParts().get(idx);
+            if (p == null) {
+                LOG.warning("URIMappingInterceptor MessagePartInfo NULL ");
+                throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, 
+                                                                       "index: " + idx + " on key " + key));
+            }
+
+            // TODO check the parameter name here
+            Object param = null;
+            Class type = (Class)p.getProperty(Class.class.getName());
+            
+            if (type != null && type.isPrimitive()) {
+                param = PrimitiveUtils.read(queries.get(key), type);
+            } else {
+                param = queries.get(key);
+            }
+            if (param != null) {
+                parameters.add(param);
+            } else {
+                throw new RuntimeException(p.getName() + " can not be unmarshalled");
+            }
+        }        
+        return parameters;
+    }
+
+    protected Map<String, String> getQueries(Message message) {
+        Map<String, String> queries = new LinkedHashMap<String, String>();
+        String query = (String)message.get(Message.QUERY_STRING);   
+        if (!StringUtils.isEmpty(query)) {
+            List<String> parts = Arrays.asList(query.split("&"));
+            for (String part : parts) {
+                String[] keyValue = part.split("=");
+                queries.put(keyValue[0], keyValue[1]);
+            }
+            return queries;
+        }
+
+        String path = (String)message.get(Message.PATH_INFO);
+        String basePath = getBasePath(message);
+        List<String> parts = Arrays.asList(path.split("/"));
+        int baseIndex = parts.indexOf(basePath);
+        if (baseIndex + 2 > parts.size()) {
+            return null;
+        }
+        for (int i = baseIndex + 2; i < parts.size(); i += 2) {
+            if (i + 1 > parts.size()) {
+                queries.put(parts.get(i), null);
+            }
+            queries.put(parts.get(i), parts.get(i + 1));
+        }
+        return queries;
+    }
+    
+    private String getBasePath(Message message) {
+        String basePath = (String)message.get(Message.BASE_PATH);     
+        return StringUtils.trim(basePath, "/");
+    }
+
+    protected String getOperationName(Message message) {
+        String path = (String)message.get(Message.PATH_INFO);
+
+        String basePath = getBasePath(message);
+
+        List<String> parts = Arrays.asList(path.split("/"));
+
+        int baseIndex = parts.indexOf(basePath);
+        if (baseIndex + 1 > parts.size()) {
+            return null;
+        }
+        String opName = parts.get(baseIndex + 1);
+        if (opName.indexOf("?") != -1) {
+            opName = opName.split("\\?")[0];
+        }
+
+        return opName;
+    }
+}

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

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

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java Mon Oct 30 00:26:47 2006
@@ -23,6 +23,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.ResourceBundle;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLStreamConstants;
 
@@ -39,14 +40,21 @@
 import org.apache.cxf.staxutils.StaxUtils;
 
 public class WrappedInInterceptor extends AbstractInDatabindingInterceptor {
+    private static final Logger LOG = Logger.getLogger(WrappedInInterceptor.class.getName());
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WrappedInInterceptor.class);
 
     public WrappedInInterceptor() {
         super();
         setPhase(Phase.UNMARSHAL);
+        addAfter(URIMappingInterceptor.class.getName());
     }
 
     public void handleMessage(Message message) {
+        if (isGET(message) && message.getContent(List.class) != null) {
+            LOG.info("XMLMessageInInterceptor skipped in HTTP GET method");
+            return;
+        }
+        
         DepthXMLStreamReader xmlReader = getXMLStreamReader(message);
 
         // Trying to find the operation name from the XML.

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/invoker/AbstractInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/invoker/AbstractInvoker.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/invoker/AbstractInvoker.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/service/invoker/AbstractInvoker.java Mon Oct 30 00:26:47 2006
@@ -58,7 +58,10 @@
     protected Object invoke(Exchange exchange, final Object serviceObject, Method m, List<Object> params) {
         Object res;
         try {
-            Object[] paramArray = params.toArray();
+            Object[] paramArray = new Object[]{};
+            if (params != null) {
+                paramArray = params.toArray();
+            }
             
             insertExchange(m, paramArray, exchange);
             

Added: 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=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorDocLitTest.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,122 @@
+/**
+ * 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.net.URL;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.binding.BindingFactoryManager;
+import org.apache.cxf.binding.soap.SoapBindingFactory;
+import org.apache.cxf.calculator.CalculatorImpl;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.Service;
+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.test.AbstractCXFTest;
+
+public class URIMappingInterceptorDocLitTest extends AbstractCXFTest {
+    
+    Message message;
+    String ns = "http://apache.org/cxf/calculator";
+    
+    public void setUp() throws Exception {
+        super.setUp();
+        BindingFactoryManager bfm = getBus().getExtension(BindingFactoryManager.class);
+        bfm.registerBindingFactory("http://schemas.xmlsoap.org/wsdl/soap/", 
+                                   new SoapBindingFactory());
+        
+        message = new MessageImpl();
+        message.put(Message.HTTP_REQUEST_METHOD, "GET");
+        message.put(Message.BASE_PATH, "SoapPort");
+        
+        Exchange exchange = new ExchangeImpl();
+        message.setExchange(exchange);        
+
+
+        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        URL resource = getClass().getResource("/wsdl/calculator.wsdl");
+        assertNotNull(resource);
+        bean.setWsdlURL(resource);
+        bean.setBus(getBus());
+        bean.setServiceClass(CalculatorImpl.class);
+        CalculatorImpl calculator = new CalculatorImpl();
+        BeanInvoker invoker = new BeanInvoker(calculator);
+        bean.setInvoker(invoker);
+
+        Service service = bean.create();
+        
+        EndpointInfo endpointInfo = service.getServiceInfo().getEndpoint(new QName(ns, "CalculatorPort"));
+        Endpoint endpoint = new EndpointImpl(getBus(), service, endpointInfo);
+        exchange.put(Endpoint.class, endpoint);
+    }
+    
+    public void testGetAddFromPath() throws Exception {
+        message.put(Message.PATH_INFO, "/CalculatorService/SoapPort/add/arg0/1/arg1/2");
+        
+        URIMappingInterceptor interceptor = new URIMappingInterceptor();
+        interceptor.handleMessage(message);
+        
+        assertNull(message.getContent(Exception.class));
+        
+        Object parameters = message.getContent(List.class);
+        assertNotNull(parameters);
+        assertEquals(2, ((List)parameters).size());
+        // TODO: should return int, service factory is broken, check it later.
+        //        Integer value = (Integer) ((List)parameters).get(0);
+        //        assertEquals(1, value.intValue());
+        //        
+        //        value = (Integer) ((List)parameters).get(1);        
+        //        assertEquals(2, value.intValue());
+        
+        BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
+        assertNotNull(boi);
+        assertEquals(new QName(ns, "add"), boi.getName());
+    }
+    
+    public void testGetAddFromQuery() throws Exception {
+        message.put(Message.PATH_INFO, "/CalculatorService/SoapPort/add");
+        message.put(Message.QUERY_STRING, "?arg0=1&arg0=2");
+        
+        URIMappingInterceptor interceptor = new URIMappingInterceptor();
+        interceptor.handleMessage(message);
+        
+        assertNull(message.getContent(Exception.class));
+        
+        Object parameters = message.getContent(List.class);
+        assertNotNull(parameters);
+        assertEquals(2, ((List)parameters).size());
+        
+        // TODO: should return int
+        //        Integer value = (Integer) ((List)parameters).get(0);       
+        //        assertEquals(1, value.intValue());
+        //        value = (Integer) ((List)parameters).get(1);
+        //        assertEquals(2, value.intValue());
+    }
+}

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

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

Added: 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=auto&rev=469089
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/URIMappingInterceptorRPCTest.java Mon Oct 30 00:26:47 2006
@@ -0,0 +1,125 @@
+/**
+ * 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.net.URL;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.binding.BindingFactoryManager;
+import org.apache.cxf.binding.soap.SoapBindingFactory;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.interceptor.URIMappingInterceptor;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.Service;
+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.test.AbstractCXFTest;
+import org.apache.hello_world_soap_http.RPCLitGreeterImpl;
+
+public class URIMappingInterceptorRPCTest extends AbstractCXFTest {
+    
+    Message message;
+    String ns = "http://apache.org/hello_world_rpclit";
+    
+    public void setUp() throws Exception {
+        super.setUp();
+        BindingFactoryManager bfm = getBus().getExtension(BindingFactoryManager.class);
+        bfm.registerBindingFactory("http://schemas.xmlsoap.org/wsdl/soap/", 
+                                   new SoapBindingFactory());
+        message = new MessageImpl();
+        message.put(Message.HTTP_REQUEST_METHOD, "GET");
+        message.put(Message.BASE_PATH, "SoapPort");
+        
+        Exchange exchange = new ExchangeImpl();
+        message.setExchange(exchange);        
+
+
+        JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+        URL resource = getClass().getResource("/wsdl/hello_world_rpc_lit.wsdl");
+        assertNotNull(resource);
+        bean.setWsdlURL(resource);
+        bean.setBus(getBus());
+        bean.setServiceClass(RPCLitGreeterImpl.class);
+        RPCLitGreeterImpl greeter = new RPCLitGreeterImpl();
+        BeanInvoker invoker = new BeanInvoker(greeter);
+        bean.setInvoker(invoker);
+
+        Service service = bean.create();
+        
+        EndpointInfo endpointInfo = service.getServiceInfo().getEndpoint(new QName(ns, "SoapPortRPCLit"));
+        Endpoint endpoint = new EndpointImpl(getBus(), service, endpointInfo);
+        exchange.put(Endpoint.class, endpoint);
+    }
+    
+    public void testGetSayHiFromPath() throws Exception {
+        message.put(Message.PATH_INFO, "/SOAPServiceRPCLit/SoapPort/sayHi");       
+        
+        URIMappingInterceptor interceptor = new URIMappingInterceptor();
+        interceptor.handleMessage(message);
+        
+        assertNull(message.getContent(Exception.class));
+        
+        Object parameters = message.getContent(List.class);
+        assertNotNull(parameters);
+        assertEquals(0, ((List)parameters).size());
+        BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
+        assertNotNull(boi);
+        assertEquals(new QName(ns, "sayHi"), boi.getName());
+    }
+    
+    public void testGetGreetMeFromPath() throws Exception {
+        message.put(Message.PATH_INFO, "/SOAPServiceRPCLit/SoapPort/greetMe/me/king");
+        
+        URIMappingInterceptor interceptor = new URIMappingInterceptor();        
+        interceptor.handleMessage(message);
+        
+        assertNull(message.getContent(Exception.class));
+        
+        Object parameters = message.getContent(List.class);
+        assertNotNull(parameters);
+        assertEquals(1, ((List)parameters).size());
+        String value = (String) ((List)parameters).get(0);
+        assertEquals("king", value);
+    }
+    
+    public void testGetSayHiFromQuery() throws Exception {
+        message.put(Message.PATH_INFO, "/SOAPServiceRPCLit/SoapPort/greetMe");
+        message.put(Message.QUERY_STRING, "?me=king");
+        
+        URIMappingInterceptor interceptor = new URIMappingInterceptor();
+        interceptor.handleMessage(message);
+        
+        assertNull(message.getContent(Exception.class));
+        
+        Object parameters = message.getContent(List.class);
+        assertNotNull(parameters);
+        assertEquals(1, ((List)parameters).size());
+        String value = (String) ((List)parameters).get(0);
+        assertEquals("king", value);
+    }
+}

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

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

Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/JettyHTTPDestination.java Mon Oct 30 00:26:47 2006
@@ -19,7 +19,6 @@
 
 package org.apache.cxf.transport.http;
 
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -53,17 +52,13 @@
 import org.mortbay.http.HttpResponse;
 import org.mortbay.http.handler.AbstractHttpHandler;
 
-
 public class JettyHTTPDestination extends AbstractHTTPDestination {
-    
-    public static final String HTTP_REQUEST =
-        JettyHTTPDestination.class.getName() + ".REQUEST";
-    public static final String HTTP_RESPONSE =
-        JettyHTTPDestination.class.getName() + ".RESPONSE";
-    
-    protected static final String ANONYMOUS_ADDRESS =
-        "http://www.w3.org/2005/08/addressing/anonymous";
-    
+
+    public static final String HTTP_REQUEST = JettyHTTPDestination.class.getName() + ".REQUEST";
+    public static final String HTTP_RESPONSE = JettyHTTPDestination.class.getName() + ".RESPONSE";
+
+    protected static final String ANONYMOUS_ADDRESS = "http://www.w3.org/2005/08/addressing/anonymous";
+
     protected ServerEngine engine;
     protected MessageObserver incomingObserver;
 
@@ -75,10 +70,7 @@
      * @param endpointInfo the endpoint info of the destination
      * @throws IOException
      */
-    public JettyHTTPDestination(Bus b,
-                                ConduitInitiator ci,
-                                EndpointInfo endpointInfo)
-        throws IOException {
+    public JettyHTTPDestination(Bus b, ConduitInitiator ci, EndpointInfo endpointInfo) throws IOException {
         this(b, ci, endpointInfo, null);
     }
 
@@ -92,15 +84,11 @@
      * @throws IOException
      */
 
-    public JettyHTTPDestination(Bus b,
-                                ConduitInitiator ci,
-                                EndpointInfo endpointInfo,
-                                ServerEngine eng)
+    public JettyHTTPDestination(Bus b, ConduitInitiator ci, EndpointInfo endpointInfo, ServerEngine eng)
         throws IOException {
         super(b, ci, endpointInfo);
-        engine = eng != null 
-                 ? eng
-                 : JettyHTTPServerEngine.getForPort(bus, nurl.getProtocol(), nurl.getPort());
+        engine = eng != null ? eng : JettyHTTPServerEngine
+            .getForPort(bus, nurl.getProtocol(), nurl.getPort());
     }
 
     /**
@@ -115,36 +103,34 @@
                 URL url = new URL(getAddressValue());
                 if (contextMatchOnStem()) {
                     engine.addServant(url, new AbstractHttpHandler() {
-                            public void handle(String pathInContext, String pathParams,
-                                               HttpRequest req, HttpResponse resp)
-                                throws IOException {
-                                String name = getName();
-                                if (pathInContext.startsWith(name)) {
-                                    doService(req, resp);                    
-                                }
+                        public void handle(String pathInContext, String pathParams, HttpRequest req,
+                                           HttpResponse resp) throws IOException {
+                            String name = getName();
+                            if (pathInContext.startsWith(name)) {
+                                doService(req, resp);
                             }
-                        });
+                        }
+                    });
                 } else {
                     engine.addServant(url, new AbstractHttpHandler() {
-                            public void handle(String pathInContext, String pathParams,
-                                               HttpRequest req, HttpResponse resp)
-                                throws IOException {
-                                if (pathInContext.equals(getName())) {
-                                    doService(req, resp);
-                                }
+                        public void handle(String pathInContext, String pathParams, HttpRequest req,
+                                           HttpResponse resp) throws IOException {
+                            if (pathInContext.startsWith(getName())) {
+                                doService(req, resp, getName());
                             }
-                        });
+                        }
+                    });
                 }
             } catch (Exception e) {
                 LOG.log(Level.WARNING, "URL creation failed: ", e);
             }
         } else {
             LOG.info("unregistering incoming observer: " + incomingObserver);
-            engine.removeServant(nurl);            
+            engine.removeServant(nurl);
         }
         incomingObserver = observer;
     }
-    
+
     /**
      * Retreive a back-channel Conduit, which must be policy-compatible
      * with the current Message and associated Destination. For example
@@ -158,23 +144,18 @@
      * @param address the backchannel address (null to indicate anonymous)
      * @return a suitable Conduit
      */
-    public Conduit getBackChannel(Message inMessage,
-                                  Message partialResponse,
-                                  EndpointReferenceType address)
+    public Conduit getBackChannel(Message inMessage, Message partialResponse, EndpointReferenceType address)
         throws IOException {
         HttpResponse response = (HttpResponse)inMessage.get(HTTP_RESPONSE);
         Conduit backChannel = null;
         Exchange ex = inMessage.getExchange();
-        EndpointReferenceType target = address != null
-                                       ? address
-                                       : ex.get(EndpointReferenceType.class);
+        EndpointReferenceType target = address != null ? address : ex.get(EndpointReferenceType.class);
         if (target == null) {
             backChannel = new BackChannelConduit(response);
         } else {
             if (partialResponse != null) {
                 // setup the outbound message to for 202 Accepted
-                partialResponse.put(Message.RESPONSE_CODE,
-                                    HttpURLConnection.HTTP_ACCEPTED);
+                partialResponse.put(Message.RESPONSE_CODE, HttpURLConnection.HTTP_ACCEPTED);
                 backChannel = new BackChannelConduit(response);
                 ex.put(EndpointReferenceType.class, target);
             } else {
@@ -200,17 +181,16 @@
     /**
      * Shutdown the Destination, i.e. stop accepting incoming messages.
      */
-    public void shutdown() {  
+    public void shutdown() {
     }
-        
+
     /**
      * Copy the request headers into the message.
      * 
      * @param message the current message
      * @param headers the current set of headers
      */
-    protected void copyRequestHeaders(Message message,
-                                      Map<String, List<String>> headers) {
+    protected void copyRequestHeaders(Message message, Map<String, List<String>> headers) {
         HttpRequest req = (HttpRequest)message.get(HTTP_REQUEST);
         for (Enumeration e = req.getFieldNames(); e.hasMoreElements();) {
             String fname = (String)e.nextElement();
@@ -225,9 +205,9 @@
                 String val = (String)e2.nextElement();
                 values.add(val);
             }
-        }        
+        }
     }
-    
+
     /**
      * Copy the response headers into the response.
      * 
@@ -246,25 +226,26 @@
             }
         }
     }
-    
-    protected void doService(HttpRequest req, HttpResponse resp)
-        throws IOException {
+
+    protected void doService(HttpRequest req, HttpResponse resp) throws IOException {
+        doService(req, resp, null);
+    }
+
+    protected void doService(HttpRequest req, HttpResponse resp, String pathInContext) throws IOException {
         if (getServer().isSetRedirectURL()) {
             resp.sendRedirect(getServer().getRedirectURL());
             resp.commit();
             req.setHandled(true);
             return;
-        }    
-      
-         
+        }
+
         if ("GET".equals(req.getMethod()) && req.getURI().toString().toLowerCase().endsWith("?wsdl")) {
             try {
-                
-                
+
                 resp.addField("Content-Type", "text/xml");
-                
+
                 OutputStream os = resp.getOutputStream();
-                
+
                 WSDLWriter wsdlWriter = WSDLFactory.newInstance().newWSDLWriter();
                 Definition def = new ServiceWSDLBuilder(endpointInfo.getService()).build();
                 wsdlWriter.writeWSDL(def, os);
@@ -273,23 +254,26 @@
                 req.setHandled(true);
                 return;
             } catch (Exception ex) {
-                
+
                 ex.printStackTrace();
             }
         }
-        
-        
+
         // REVISIT: service on executor if associated with endpoint
-        serviceRequest(req, resp);
+        serviceRequest(req, resp, pathInContext);
     }
-    
-    protected void serviceRequest(final HttpRequest req, final HttpResponse resp)
+
+    protected void serviceRequest(final HttpRequest req, final HttpResponse resp) throws IOException {
+        serviceRequest(req, resp, null);
+    }
+
+    protected void serviceRequest(final HttpRequest req, final HttpResponse resp, String base)
         throws IOException {
         try {
             if (LOG.isLoggable(Level.INFO)) {
                 LOG.info("Service http request on thread: " + Thread.currentThread());
             }
-            
+
             MessageImpl inMessage = new MessageImpl();
             inMessage.setContent(InputStream.class, req.getInputStream());
             inMessage.put(HTTP_REQUEST, req);
@@ -297,13 +281,15 @@
             inMessage.put(Message.HTTP_REQUEST_METHOD, req.getMethod());
             inMessage.put(Message.PATH_INFO, req.getPath());
             inMessage.put(Message.QUERY_STRING, req.getQuery());
+            inMessage.put(Message.CONTENT_TYPE, req.getContentType());
+            inMessage.put(Message.BASE_PATH, base);
 
             setHeaders(inMessage);
-            
-            inMessage.setDestination(this);            
-            
+
+            inMessage.setDestination(this);
+
             incomingObserver.onMessage(inMessage);
-            
+
             resp.commit();
             req.setHandled(true);
         } finally {
@@ -319,7 +305,7 @@
         OutputStream responseStream = null;
         if (responseObj instanceof HttpResponse) {
             HttpResponse response = (HttpResponse)responseObj;
-                
+
             Integer i = (Integer)outMessage.get(Message.RESPONSE_CODE);
             if (i != null) {
                 int status = i.intValue();
@@ -333,10 +319,10 @@
             } else {
                 response.setStatus(HttpURLConnection.HTTP_OK);
             }
-            
+
             copyResponseHeaders(outMessage, response);
             responseStream = response.getOutputStream();
-                    
+
             if (isOneWay(outMessage)) {
                 response.commit();
             }
@@ -344,28 +330,28 @@
             LOG.log(Level.WARNING, "UNEXPECTED_RESPONSE_TYPE_MSG", responseObj.getClass());
             throw new IOException("UNEXPECTED_RESPONSE_TYPE_MSG" + responseObj.getClass());
         }
-    
+
         if (isOneWay(outMessage)) {
             outMessage.remove(HTTP_RESPONSE);
         }
         return responseStream;
     }
-    
+
     /**
      * Backchannel conduit.
      */
     protected class BackChannelConduit implements Conduit {
-        
+
         protected HttpResponse response;
         protected EndpointReferenceType target;
-        
+
         BackChannelConduit(HttpResponse resp) {
             response = resp;
-            target =
-                EndpointReferenceUtils.getEndpointReference(ANONYMOUS_ADDRESS);
+            target = EndpointReferenceUtils.getEndpointReference(ANONYMOUS_ADDRESS);
         }
+
         public void close(Message msg) throws IOException {
-            msg.getContent(OutputStream.class).close();        
+            msg.getContent(OutputStream.class).close();
         }
 
         /**
@@ -383,19 +369,19 @@
          * 
          * @param message the message to be sent.
          */
+        @SuppressWarnings("unchecked")
         public void send(Message message) throws IOException {
             message.put(HTTP_RESPONSE, response);
-            message.setContent(OutputStream.class,
-                               new WrappedOutputStream(message, response));
+            message.setContent(OutputStream.class, new WrappedOutputStream(message, response));
         }
-        
+
         /**
          * @return the reference associated with the target Destination
-         */    
+         */
         public EndpointReferenceType getTarget() {
             return target;
         }
-        
+
         /**
          * Retreive the back-channel Destination.
          * 
@@ -405,22 +391,22 @@
         public Destination getBackChannel() {
             return null;
         }
-        
+
         /**
          * Close the conduit
          */
         public void close() {
         }
     }
-    
+
     /**
      * Wrapper stream responsible for flushing headers and committing outgoing
      * HTTP-level response.
      */
     private class WrappedOutputStream extends AbstractWrappedOutputStream {
-        
+
         protected HttpResponse response;
-        
+
         WrappedOutputStream(Message m, HttpResponse resp) {
             super(m);
             response = resp;
@@ -444,9 +430,9 @@
             commitResponse();
         }
 
-        protected void onWrite() throws IOException {            
+        protected void onWrite() throws IOException {
         }
-        
+
         private void commitResponse() {
             try {
                 response.commit();

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/Server.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/Server.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/Server.java Mon Oct 30 00:26:47 2006
@@ -56,4 +56,4 @@
             System.out.println("done!");
         }
     }
-}
\ No newline at end of file
+}

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/common/ClientServerTestBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/common/ClientServerTestBase.java?view=diff&rev=469089&r1=469088&r2=469089
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/common/ClientServerTestBase.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/common/ClientServerTestBase.java Mon Oct 30 00:26:47 2006
@@ -19,6 +19,10 @@
 
 package org.apache.cxf.systest.common;
 
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
 import java.util.concurrent.FutureTask;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -39,6 +43,15 @@
 
     protected ClientServerTestBase(String name) {
         super(name);
+    }
+    
+    protected HttpURLConnection getHttpConnection(String target) throws Exception {
+        URL url = new URL(target);        
+        
+        URLConnection connection = url.openConnection();            
+        
+        assertTrue(connection instanceof HttpURLConnection);
+        return (HttpURLConnection)connection;        
     }
 
     protected boolean runClient(Runnable clientImpl, long timeOut, TimeUnit timeUnit)