You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by sa...@apache.org on 2006/03/22 14:48:32 UTC

svn commit: r387860 - in /incubator/synapse/trunk/java/modules/core: src/org/apache/synapse/ src/org/apache/synapse/api/ src/org/apache/synapse/axis2/ src/org/apache/synapse/axis2/utils/ src/org/apache/synapse/resources/ src/org/apache/synapse/resource...

Author: saminda
Date: Wed Mar 22 05:48:29 2006
New Revision: 387860

URL: http://svn.apache.org/viewcvs?rev=387860&view=rev
Log:
Implementation of Proposed Resource handling framework by Paul. A test case is added to test the frame work with the 
notion of REST GET invocation. 
SynapseEnvironment {
    ResourceHelper getResourceHelper();
}

public interface ResourceHelper {
    OMElement get(String uri); // get a resource
    OMElement get(String uri, ResourceUpdateAware mediator); // get a resource and be notified of changes
    void registerResourceHandler(ResourceHandler rh, String urlRoot); 
         // register a handler for a given set of URLs (which share the same root)
    void notifyUpdate(String uriRoot);
         // a resource handler uses this to notify that all resources with that root have changed (Resource Push 
model) 
}

public interface ResourceHandler {
    OMElement get(String uri);

    void setProperty(String name, String value);
    String getProperty(String name);
    String[] getPropertyNames();

    boolean isUpdated(String uriRoot); // used to poll if resource has changed (Pull model)
}

<synapse.xml>

<resource type="o.a.s.resources.HttpResource" uri-root=" http://fremantle.org/resources/">
   <property name="http.username">paul</property>
   <property name="http.password">pass</property>
   <property name=" http.proxy">proxy:80</property>
</resource>

ResourceHelpers notification mechanism is yet to commit. Mediator author can get ResourceHandlers form synapse.xml or 
one can set it runtime. 

Added:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/api/ResourceUpdateAware.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHandler.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelper.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperImpl.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/SimpleGETResourceHandler.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediator.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediatorFactory.java
    incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleGETResourceAquiringMediator.java
    incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/
    incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/SimpleResourcesAquiringTest.java
Removed:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/utils/
    incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleResourceAquireMediator.java
    incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/injection/SimpleResourceAquireTest.java
Modified:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/SynapseEnvironment.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/Axis2SynapseEnvironment.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/xml/ProcessorConfiguratorFinder.java

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/SynapseEnvironment.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/SynapseEnvironment.java?rev=387860&r1=387859&r2=387860&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/SynapseEnvironment.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/SynapseEnvironment.java Wed Mar 22 05:48:29 2006
@@ -16,6 +16,7 @@
 package org.apache.synapse;
 
 import org.apache.axis2.om.OMElement;
+import org.apache.synapse.resources.ResourceHelper;
 
 import java.util.Map;
 import java.util.HashMap;
@@ -130,5 +131,8 @@
     /**
      * This method is responsible for updating resources via simple GET interface.
      */
-    abstract public OMElement get(String url);
+   
+    abstract public ResourceHelper getResourceHelper();
+
+    abstract  public void addResourceProcessor(Processor p);
 }

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/api/ResourceUpdateAware.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/api/ResourceUpdateAware.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/api/ResourceUpdateAware.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/api/ResourceUpdateAware.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,19 @@
+package org.apache.synapse.api;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public interface ResourceUpdateAware {
+}

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/Axis2SynapseEnvironment.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/Axis2SynapseEnvironment.java?rev=387860&r1=387859&r2=387860&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/Axis2SynapseEnvironment.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/axis2/Axis2SynapseEnvironment.java Wed Mar 22 05:48:29 2006
@@ -26,15 +26,17 @@
 import org.apache.synapse.Processor;
 import org.apache.synapse.SynapseEnvironment;
 import org.apache.synapse.SynapseMessage;
-import org.apache.synapse.axis2.utils.ResourcesHandler;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.resources.ResourceHelperFactory;
+import org.apache.synapse.resources.ResourceHelper;
 
 import org.apache.synapse.xml.ProcessorConfiguratorFinder;
 
 /**
  *
  *
- * 
- * <p> This is the Axis2 implementation of the SynapseEnvironment 
+ *
+ * <p> This is the Axis2 implementation of the SynapseEnvironment
  *
  */
 public class Axis2SynapseEnvironment extends SynapseEnvironment {
@@ -46,7 +48,10 @@
 
     private Log log = LogFactory.getLog(getClass());
 
-	public Axis2SynapseEnvironment(OMElement synapseConfiguration,
+    //resourceProcessors keeps track of all <resources/>
+    private HashMap resourceProcessors = new HashMap();
+
+    public Axis2SynapseEnvironment(OMElement synapseConfiguration,
 			ClassLoader cl) {
 		super(null);
 		this.cl = cl;
@@ -67,13 +72,13 @@
 	}
 
 	public void send(SynapseMessage sm, SynapseEnvironment se) {
-		if (sm.isResponse()) 
+		if (sm.isResponse())
 			Axis2Sender.sendBack(sm);
-		else 
+		else
 			Axis2Sender.sendOn(sm, se);
 	}
 
-	
+
 	public Processor lookupProcessor(String name) {
 		return (Processor) processors.get(name);
 	}
@@ -88,12 +93,27 @@
 	public Processor getMasterProcessor() {
 		return mainprocessor;
 	}
-	
+
 	public void setMasterProcessor(Processor p) {
 		mainprocessor = p;
 	}
 
-    public OMElement get(String url) {
-        return ResourcesHandler.simpleGETRquest(url);        
+    // lookup methods for resources handling
+    public Processor lookupResourceProcessor(String uriRoot) {
+        return (Processor) resourceProcessors.get(uriRoot);
+    }
+
+    public void addResourceProcessor(Processor p) {
+        if (resourceProcessors.containsKey(p.getName())) {
+            throw new SynapseException(
+                    "Uri Root is already exists. Not acceptable");
+        }
+        resourceProcessors.put(p.getName(), p);
+    }
+
+    public ResourceHelper getResourceHelper() {
+        ResourceHelperFactory fac = ResourceHelperFactory.newInstance();
+        fac.setResourceProcessorsMap(this.resourceProcessors);
+        return fac.createResourceHelper();
     }
 }

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHandler.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHandler.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHandler.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHandler.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,29 @@
+package org.apache.synapse.resources;
+
+import org.apache.axis2.om.OMElement;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public interface ResourceHandler {
+    OMElement get(String uri);
+
+    void setProperty(String name, String value);
+    String getProperty(String name);
+    String[] getPropertyNames();
+
+    boolean isUpdated(String uriRoot); // used to poll if resource has changed (Pull model)
+
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelper.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelper.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelper.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelper.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.synapse.resources;
+
+import org.apache.axis2.om.OMElement;
+import org.apache.synapse.api.ResourceUpdateAware;
+
+/**
+ *
+ */
+public interface ResourceHelper {
+
+    OMElement get(String uri); // get a resource
+    OMElement get(String uri, ResourceUpdateAware mediator); // get a resource and be notified of changes
+    void registerResourceHandler(ResourceHandler rh, String urlRoot);
+         // register a handler for a given set of URLs (which share the same root)
+    void notifyUpdate(String uriRoot);
+         // a resource handler uses this to notify that all resources with that root have changed (Resource Push model)
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperFactory.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperFactory.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperFactory.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperFactory.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,131 @@
+package org.apache.synapse.resources;
+
+
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.resources.xml.ResourceMediator;
+import org.apache.synapse.resources.xml.PropertyMediator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class ResourceHelperFactory {
+    private Log log = LogFactory.getLog(getClass());
+
+    private static ResourceHelperFactory fac;
+
+    private static boolean created = false;
+
+    private HashMap resourcesProcessorsMap;
+
+    private ResourceHelperFactory() {
+    }
+
+    public static ResourceHelperFactory newInstance() {
+        if (created) {
+            return fac;
+        } else {
+            fac = new ResourceHelperFactory();
+        }
+        return fac;
+    }
+
+    public ResourceHelper createResourceHelper() {
+        log.debug("Creating resources helper");
+        ResourceHelperImpl helper = new ResourceHelperImpl();
+
+        for (Iterator ite = resourcesProcessorsMap.keySet().iterator();
+             ite.hasNext();) {
+
+            String key = (String) ite.next();
+
+            Object obj = resourcesProcessorsMap.get(key);
+
+            if (obj instanceof ResourceMediator) {
+                ResourceMediator rp = (ResourceMediator) obj;
+                // getting the resource handler
+                ResourceHandler rh = getResourceHandler(rp.getType());
+                //filling the propertybags of ResourceHanlder
+                fillResourceHandler(rp,rh);
+                helper.registerResourceHandler(rh,rp.getURIRoot());
+            } else {
+                throw new SynapseException(
+                        "Should be found only ResourceHandler implementaions");
+            }
+
+        }
+        return helper;
+    }
+
+    private void fillResourceHandler(ResourceMediator rp, ResourceHandler rh) {
+        //filling the ResourcesHandlers properties
+        List rms = rp.getList();
+
+        for (Iterator ite = rms.iterator();ite.hasNext();) {
+            Object obj = ite.next();
+            if (obj instanceof PropertyMediator) {
+                PropertyMediator pp = (PropertyMediator)obj;
+                rh.setProperty(pp.getName(),pp.getValue());
+            } else {
+                throw new SynapseException("Support only PropertyMediator, found :" + obj.getClass().getName());
+            }
+        }
+
+
+
+    }
+
+    public void setResourceProcessorsMap(HashMap resourceProcessorsMap) {
+        this.resourcesProcessorsMap = resourceProcessorsMap;
+    }
+
+    private ResourceHandler getResourceHandler(String clazzName) {
+        ResourceHandler handler;
+        try {
+            Class clazz = Class.forName(clazzName);
+            Constructor ct = clazz.getConstructor(new Class[]{});
+            Object obj = ct.newInstance(new Object[]{});
+
+            if (obj instanceof ResourceHandler) {
+                handler = (ResourceHandler) obj;
+            } else {
+                throw new SynapseException(
+                        "Only Objects implements ResourceHandler should be available");
+            }
+            return handler;
+        } catch (ClassNotFoundException e) {
+            throw new SynapseException(e);
+        } catch (IllegalAccessException e) {
+            throw new SynapseException(e);
+        } catch (NoSuchMethodException e) {
+            throw new SynapseException(e);
+        } catch (InvocationTargetException e) {
+            throw new SynapseException(e);
+        } catch (InstantiationException e) {
+            throw new SynapseException(e);
+        }
+
+    }
+
+
+
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperImpl.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperImpl.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperImpl.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/ResourceHelperImpl.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,76 @@
+package org.apache.synapse.resources;
+
+import org.apache.axis2.om.OMElement;
+import org.apache.synapse.api.ResourceUpdateAware;
+import org.apache.synapse.SynapseException;
+
+import java.util.HashMap;
+import java.util.Map;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class ResourceHelperImpl implements ResourceHelper {
+
+    protected HashMap resourceHandlers = new HashMap();
+
+
+    public OMElement get(String uri) { // get a resource
+        if (!(uri.equals("") || uri == null)) {
+            Object obj = resourceHandlers.get(uri);
+            if (obj != null) {
+                if (obj instanceof ResourceHandler) {
+                    ResourceHandler rh = (ResourceHandler) obj;
+
+                    return rh.get(uri);
+                } else {
+                    throw new SynapseException("Unsupported uri");
+                }
+            } else {
+                throw new SynapseException("Map doesnt contain the requested ResourceHandler");
+
+            }
+        } else {
+            throw new SynapseException("Unsupported ResourceHandler ");
+        }
+
+
+    }
+
+    public OMElement get(String uri,
+                         ResourceUpdateAware mediator) { // get a resource and be notified of changes
+
+        throw new SynapseException("Not implemented");
+    }
+
+    public void registerResourceHandler(ResourceHandler rh, String urlRoot) {
+        //runtime null pointer setting if neeeded, otherwise it has already been checked.
+        if (rh != null && (urlRoot != null)) {
+            if (resourceHandlers.containsKey(urlRoot)) {
+                throw new SynapseException("Uri-root already exists");
+            } else {
+                resourceHandlers.put(urlRoot, rh);
+            }
+
+        }
+    }
+
+    // register a handler for a given set of URLs (which share the same root)
+    public void notifyUpdate(String uriRoot) {
+        throw new SynapseException("Not Implemented");
+    }
+
+
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/SimpleGETResourceHandler.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/SimpleGETResourceHandler.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/SimpleGETResourceHandler.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/http/SimpleGETResourceHandler.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,100 @@
+package org.apache.synapse.resources.http;
+
+import org.apache.synapse.resources.ResourceHandler;
+import org.apache.synapse.SynapseException;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.OMAbstractFactory;
+import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import java.util.HashMap;
+import java.util.Set;
+import java.io.IOException;
+import java.io.InputStream;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class SimpleGETResourceHandler implements ResourceHandler {
+
+    protected HashMap propertyMap = new HashMap();
+
+    public OMElement get(String uri) {
+        OMElement response = null;
+        HttpClient httpClient = new HttpClient();
+        /*
+         Following code technically gives the mediators to do a simple Http GET and aquire
+         some resources. Any mediator can use this method to quire its resources.
+        */
+        GetMethod httpGet = new GetMethod(uri);
+        try {
+
+            httpClient.executeMethod(httpGet);
+            if (httpGet.getStatusCode() == HttpStatus.SC_OK) {
+                response = processResponse(httpGet.getResponseBodyAsStream());
+            }
+        } catch (IOException e) {
+            throw new SynapseException(e);
+        } finally {
+            httpGet.releaseConnection();
+        }
+        if (response == null)
+            throw new SynapseException("There are no valid resonse resources");
+        return response;
+    }
+
+    public void setProperty(String name, String value) {
+        propertyMap.put(name, value);
+    }
+
+    public String getProperty(String name) {
+        return (String) propertyMap.get(name);
+    }
+
+    public String[] getPropertyNames() {
+
+        return ((String[]) propertyMap.keySet()
+                .toArray(new String[propertyMap.size()]));
+    }
+
+    public boolean isUpdated(String uriRoot){ // used to poll if resource has changed (Pull model)
+
+        //todo: implement this method.
+        return false;
+    }
+
+    private static OMElement processResponse(InputStream inputStream) {
+        if (inputStream == null) {
+            throw new SynapseException(
+                    "Input Stream cannot be null for Resource request");
+        }
+        try {
+            XMLStreamReader parser = XMLInputFactory.newInstance()
+                    .createXMLStreamReader(inputStream);
+            StAXOMBuilder builder =
+                    new StAXOMBuilder(OMAbstractFactory.getOMFactory(), parser);
+            OMElement resourceElement = builder.getDocumentElement();
+            resourceElement.build(); //make sure we are in safe side
+            return resourceElement;
+        } catch (XMLStreamException e) {
+            throw new SynapseException(e);
+        }
+    }
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediator.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediator.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediator.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,45 @@
+package org.apache.synapse.resources.xml;
+
+import org.apache.synapse.Processor;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseMessage;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class PropertyMediator implements Processor {
+
+    protected String name;
+    protected String value;
+    public boolean process(SynapseEnvironment se, SynapseMessage sm) {
+        // this is not a inline mediator. Its soule purpose is to provide properties from Synapse.xml
+        return true;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+    public String getValue() {
+        return value;
+    }
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediatorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediatorFactory.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediatorFactory.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/PropertyMediatorFactory.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,57 @@
+package org.apache.synapse.resources.xml;
+
+import org.apache.synapse.xml.ProcessorConfigurator;
+import org.apache.synapse.xml.Constants;
+import org.apache.synapse.Processor;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseException;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.OMAttribute;
+
+import javax.xml.namespace.QName;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class PropertyMediatorFactory implements ProcessorConfigurator {
+
+    private static final String PROPERTY = "property";
+
+    private static final QName PROPERTY_Q =
+            new QName(Constants.SYNAPSE_NAMESPACE,
+                    PROPERTY);
+
+    private static final QName PROPERTY_NAME_ATT_Q = new QName("name");
+
+    public Processor createProcessor(SynapseEnvironment se, OMElement el) {
+        PropertyMediator pp = new PropertyMediator();
+
+        OMAttribute name = el.getAttribute(PROPERTY_NAME_ATT_Q);
+        if (name == null) {
+            throw new SynapseException(PROPERTY + " must have "
+                    + PROPERTY_NAME_ATT_Q + " attribute: " + el.toString());
+        }
+
+        String value = el.getText();
+        pp.setName(name.getAttributeValue());
+        pp.setValue(value);
+
+        return pp;  
+    }
+
+    public QName getTagQName() {
+        return PROPERTY_Q;
+    }
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediator.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediator.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediator.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,52 @@
+package org.apache.synapse.resources.xml;
+
+import org.apache.synapse.processors.ListProcessor;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseMessage;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class ResourceMediator extends ListProcessor {
+    protected String type;
+    protected String uriRoot;
+    public boolean process(SynapseEnvironment se, SynapseMessage smc) {
+        // this is not a inline mediator, It's soule purpose of existance is to populate the ResourceHandler
+        return true;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getType(){
+        return type;
+    }
+
+    public void setURIRoot(String uriRoot) {
+        this.uriRoot = uriRoot;
+    }
+    public String getURIRoot() {
+        return uriRoot;
+    }
+
+    // From Interface
+	public String getName() {
+		return getURIRoot();
+	}
+	public void setName(String uriRoot) {
+		setURIRoot(uriRoot);
+	}
+}

Added: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediatorFactory.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediatorFactory.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediatorFactory.java (added)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/resources/xml/ResourceMediatorFactory.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,115 @@
+package org.apache.synapse.resources.xml;
+
+import org.apache.synapse.xml.Constants;
+import org.apache.synapse.xml.ProcessorConfigurator;
+import org.apache.synapse.xml.ProcessorConfiguratorFinder;
+import org.apache.synapse.Processor;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.processors.ListProcessor;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.OMAttribute;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import java.util.List;
+import java.util.LinkedList;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class ResourceMediatorFactory implements ProcessorConfigurator {
+
+    private Log log = LogFactory.getLog(getClass());
+
+    private static final String RESOURCE = "resource";
+
+	private static final QName RESOURCE_Q = new QName(Constants.SYNAPSE_NAMESPACE,
+			RESOURCE);
+
+	private static final QName RESOURCE_TYPE_ATT_Q = new QName("type");
+
+	private static final QName RESOURCE_URI_ROOT_ATT_Q = new QName("uri-root");
+
+    public Processor createProcessor(SynapseEnvironment se, OMElement el) {
+
+        ResourceMediator rp = new ResourceMediator();
+
+        this.addPropertiesMediatorsAndURIRoot(se,el,rp);
+
+        OMAttribute type = el.getAttribute(RESOURCE_TYPE_ATT_Q);
+		if (type == null) {
+			throw new SynapseException(RESOURCE + " must have "
+                    + RESOURCE_TYPE_ATT_Q + " attribute: " + el.toString());
+		}
+
+		OMAttribute uriRoot = el.getAttribute(RESOURCE_URI_ROOT_ATT_Q);
+		if (uriRoot == null) {
+			throw new SynapseException(RESOURCE + " must have "
+					+ RESOURCE_URI_ROOT_ATT_Q + " attribute: " + el.toString());
+		}
+        rp.setType(type.getAttributeValue());
+
+        rp.setURIRoot(uriRoot.getAttributeValue());
+
+        return rp;
+    }
+
+    public QName getTagQName() {
+        return RESOURCE_Q;
+    }
+
+    // this methods will give access to SynapseEnvironment's resouces registration
+
+
+    public void addPropertiesMediatorsAndURIRoot(SynapseEnvironment se, OMElement el,
+                                       ListProcessor p) {
+        this.setRUIRoot(se,el,p);
+
+        Iterator it = el.getChildElements();
+        List processors = new LinkedList();
+        while (it.hasNext()) {
+            OMElement child = (OMElement) it.next();
+            Processor proc =
+                    ProcessorConfiguratorFinder.getProcessor(se, child);
+
+            if (proc != null) {
+                if (proc instanceof PropertyMediator)
+                    processors.add(proc);
+                else
+                    throw new SynapseException(
+                            "List contains an invalid Processsor" +
+                                    proc.getClass().getName());
+            } else
+                log.info("Unknown child of all" + child.getLocalName());
+        }
+        p.setList(processors);
+
+    }
+
+    public void setRUIRoot(SynapseEnvironment se, OMElement el, Processor p) {
+
+		OMAttribute uriRoot = el.getAttribute(RESOURCE_URI_ROOT_ATT_Q);
+		if (uriRoot != null) {
+            // uri-root has already set
+            se.addResourceProcessor(p);
+		}
+		log.debug("compile "+el.getLocalName()+" with uri-root '"+p.getName() +"' on "+p.getClass());
+
+	}
+
+}

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/xml/ProcessorConfiguratorFinder.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/xml/ProcessorConfiguratorFinder.java?rev=387860&r1=387859&r2=387860&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/xml/ProcessorConfiguratorFinder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/xml/ProcessorConfiguratorFinder.java Wed Mar 22 05:48:29 2006
@@ -31,6 +31,8 @@
 import org.apache.synapse.Processor;
 import org.apache.synapse.SynapseEnvironment;
 import org.apache.synapse.SynapseException;
+import org.apache.synapse.resources.xml.PropertyMediatorFactory;
+import org.apache.synapse.resources.xml.ResourceMediatorFactory;
 import org.apache.synapse.processors.builtin.xslt.XSLTProcessorConfigurator;
 import org.apache.synapse.processors.conditions.ExactlyOneProcessorConfigurator;
 import org.apache.synapse.processors.conditions.DefaultProcessorConfigurator;
@@ -66,7 +68,8 @@
             XSLTProcessorConfigurator.class,DefineProcessorConfigurator.class,
             SendNowProcessorConfigurator.class,DropProcessorConfigurator.class,
             RefDefineProcessorConfigurator.class, ExactlyOneProcessorConfigurator.class,
-            DefaultProcessorConfigurator.class};
+            DefaultProcessorConfigurator.class,
+            PropertyMediatorFactory.class, ResourceMediatorFactory.class};
 
 	private static void initialise() {
 

Added: incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleGETResourceAquiringMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleGETResourceAquiringMediator.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleGETResourceAquiringMediator.java (added)
+++ incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/mediators/SimpleGETResourceAquiringMediator.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,46 @@
+package org.apache.synapse.mediators;
+
+import org.apache.synapse.api.Mediator;
+import org.apache.synapse.api.EnvironmentAware;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.SynapseMessage;
+import org.apache.axis2.om.OMElement;
+import junit.framework.TestCase;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class SimpleGETResourceAquiringMediator
+        implements Mediator, EnvironmentAware {
+    private SynapseEnvironment se = null;
+
+    public void setSynapseEnvironment(SynapseEnvironment se) {
+        this.se = se;
+    }
+
+    public void setClassLoader(ClassLoader cl) {
+        throw new SynapseException(
+                "no class loader available for <classmediator/>");
+    }
+
+    public boolean mediate(SynapseMessage smc) {
+        OMElement resourcesElement = se.getResourceHelper()
+                .get("http://127.0.0.1:8090/axis2/services/npe/simple_resources");
+        // test for resources being not null
+        TestCase.assertNotNull(resourcesElement);
+        return true;
+    }
+}

Added: incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/SimpleResourcesAquiringTest.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/SimpleResourcesAquiringTest.java?rev=387860&view=auto
==============================================================================
--- incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/SimpleResourcesAquiringTest.java (added)
+++ incubator/synapse/trunk/java/modules/core/test/org/apache/synapse/spi/resources/SimpleResourcesAquiringTest.java Wed Mar 22 05:48:29 2006
@@ -0,0 +1,60 @@
+package org.apache.synapse.spi.resources;
+
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.transport.http.SimpleHTTPServer;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.SynapseMessage;
+import org.apache.synapse.axis2.Axis2SynapseEnvironment;
+import org.apache.synapse.axis2.Axis2SynapseMessage;
+import org.apache.synapse.util.Axis2EnvSetup;
+import junit.framework.TestCase;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class SimpleResourcesAquiringTest extends TestCase {
+    private MessageContext msgCtx;
+    private SynapseEnvironment env;
+    private OMElement config;
+    private String synapsexml =
+                    "<synapse xmlns=\"http://ws.apache.org/ns/synapse\">\n" +
+                            "<resource type=\"org.apache.synapse.resources.http.SimpleGETResourceHandler\" uri-root=\"http://127.0.0.1:8090/axis2/services/npe/simple_resources\">\n"+
+                                 "<property name=\"http.username\">paul</property>"+
+                                 "<property name=\"http.password\">pass</property>"+
+                            "</resource>\n"+
+                    "<classmediator class=\"org.apache.synapse.mediators.SimpleGETResourceAquiringMediator\"/>\n" +
+                    "</synapse>";
+
+    private SimpleHTTPServer resources;
+
+    public void setUp() throws Exception {
+        msgCtx = Axis2EnvSetup.axis2Deployment("target/synapse-repository");
+        config = Axis2EnvSetup.getSynapseConfigElement(synapsexml);
+        env = new Axis2SynapseEnvironment(config,
+                Thread.currentThread().getContextClassLoader());
+        resources = new SimpleHTTPServer("target/synapse-repository-resources",8090);
+        resources.start();
+    }
+
+    protected void tearDown() throws Exception {
+        resources.stop();
+    }
+    public void testSimpleResourcesHandler() throws Exception {
+        SynapseMessage smc = new Axis2SynapseMessage(msgCtx);
+        env.injectMessage(smc);
+
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org