Author: supun
Date: Tue Aug  2 08:48:23 2011
New Revision: 1153064

URL: http://svn.apache.org/viewvc?rev=1153064&view=rev
Log:
adding support for url endpoints

Added:
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpoint.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpointsConfiguration.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointFactory.java
    
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointsConfigurationFactory.java

Added: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpoint.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpoint.java?rev=1153064&view=auto
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpoint.java
 (added)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpoint.java
 Tue Aug  2 08:48:23 2011
@@ -0,0 +1,91 @@
+/*
+ *  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.axis2.transport.base.endpoint;
+
+import org.apache.axis2.builder.Builder;
+import org.apache.axis2.builder.SOAPBuilder;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.Parameter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class URLEndpoint {
+     private Pattern urlPattern;
+
+    private Map<String, Builder> messageBuilders = new HashMap<String, 
Builder>();
+
+    private List<Parameter> parameters = new ArrayList<Parameter>();
+
+    private Builder defaultBuilder = new SOAPBuilder();
+
+    public URLEndpoint(Pattern urlPattern) {
+        this.urlPattern = urlPattern;
+    }
+
+    public boolean isMatching(String url) {
+        Matcher matcher = urlPattern.matcher(url);
+        return matcher.matches();
+    }
+
+    public void addBuilder(String name, Builder builder) {
+        messageBuilders.put(name, builder);
+    }
+
+    public void addParameter(Parameter parameter) {
+        parameters.add(parameter);
+    }
+
+    public Parameter getParameter(String name) {
+        for (Parameter p : parameters) {
+            if (p.getName().equals(name)) {
+                return p;
+            }
+        }
+        return null;
+    }
+
+    public List<Parameter> getParameters() {
+        return parameters;
+    }
+
+    public void setDefaultBuilder(Builder defaultBuilder) {
+        this.defaultBuilder = defaultBuilder;
+    }
+
+    public Builder getBuilder(String contentType) {
+        Builder builder = messageBuilders.get(contentType);
+        if (builder == null) {
+            return defaultBuilder;
+        }
+
+        return builder;
+    }
+
+    public void setParameters(MessageContext msgCtx) {
+        for (Parameter p : parameters) {
+            msgCtx.setProperty(p.getName(), p.getValue());
+        }
+    }
+}

Added: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpointsConfiguration.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpointsConfiguration.java?rev=1153064&view=auto
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpointsConfiguration.java
 (added)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/URLEndpointsConfiguration.java
 Tue Aug  2 08:48:23 2011
@@ -0,0 +1,57 @@
+/*
+ *  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.axis2.transport.base.endpoint;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class URLEndpointsConfiguration {
+    public static final String URL_PATTERN = "urlPattern";
+    public static final String MESSAGE_BUILDERS = "messageBuilders";
+    public static final String MESSAGE_BUILDER = "messageBuilder";
+    public static final String CONTENT_TYPE = "contentType";
+    public static final String CLASS = "class";
+    public static final String PARAMETER = "parameter";
+    public static final String NAME = "name";
+    public static final String ENDPOINT = "endpoint";
+    private List<URLEndpoint> endpoints = new ArrayList<URLEndpoint>();
+
+    /**
+     * Return the endpoint matching the given URL.
+     * @param url url of the request
+     * @return the endpoint matching the given url
+     */
+    public URLEndpoint getEndpoint(String url) {
+        for (URLEndpoint epr : endpoints) {
+            if (epr.isMatching(url)) {
+                return epr;
+            }
+        }
+
+        return null;
+    }
+
+    public List<URLEndpoint> getEndpoints() {
+        return endpoints;
+    }
+
+    public void addEndpoint(URLEndpoint endpoint) {
+        endpoints.add(endpoint);
+    }
+}

Added: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointFactory.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointFactory.java?rev=1153064&view=auto
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointFactory.java
 (added)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointFactory.java
 Tue Aug  2 08:48:23 2011
@@ -0,0 +1,140 @@
+/*
+ *  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.axis2.transport.base.endpoint.config;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.builder.Builder;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.transport.base.endpoint.URLEndpoint;
+import org.apache.axis2.transport.base.endpoint.URLEndpointsConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import java.util.regex.Pattern;
+
+public class URLEndpointFactory {
+    private static final Log log = LogFactory.getLog(URLEndpointFactory.class);
+
+    public URLEndpoint create(OMElement xml) throws AxisFault {
+        OMAttribute urlPatternAttr = xml.getAttribute(new 
QName(URLEndpointsConfiguration.URL_PATTERN));
+        if (urlPatternAttr == null) {
+            handleException(URLEndpointsConfiguration.URL_PATTERN +
+                    " attribute is mandory for an URLEndpoint configuration");
+            return null;
+        }
+
+        String pattern = urlPatternAttr.getAttributeValue();
+        URLEndpoint endpoint = new URLEndpoint(Pattern.compile(pattern));
+
+        OMElement messageBuilders = xml.getFirstChildWithName(
+                new QName(URLEndpointsConfiguration.MESSAGE_BUILDERS));
+
+        if (messageBuilders != null) {
+            OMAttribute defaultBuilderAttr = messageBuilders.getAttribute(
+                    new QName("defaultBuilder"));
+            if (defaultBuilderAttr != null) {
+                Builder builder = 
loadBuilder(defaultBuilderAttr.getAttributeValue());
+                if (builder != null) {
+                    endpoint.setDefaultBuilder(builder);
+                }
+            }
+
+            Iterator it = messageBuilders.getChildrenWithName(
+                    new QName(URLEndpointsConfiguration.MESSAGE_BUILDER));
+            while(it.hasNext()) {
+                OMElement builderElement = (OMElement) it.next();
+
+                OMAttribute contentTypeAttr = builderElement.getAttribute(
+                        new QName(URLEndpointsConfiguration.CONTENT_TYPE));
+                if (contentTypeAttr == null) {
+                    handleException(URLEndpointsConfiguration.CONTENT_TYPE +
+                            " attribute cannot be null for URLEndpoint " +
+                            "with the " + 
URLEndpointsConfiguration.URL_PATTERN + " : " + pattern);
+                }
+
+                OMAttribute classAttr = builderElement.getAttribute(
+                        new QName(URLEndpointsConfiguration.CLASS));
+                if (classAttr == null) {
+                    handleException(URLEndpointsConfiguration.CLASS +
+                            " attribute cannot be null for URLEndpoint " +
+                            "with the " + 
URLEndpointsConfiguration.URL_PATTERN + " : " + pattern);
+                }
+
+                if (classAttr != null && contentTypeAttr != null) {
+                    Builder builder = 
loadBuilder(classAttr.getAttributeValue());
+                    if (builder != null) {
+                        
endpoint.addBuilder(contentTypeAttr.getAttributeValue(), builder);
+                    }
+                }
+            }
+        }
+
+        Iterator paramItr = xml.getChildrenWithName(
+                new QName(URLEndpointsConfiguration.PARAMETER));
+        while (paramItr.hasNext()) {
+            OMElement p = (OMElement) paramItr.next();
+            OMAttribute paramNameAttr = p.getAttribute(new 
QName(URLEndpointsConfiguration.NAME));
+            if (paramNameAttr == null) {
+                handleException("Parameter " + URLEndpointsConfiguration.NAME 
+ " cannot be null");
+            } else {
+                endpoint.addParameter(new 
Parameter(paramNameAttr.getAttributeValue(), p.getText()));
+            }
+        }
+
+        return endpoint;
+    }
+
+    private Builder loadBuilder(String name) throws AxisFault {
+        try {
+            if (name != null) {
+                Class c = Class.forName(name);
+                Object o = c.newInstance();
+                if (o instanceof Builder) {
+                    return (Builder) o;
+                } else {
+                    handleException("Class : " + name +
+                            " should be a Builder");
+                }
+            }
+        } catch (ClassNotFoundException e) {
+            handleException("Error creating builder: " + name, e);
+        } catch (InstantiationException e) {
+            handleException("Error initializing builder: " + name, e);
+        } catch (IllegalAccessException e) {
+            handleException("Error initializing builder: " + name, e);
+        }
+
+        return null;
+    }
+
+    private void handleException(String msg) throws AxisFault {
+        log.error(msg);
+        throw new AxisFault(msg);
+    }
+
+    private void handleException(String msg, Exception e) throws AxisFault {
+        log.error(msg, e);
+        throw new AxisFault(msg, e);
+    }
+}

Added: 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointsConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointsConfigurationFactory.java?rev=1153064&view=auto
==============================================================================
--- 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointsConfigurationFactory.java
 (added)
+++ 
axis/axis2/java/transports/trunk/modules/base/src/main/java/org/apache/axis2/transport/base/endpoint/config/URLEndpointsConfigurationFactory.java
 Tue Aug  2 08:48:23 2011
@@ -0,0 +1,83 @@
+/*
+ *  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.axis2.transport.base.endpoint.config;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMXMLBuilderFactory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.transport.base.endpoint.URLEndpoint;
+import org.apache.axis2.transport.base.endpoint.URLEndpointsConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.Iterator;
+
+public class URLEndpointsConfigurationFactory {
+    private static final Log log = 
LogFactory.getLog(URLEndpointsConfigurationFactory.class);
+
+    public URLEndpointsConfiguration create(OMElement element) throws 
AxisFault {
+        Iterator iterator = element.getChildrenWithName(new 
QName(URLEndpointsConfiguration.ENDPOINT));
+        URLEndpointsConfiguration configuration = new 
URLEndpointsConfiguration();
+        URLEndpointFactory fac = new URLEndpointFactory();
+        while (iterator.hasNext()) {
+            OMElement endpoint = (OMElement) iterator.next();
+
+            URLEndpoint epr = fac.create(endpoint);
+            configuration.addEndpoint(epr);
+        }
+
+        return configuration;
+    }
+
+    public URLEndpointsConfiguration create(String fileName) throws AxisFault {
+        File synapseConfigLocation = new File(fileName);
+
+        FileInputStream is = null;
+        try {
+            is = new FileInputStream(synapseConfigLocation);
+        } catch (FileNotFoundException e) {
+            handleException("Error reading file: " + fileName + "for creating 
the " +
+                    URLEndpointsConfiguration.ENDPOINT + " configurations");
+        }
+        OMElement element = 
OMXMLBuilderFactory.createOMBuilder(is).getDocumentElement();
+        element.build();
+
+        Iterator iterator = element.getChildrenWithName(new 
QName(URLEndpointsConfiguration.ENDPOINT));
+        URLEndpointsConfiguration configuration = new 
URLEndpointsConfiguration();
+        URLEndpointFactory fac = new URLEndpointFactory();
+        while (iterator.hasNext()) {
+            OMElement endpoint = (OMElement) iterator.next();
+
+            URLEndpoint epr = fac.create(endpoint);
+            configuration.addEndpoint(epr);
+        }
+
+        return configuration;
+    }
+
+    private void handleException(String msg) throws AxisFault {
+        log.error(msg);
+        throw new AxisFault(msg);
+    }
+}


Reply via email to