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