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