Hi Isuru, Yes, according to the initial implementation of this fix, APIs which support both protocols (http and https), were made to include both values as a space separated string in the namespace. However as pointed out by Hiranya in [1], we opted to maintain only one transport value in the transport section, in order to conform with how similar validations have been done in Synapse Resources section.
Hence in the case of an API supporting both transports, you need to omit the transport namespace entirely, as this is how the new implementation has been done. [1] - https://issues.apache.org/jira/browse/SYNAPSE-953 Thanks and Regards, Ruwan Yatawara Software Engineer, WSO2 Inc. lean . enterprise . middleware email : [email protected] mobile : +94 77 9110413 blog : http://ruwansrants.blogspot.com/ www: :http://wso2.com On Wed, Aug 7, 2013 at 10:07 PM, Isuru Udana <[email protected]> wrote: > 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, <[email protected]> wrote: > >> Author: [email protected] >> 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 >> [email protected] >> http://wso2.org/cgi-bin/mailman/listinfo/commits >> > > > > -- > *Isuru Udana* > * > * > Senior * > Software Engineer > * > WSO2 Inc.; http://wso2.com > email: [email protected] cell: +94 77 3791887 > blog: http://mytecheye.blogspot.com/ > twitter: http://twitter.com/isudana > > _______________________________________________ > Dev mailing list > [email protected] > http://wso2.org/cgi-bin/mailman/listinfo/dev > >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
