Hi Nuwan,

After updating synapse with this commit, Rest API's which I had deployed in
my ESB instance are failing to deploy now.
It seems like API's having both http and https transports (transports="http
https") are failing to deploy.

According to the following logic at APIFactory, it seems like only one
transport is allowed for an api.

OMAttribute trans = apiElt.getAttribute(
                new QName(XMLConfigConstants.NULL_NAMESPACE, "transports"));
        if (trans != null) {
            String transports = trans.getAttributeValue();
            if (!"".equals(transports)) {
                if (Constants.TRANSPORT_HTTP.equals(transports)) {
                    api.setProtocol(RESTConstants.PROTOCOL_HTTP_ONLY);
                } else if (Constants.TRANSPORT_HTTPS.equals(transports)) {
                    api.setProtocol(RESTConstants.PROTOCOL_HTTPS_ONLY);
                } else {
                    handleException("Invalid protocol name: " + transports);
                }
            }
        }

Isn't this wrong ?


On Wed, Aug 7, 2013 at 1:25 PM, <nuw...@wso2.com> wrote:

> Author: nuw...@wso2.com
> Date: Wed Aug  7 13:25:10 2013
> New Revision: 180125
> URL: http://wso2.org/svn/browse/wso2?view=rev&revision=180125
>
> Log:
> Fixes for APIMANAGER-1417. Changes done by Ruwan
>
> Modified:
>
>  
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
>
>  
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APIFactory.java
>
>  
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APISerializer.java
>
>  
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/rest/API.java
>
> Modified:
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
> URL:
> http://wso2.org/svn/browse/wso2/carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=180125&r1=180124&r2=180125&view=diff
>
> ==============================================================================
> ---
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
> (original)
> +++
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
> Wed Aug  7 13:25:10 2013
> @@ -160,6 +160,10 @@
>          public static final String PROXY_SERVICE = "proxy.name";
>          /** The Synapse MC property that marks it as a RESPONSE */
>          public static final String RESPONSE = "RESPONSE";
> +        /** The Synapse MC property that indicates the in-transport */
> +        public static final String IN_TRANSPORT = "IN_TRANSPORT";
> +        /** The Synapse MC property that marks if the message was denied
> on the accessed transport */
> +        public static final String TRANSPORT_DENIED = "TRANSPORT_DENIED";
>          /** The Synapse MC property that marks the message as a OUT_ONLY
> message */
>          public static final String OUT_ONLY = "OUT_ONLY";
>          /** The Synapse MC property that states that existing WS-A
> headers in the envelope should
> @@ -168,12 +172,6 @@
>          /** The Synapse MC property that marks to Exception to be thrown
> on SOAPFault(Retry on SOAPFault)*/
>          public static final String RETRY_ON_SOAPFAULT =
> "RETRY_ON_SOAPFAULT";
>
> -        //Properties for Rest API transport level validation
> -        /** The Synapse MC property that indicates the in-transport */
> -        public static final String IN_TRANSPORT = "IN_TRANSPORT";
> -        /** The Synapse MC property that marks if the message was denied
> on the accessed transport */
> -        public static final String TRANSPORT_DENIED = "TRANSPORT_DENIED";
> -
>          /**
>           * The name of the property which specifies the operation name
> that is
>           * invoked by an endpoint
>
> Modified:
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APIFactory.java
> URL:
> http://wso2.org/svn/browse/wso2/carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APIFactory.java?rev=180125&r1=180124&r2=180125&view=diff
>
> ==============================================================================
> ---
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APIFactory.java
>       (original)
> +++
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APIFactory.java
>       Wed Aug  7 13:25:10 2013
> @@ -20,22 +20,20 @@
>
>  import org.apache.axiom.om.OMAttribute;
>  import org.apache.axiom.om.OMElement;
> +import org.apache.axis2.Constants;
>  import org.apache.axiom.om.OMNode;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>  import org.apache.synapse.SynapseException;
>  import org.apache.synapse.commons.util.PropertyHelper;
>  import org.apache.synapse.config.xml.XMLConfigConstants;
> -import org.apache.synapse.core.axis2.ProxyService;
>  import org.apache.synapse.rest.API;
>  import org.apache.synapse.rest.Handler;
> +import org.apache.synapse.rest.RESTConstants;
>  import org.apache.synapse.rest.version.VersionStrategy;
>
>  import javax.xml.namespace.QName;
> -import java.util.ArrayList;
> -import java.util.Arrays;
>  import java.util.Iterator;
> -import java.util.StringTokenizer;
>
>  public class APIFactory {
>
> @@ -101,27 +99,18 @@
>
>          OMAttribute trans = apiElt.getAttribute(
>                  new QName(XMLConfigConstants.NULL_NAMESPACE,
> "transports"));
> -        ArrayList<String> transportList = new ArrayList<String>();
>          if (trans != null) {
>              String transports = trans.getAttributeValue();
> -            if (transports == null ||
> ProxyService.ALL_TRANSPORTS.equals(transports)) {
> -                // default to all transports using service name as
> destination
> -            } else {
> -                StringTokenizer st = new StringTokenizer(transports, "
> ,");
> -                while (st.hasMoreTokens()) {
> -                    String token = st.nextToken();
> -                    if (token.length() != 0) {
> -                        transportList.add(token);
> -                    }
> +            if (!"".equals(transports)) {
> +                if (Constants.TRANSPORT_HTTP.equals(transports)) {
> +                    api.setProtocol(RESTConstants.PROTOCOL_HTTP_ONLY);
> +                } else if (Constants.TRANSPORT_HTTPS.equals(transports)) {
> +                    api.setProtocol(RESTConstants.PROTOCOL_HTTPS_ONLY);
> +                } else {
> +                    handleException("Invalid protocol name: " +
> transports);
>                  }
>              }
> -        }else{
> -            //By default if the transport tag is not present
> -            //access will be allowed both via HTTP and HTTPs
> -            String[] transports = {"http","https"};
> -            transportList.addAll(Arrays.asList(transports));
>          }
> -        api.setTransports(transportList);
>          return api;
>      }
>
>
> Modified:
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APISerializer.java
> URL:
> http://wso2.org/svn/browse/wso2/carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APISerializer.java?rev=180125&r1=180124&r2=180125&view=diff
>
> ==============================================================================
> ---
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APISerializer.java
>    (original)
> +++
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/config/xml/rest/APISerializer.java
>    Wed Aug  7 13:25:10 2013
> @@ -19,14 +19,15 @@
>  package org.apache.synapse.config.xml.rest;
>
>  import org.apache.axiom.om.*;
> +import org.apache.axis2.Constants;
>  import org.apache.synapse.SynapseConstants;
>  import org.apache.synapse.config.xml.XMLConfigConstants;
>  import org.apache.synapse.rest.API;
>  import org.apache.synapse.rest.Handler;
> +import org.apache.synapse.rest.RESTConstants;
>  import org.apache.synapse.rest.Resource;
>
>  import java.util.Iterator;
> -import java.util.List;
>
>  public class APISerializer {
>
> @@ -83,14 +84,10 @@
>              apiElt.addChild(handlersElt);
>          }
>
> -        List transports = api.getTransports();
> -        if (transports != null && !transports.isEmpty()) {
> -            String transportStr = "" + transports.get(0);
> -            for (int i = 1; i < transports.size(); i++) {
> -                transportStr = transportStr.concat(" " +
> transports.get(i));
> -            }
> -            OMNamespace nullNS =
> fac.createOMNamespace(XMLConfigConstants.NULL_NAMESPACE, "");
> -            apiElt.addAttribute(fac.createOMAttribute("transports",
> nullNS, transportStr));
> +        if (api.getProtocol() == RESTConstants.PROTOCOL_HTTP_ONLY) {
> +            apiElt.addAttribute("transports", Constants.TRANSPORT_HTTP,
> null);
> +        } else if (api.getProtocol() ==
> RESTConstants.PROTOCOL_HTTPS_ONLY) {
> +            apiElt.addAttribute("transports", Constants.TRANSPORT_HTTPS,
> null);
>          }
>
>          return apiElt;
>
> Modified:
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/rest/API.java
> URL:
> http://wso2.org/svn/browse/wso2/carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/rest/API.java?rev=180125&r1=180124&r2=180125&view=diff
>
> ==============================================================================
> ---
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/rest/API.java
> (original)
> +++
> carbon/platform/trunk/dependencies/synapse/2.1.1-wso2v8/modules/core/src/main/java/org/apache/synapse/rest/API.java
> Wed Aug  7 13:25:10 2013
> @@ -44,15 +44,12 @@
>      private Map<String,Resource> resources = new
> LinkedHashMap<String,Resource>();
>      private List<Handler> handlers = new ArrayList<Handler>();
>
> +    private int protocol = RESTConstants.PROTOCOL_HTTP_AND_HTTPS;
> +
>      private VersionStrategy versionStrategy = new DefaultStrategy(this);
>
>      private String fileName;
>
> -    /**
> -     * The transport/s over which this API should be exposed, or defaults
> to all available
> -     */
> -    private ArrayList<String> transports = new ArrayList<String>();
> -
>      public API(String name, String context) {
>          super(name);
>          if (!context.startsWith("/")) {
> @@ -74,16 +71,16 @@
>          return name;
>      }
>
> -    public String getAPIName() {
> -        return name;
> +    public int getProtocol() {
> +        return protocol;
>      }
>
> -    public ArrayList getTransports() {
> -        return transports;
> +    public void setProtocol(int protocol) {
> +        this.protocol = protocol;
>      }
>
> -    public void setTransports(ArrayList transports) {
> -        this.transports = transports;
> +    public String getAPIName() {
> +        return name;
>      }
>
>      public String getVersion(){
> @@ -217,7 +214,22 @@
>                      return false;
>                  }
>              }
> -            if(!transports.isEmpty() &&
> !transports.contains(msgCtx.getTransportIn().getName())){
> +            if (protocol == RESTConstants.PROTOCOL_HTTP_ONLY &&
> +
>  !Constants.TRANSPORT_HTTP.equals(msgCtx.getIncomingTransportName())) {
> +                if (log.isDebugEnabled()) {
> +                    log.debug("Protocol information does not match -
> Expected HTTP");
> +                }
> +                synCtx.setProperty(SynapseConstants.TRANSPORT_DENIED,new
> Boolean(true));
> +
>  
> synCtx.setProperty(SynapseConstants.IN_TRANSPORT,msgCtx.getTransportIn().getName());
> +                log.warn("Trying to access API : "+name+" on restricted
> transport chanel ["+msgCtx.getTransportIn().getName()+"]");
> +                return false;
> +            }
> +
> +            if (protocol == RESTConstants.PROTOCOL_HTTPS_ONLY &&
> +
>  !Constants.TRANSPORT_HTTPS.equals(msgCtx.getIncomingTransportName())) {
> +                if (log.isDebugEnabled()) {
> +                    log.debug("Protocol information does not match -
> Expected HTTPS");
> +                }
>                  synCtx.setProperty(SynapseConstants.TRANSPORT_DENIED,new
> Boolean(true));
>
>  
> synCtx.setProperty(SynapseConstants.IN_TRANSPORT,msgCtx.getTransportIn().getName());
>                  log.warn("Trying to access API : "+name+" on restricted
> transport chanel ["+msgCtx.getTransportIn().getName()+"]");
> _______________________________________________
> Commits mailing list
> comm...@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/commits
>



-- 
*Isuru Udana*
*
 *
Senior *
Software Engineer
*
WSO2 Inc.; http://wso2.com
email: isu...@wso2.com cell: +94 77 3791887
blog: http://mytecheye.blogspot.com/
twitter: http://twitter.com/isudana
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to