package railo.runtime.cache.eh.remote.rest; import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Date; import org.xml.sax.SAXException; import railo.commons.io.cache.CacheEntry; import railo.loader.util.Util; import railo.runtime.cache.eh.remote.Converter; import railo.runtime.cache.eh.remote.rest.sax.CacheFactory; import railo.runtime.cache.eh.remote.rest.sax.CacheMeta; public class RESTClient { private URL url; private String strUrl; public RESTClient(URL url) { this.url=url; this.strUrl=url.toExternalForm(); if(!strUrl.endsWith("/")){ strUrl+="/"; try { url=new URL(strUrl); } catch (MalformedURLException e) {} } } public Object getMetaRaw(String cacheName) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName).openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("id", "getKeysWithExpiryCheck"); connection.connect(); try { return getContent(connection); } finally { disconnectEL(connection); } } public CacheMeta getMeta(String cacheName) throws IOException, SAXException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName).openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("id", "getKeysWithExpiryCheck"); connection.connect(); InputStream is=null; try { is=connection.getInputStream(); return new CacheFactory(is).getMeta(); } finally { Util.closeEL(is); disconnectEL(connection); } } public CacheEntry getMeta2(String cacheName) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName).openConnection(); connection.setRequestMethod("HEAD"); connection.connect(); InputStream is=null; try { //is=connection.getInputStream(); //obj=getContent(connection); //CacheFactory cf = new CacheFactory(is); } finally { Util.closeEL(is); disconnectEL(connection); } return null; } /*private Object listCachesRaw() throws IOException { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); Object obj; conn.setRequestMethod("GET"); try{ obj = getContent(conn); } finally{ disconnectEL(conn); } return obj; }*/ /*private Object featuresRaw() throws IOException { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); Object obj; conn.setRequestMethod("OPTIONS"); try{ obj = getContent(conn); } finally{ disconnectEL(conn); } return obj; }*/ /*private void createCache(String cacheName) throws IOException { HttpURLConnection urlConnection = (HttpURLConnection) toURL(cacheName).openConnection(); urlConnection.setRequestMethod("PUT"); urlConnection.getResponseCode(); urlConnection.disconnect(); }*/ private void createEntry(String cacheName,String key, String value) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName,key).openConnection(); connection.setRequestProperty("Content-Type", "application/x-java-serialized-object"); connection.setDoOutput(true); connection.setRequestMethod("PUT"); connection.connect(); // Write the message to the servlet OutputStream os = connection.getOutputStream(); // returns ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(value); oos.flush(); connection.disconnect(); } /*private void removeEntry(String cacheName,String key) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName,key).openConnection(); connection.setRequestProperty("Content-Type", "application/x-java-serialized-object"); connection.setDoOutput(true); connection.setRequestMethod("DELETE"); connection.connect(); disconnectEL(connection); }*/ public boolean contains(String cacheName,String key) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName, key).openConnection(); connection.setRequestMethod("HEAD"); connection.connect(); try{ return connection.getResponseCode()==200; } finally{ disconnectEL(connection); } } public Object getValue(String cacheName,String key) throws IOException { HttpURLConnection connection = (HttpURLConnection) toURL(cacheName, key).openConnection(); connection.setRequestMethod("GET"); connection.connect(); try{ return getContent(connection); } finally{ disconnectEL(connection); } } public CacheEntry getEntry(String cacheName,String key) throws IOException { Object obj=null; HttpURLConnection connection = (HttpURLConnection) toURL(cacheName, key).openConnection(); connection.setRequestMethod("GET"); connection.connect(); try { connection.getContentLength(); connection.getHeaderField("Expires"); connection.getHeaderField("Last-Modified"); obj=getContent(connection); } finally { disconnectEL(connection); } return new RESTCacheEntry(key,obj); } private static Object getContent(HttpURLConnection conn) { InputStream is=null; try { return Converter.toObject(conn.getContentType(),conn.getInputStream()); } catch(Exception e){ return null; } finally { Util.closeEL(is); } } private static void disconnectEL(HttpURLConnection connection) { if(connection!=null){ connection.disconnect(); } } private URL toURL(String cacheName, String key) { try{ return new URL(strUrl+cacheName+"/"+key); } catch(MalformedURLException e){ return null; } } private URL toURL(String cacheName) { try{ return new URL(strUrl+cacheName); } catch(MalformedURLException e){ return null; } } public static void main(String[] args) throws Exception { RESTClient client81 = new RESTClient(new URL("http://localhost:8181/rest/")); //client81.createCache("sample"); client81.createEntry("sample", "mx81","81 "+new Date()); RESTClient client82 = new RESTClient(new URL("http://localhost:8282/rest/")); //client82.createCache("sample"); client82.createEntry("sample", "mx82","82 "+new Date()); /* RESTClient client82 = new RESTClient(new URL("http://localhost:8282/rest/")); client82.createCache("sample"); client82.createEntry("sample", "resti","RESTFull82"); */ } }