Author: ruwan
Date: Tue Nov 20 03:18:02 2007
New Revision: 596621

URL: http://svn.apache.org/viewvc?rev=596621&view=rev
Log:
Fixing the REST support through HTTP GET on synapse

Added:
    
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java
   (with props)
Modified:
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/utils/EndpointDefinition.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
    
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/Axis2HttpRequest.java
    
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
 Tue Nov 20 03:18:02 2007
@@ -219,6 +219,7 @@
     
     /** Message format values in EndpointDefinition. Used by address, wsdl 
endpoints */
     public static final String FORMAT_POX = "pox";
+    public static final String FORMAT_GET = "get";
     public static final String FORMAT_SOAP11 = "soap11";
     public static final String FORMAT_SOAP12 = "soap12";    
 }

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointFactory.java
 Tue Nov 20 03:18:02 2007
@@ -168,20 +168,24 @@
         if (format != null)
         {
             String forceValue = 
format.getAttributeValue().trim().toLowerCase();
-            if (forceValue.equals(SynapseConstants.FORMAT_POX)) {
+            if (SynapseConstants.FORMAT_POX.equals(forceValue)) {
                 endpoint.setForcePOX(true);
                 endpoint.setFormat(SynapseConstants.FORMAT_POX);
                 
-            } else if (forceValue.equals(SynapseConstants.FORMAT_SOAP11)) {
+            } else if (SynapseConstants.FORMAT_GET.equals(forceValue)) {
+               endpoint.setForceGET(true);
+               endpoint.setFormat(SynapseConstants.FORMAT_GET);
+
+            } else if (SynapseConstants.FORMAT_SOAP11.equals(forceValue)) {
                endpoint.setForceSOAP11(true);
                endpoint.setFormat(SynapseConstants.FORMAT_SOAP11);
                 
-            } else if (forceValue.equals(SynapseConstants.FORMAT_SOAP12)) {
+            } else if (SynapseConstants.FORMAT_SOAP12.equals(forceValue)) {
                endpoint.setForceSOAP12(true);
                 endpoint.setFormat(SynapseConstants.FORMAT_SOAP12);
                 
             } else {
-                handleException("unknown value -\""+forceValue+"\". Attribute 
'format' accepts only 'pox','soap11','soap12'");
+                handleException("unknown value -\""+forceValue+"\". Attribute 
'format' accepts only 'pox', 'get', 'soap11', 'soap12'");
             }
         }
 

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/AddressEndpointSerializer.java
 Tue Nov 20 03:18:02 2007
@@ -109,6 +109,9 @@
         if (SynapseConstants.FORMAT_POX.equals(endpt.getFormat())) {
                address.addAttribute(fac.createOMAttribute("format", null, 
"pox"));
                
+        } else if (SynapseConstants.FORMAT_GET.equals(endpt.getFormat())) {
+            address.addAttribute(fac.createOMAttribute("format", null, "get"));
+
         } else if (SynapseConstants.FORMAT_SOAP11.equals(endpt.getFormat())) {
             address.addAttribute(fac.createOMAttribute("format", null, 
"soap11"));
                
@@ -117,8 +120,11 @@
         
                // following two kept for backward compatibility
         } else if (endpt.isForcePOX()) {
-            address.addAttribute(fac.createOMAttribute("format", null, "pox"));
+            address.addAttribute(fac.createOMAttribute("format", null, "get"));
             
+        } else if (endpt.isForceGET()) {
+            address.addAttribute(fac.createOMAttribute("format", null, "pox"));
+
         } else if (endpt.isForceSOAP11()) {
             address.addAttribute(fac.createOMAttribute("format", null, 
"soap11"));
         } else if (endpt.isForceSOAP12()) {

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointFactory.java
 Tue Nov 20 03:18:02 2007
@@ -226,6 +226,10 @@
                 endpointDefinition.setForcePOX(true);
                 endpointDefinition.setFormat(SynapseConstants.FORMAT_POX);
 
+            } else if (SynapseConstants.FORMAT_GET.equals(forceValue)) {
+               endpointDefinition.setForceGET(true);
+               endpointDefinition.setFormat(SynapseConstants.FORMAT_GET);
+
             } else if (SynapseConstants.FORMAT_SOAP11.equals(forceValue)) {
                 endpointDefinition.setForceSOAP11(true);
                 endpointDefinition.setFormat(SynapseConstants.FORMAT_SOAP11);

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/WSDLEndpointSerializer.java
 Tue Nov 20 03:18:02 2007
@@ -111,6 +111,9 @@
         if 
(SynapseConstants.FORMAT_POX.equals(endpointDefinition.getFormat())) {
             wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"pox"));
             
+        } else if 
(SynapseConstants.FORMAT_GET.equals(endpointDefinition.getFormat())) {
+            wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"get"));
+
         } else if 
(SynapseConstants.FORMAT_SOAP11.equals(endpointDefinition.getFormat())) {
             wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"soap11"));
             
@@ -120,7 +123,8 @@
             // following two kept for backward compatibility
         } else if (endpointDefinition.isForcePOX()) {
             wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"pox"));
-            
+        } else if (endpointDefinition.isForceGET()) {
+            wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"get"));
         } else if (endpointDefinition.isForceSOAP11()) {
             wsdlElement.addAttribute(fac.createOMAttribute("format", null, 
"soap11"));
         } else if (endpointDefinition.isForceSOAP12()) {

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
 Tue Nov 20 03:18:02 2007
@@ -27,6 +27,7 @@
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.client.OperationClient;
@@ -103,7 +104,8 @@
                     "] [ format = " + endpoint.getFormat() +                   
 
                     "] [ force soap11=" + endpoint.isForceSOAP11() +
                     "] [ force soap12=" + endpoint.isForceSOAP12() +
-                    "; pox=" + endpoint.isForcePOX() : "") +
+                    "] [ pox=" + endpoint.isForcePOX() +
+                    "] [ get=" + endpoint.isForcePOX() : "") +
                 "] [ to " + synapseOutMessageContext.getTo() + "]");
         }
 
@@ -121,6 +123,11 @@
 
             if (SynapseConstants.FORMAT_POX.equals(endpoint.getFormat())) {
                 axisOutMsgCtx.setDoingREST(true);
+
+            } else if 
(SynapseConstants.FORMAT_GET.equals(endpoint.getFormat())) {
+                axisOutMsgCtx.setDoingREST(true);
+                axisOutMsgCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                    Constants.Configuration.HTTP_METHOD_GET);
                 
             } else if 
(SynapseConstants.FORMAT_SOAP11.equals(endpoint.getFormat())) {
                 axisOutMsgCtx.setDoingREST(false);

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/utils/EndpointDefinition.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/utils/EndpointDefinition.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/utils/EndpointDefinition.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/utils/EndpointDefinition.java
 Tue Nov 20 03:18:02 2007
@@ -43,9 +43,11 @@
     private String wsSecPolicyKey = null;
     /** use a separate listener - implies addressing is on **/
        private boolean useSeparateListener = false;
-       /** force REST on **/
+       /** force REST (POST) on **/
        private boolean forcePOX = false;
-       /** force SOAP11 on **/
+    /** force REST (GET) on **/
+    private boolean forceGET = false;
+    /** force SOAP11 on **/
        private boolean forceSOAP11 = false;
     /** force SOAP11 on **/
        private boolean forceSOAP12 = false;
@@ -184,7 +186,15 @@
                return forcePOX;
        }
 
-       public void setForceSOAP11(boolean forceSOAP11) {
+    public boolean isForceGET() {
+        return forceGET;
+    }
+
+    public void setForceGET(boolean forceGET) {
+        this.forceGET = forceGET;
+    }
+
+    public void setForceSOAP11(boolean forceSOAP11) {
                this.forceSOAP11 = forceSOAP11;
        }
 

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
 Tue Nov 20 03:18:02 2007
@@ -14,6 +14,7 @@
 import org.apache.axiom.om.OMNode;
 import org.apache.axis2.addressing.AddressingConstants;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 
 import java.util.Iterator;
 import java.util.ArrayList;
@@ -148,6 +149,8 @@
                 
ori.getProperty(org.apache.axis2.Constants.Configuration.ENABLE_MTOM));
         newMC.setProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA,
                 
ori.getProperty(org.apache.axis2.Constants.Configuration.ENABLE_SWA));
+        newMC.setProperty(Constants.Configuration.HTTP_METHOD,
+            ori.getProperty(Constants.Configuration.HTTP_METHOD));
 
         newMC.setDoingREST(ori.isDoingREST());
         newMC.setDoingMTOM(ori.isDoingMTOM());

Modified: 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/Axis2HttpRequest.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/Axis2HttpRequest.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/Axis2HttpRequest.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/Axis2HttpRequest.java
 Tue Nov 20 03:18:02 2007
@@ -21,12 +21,15 @@
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
 import org.apache.synapse.transport.nhttp.util.PipeImpl;
+import org.apache.synapse.transport.nhttp.util.RESTUtil;
 import org.apache.axis2.transport.http.HTTPConstants;
 import org.apache.axis2.transport.MessageFormatter;
 import org.apache.axis2.transport.TransportUtils;
 import org.apache.http.*;
 import org.apache.http.message.BasicHttpEntityEnclosingRequest;
+import org.apache.http.message.BasicHttpRequest;
 import org.apache.http.protocol.HTTP;
 import org.apache.http.entity.BasicHttpEntity;
 import org.apache.axiom.om.OMOutputFormat;
@@ -98,18 +101,41 @@
      */
     public HttpRequest getRequest() throws IOException {
 
-        HttpEntityEnclosingRequest httpRequest = null;
+        boolean doingGET = Constants.Configuration.HTTP_METHOD_GET.equals(
+            msgContext.getProperty(Constants.Configuration.HTTP_METHOD));
+        HttpRequest httpRequest = null;
         if (msgContext.isPropertyTrue(NhttpConstants.FORCE_HTTP_1_0)) {
-            httpRequest = new BasicHttpEntityEnclosingRequest(
-                "POST", epr.getAddress(), HttpVersion.HTTP_1_0);
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            messageFormatter.writeTo(msgContext, format, baos, true);
-            BasicHttpEntity entity = new BasicHttpEntity();
-            entity.setContentLength(baos.toByteArray().length);
-            httpRequest.setEntity(entity);
+            
+            if (doingGET) {
+                
+                httpRequest = new BasicHttpRequest(
+                    "GET", RESTUtil.getURI(
+                    msgContext, epr.getAddress()), HttpVersion.HTTP_1_0);
+                
+            } else {
+                
+                httpRequest = new BasicHttpEntityEnclosingRequest(
+                    "POST", epr.getAddress(), HttpVersion.HTTP_1_0);
+                
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                messageFormatter.writeTo(msgContext, format, baos, true);
+                BasicHttpEntity entity = new BasicHttpEntity();
+                entity.setContentLength(baos.toByteArray().length);
+                ((BasicHttpEntityEnclosingRequest) 
httpRequest).setEntity(entity);
+            }
+
+
         } else {
-            httpRequest = new BasicHttpEntityEnclosingRequest("POST", 
epr.getAddress());
-            httpRequest.setEntity(new BasicHttpEntity());
+            
+            if (doingGET) {
+
+                httpRequest = new BasicHttpRequest(
+                    "GET", RESTUtil.getURI(msgContext, epr.getAddress()));
+
+            } else {
+                httpRequest = new BasicHttpEntityEnclosingRequest("POST", 
epr.getAddress());
+                ((BasicHttpEntityEnclosingRequest) httpRequest).setEntity(new 
BasicHttpEntity());
+            }
         }
 
         // set any transport headers
@@ -147,7 +173,6 @@
             httpRequest.setHeader(HTTPConstants.HEADER_SOAP_ACTION,
                 soapAction);
         }
-
 
         httpRequest.setHeader(
             HTTP.CONTENT_TYPE,

Modified: 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java?rev=596621&r1=596620&r2=596621&view=diff
==============================================================================
--- 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/ServerWorker.java
 Tue Nov 20 03:18:02 2007
@@ -248,6 +248,7 @@
         }
 
         String serviceName = null;
+        String operation = null;
         if (uri.startsWith(servicePath)) {
             serviceName = uri.substring(servicePath.length());
             if (serviceName.startsWith("/")) {
@@ -258,6 +259,12 @@
             }
         }
 
+        int opnStart = serviceName.indexOf("/");
+        if (opnStart != -1) {
+            operation = serviceName.substring(opnStart+1);
+            serviceName = serviceName.substring(0, opnStart);
+        }
+
         Map parameters = new HashMap();
         int pos = uri.indexOf("?");
         if (pos != -1) {
@@ -273,6 +280,11 @@
             }
         }
 
+        if ("GET".equalsIgnoreCase(request.getRequestLine().getMethod())) {
+            msgContext.setProperty(Constants.Configuration.HTTP_METHOD,
+                Constants.Configuration.HTTP_METHOD_GET);
+        }
+
         if (uri.equals("/favicon.ico")) {
             response.setStatusCode(HttpStatus.SC_MOVED_PERMANENTLY);
             response.addHeader(LOCATION, "http://ws.apache.org/favicon.ico";);
@@ -378,7 +390,8 @@
             }
 
         } else {
-            if (parameters.isEmpty()) {
+
+            if (parameters.isEmpty() && operation == null) {
                 AxisService service = (AxisService) 
cfgCtx.getAxisConfiguration().
                     getServices().get(serviceName);
                 if (service != null) {
@@ -398,7 +411,7 @@
 
             } else {
                 try {
-
+                    
                     HTTPTransportUtils.processHTTPGetRequest(
                             msgContext, os,
                             (request.getFirstHeader(SOAPACTION) != null ?
@@ -415,6 +428,7 @@
                             request.getRequestLine().getUri(), axisFault);
                 }
             }
+
         }
 
         // make sure that the output stream is flushed and closed properly

Added: 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java?rev=596621&view=auto
==============================================================================
--- 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java
 (added)
+++ 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java
 Tue Nov 20 03:18:02 2007
@@ -0,0 +1,108 @@
+/*
+ *  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.synapse.transport.nhttp.util;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.WSDL20DefaultValueHolder;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.transport.http.util.URIEncoderDecoder;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Iterator;
+
+/**
+ * This class provides a set of utility methods to manage the REST invocation 
calls
+ * going out from the nhttp transport in the HTTP GET method
+ */
+public class RESTUtil {
+
+    /**
+     * This method will return the URI part for the GET HTTPRequest by 
converting
+     * the SOAP infoset to the URL-encoded GET format
+     * 
+     * @param messageContext - from which the SOAP infoset will be extracted 
to encode
+     * @param address        - address of the actual service
+     * @return uri       - ERI of the GET request
+     * @throws AxisFault - if the SOAP infoset cannot be converted in to the 
GET URL-encoded format
+     */
+    public static String getURI(MessageContext messageContext, String address) 
throws AxisFault {
+        
+        OMElement firstElement;
+        address = address.substring(address.indexOf("//") + 2);
+        address = address.substring(address.indexOf("/"));
+        String queryParameterSeparator = (String) messageContext
+                
.getProperty(WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR);
+        // In case queryParameterSeparator is null we better use the default 
value
+
+        if (queryParameterSeparator == null) {
+            queryParameterSeparator = WSDL20DefaultValueHolder
+                    
.getDefaultValue(WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR);
+        }
+
+        firstElement = 
messageContext.getEnvelope().getBody().getFirstElement();
+        String params = "";
+
+        if (firstElement != null) {
+
+            // first element corresponds to the operation name
+            address = address + "/" + firstElement.getLocalName();
+
+            Iterator iter = firstElement.getChildElements();
+
+            String legalCharacters = WSDL2Constants
+                .LEGAL_CHARACTERS_IN_QUERY.replaceAll(queryParameterSeparator, 
"");
+            StringBuffer buff = new StringBuffer(params);
+
+            // iterate through the child elements and find the request 
parameters
+            while (iter.hasNext()) {
+                OMElement element = (OMElement) iter.next();
+                try {
+                    
buff.append(URIEncoderDecoder.quoteIllegal(element.getLocalName(),
+                        
legalCharacters)).append("=").append(URIEncoderDecoder.quoteIllegal(element.getText(),
+                        legalCharacters)).append(queryParameterSeparator);
+                } catch (UnsupportedEncodingException e) {
+                    throw new AxisFault("URI Encoding error : " + 
element.getLocalName()
+                        + "=" + element.getText(), e);
+                }
+            }
+
+            params = buff.toString();
+        } else {
+            throw new AxisFault("Cannot convert SOAP infoset to a GET 
URL-encoded format");
+        }
+
+        if (params.trim().length() != 0) {
+            int index = address.indexOf("?");
+            if (index == -1) {
+                address = address + "?" + params.substring(0, params.length() 
- 1);
+            } else if (index == address.length() - 1) {
+                address = address + params.substring(0, params.length() - 1);
+
+            } else {
+                address = address
+                    + queryParameterSeparator + params.substring(0, 
params.length() - 1);
+            }
+        }
+        
+        return address;
+    }
+}

Propchange: 
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/nhttp/util/RESTUtil.java
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to