From: <pg...@us...> - 2007-05-24 05:07:01
|
Revision: 147 http://simulacion.svn.sourceforge.net/simulacion/?rev=147&view=rev Author: pguyot Date: 2007-05-23 22:06:59 -0700 (Wed, 23 May 2007) Log Message: ----------- Update for xmlrpc 3.0. Modified Paths: -------------- simulacion/.classpath simulacion/_Build_/Ant/build.xml simulacion/_Build_/Ant/simulacion-ant.xml simulacion/lib/commons-codec-1.3.jar simulacion/src/fr/lip6/sma/simulacion/server/adapter/xmlrpc/XmlRpcAdapter.java simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPClient.java simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPServer.java simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentListManager.java simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentRequest.java simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRServer.java Added Paths: ----------- simulacion/lib/commons-collections-3.2.jar simulacion/lib/commons-httpclient-3.0.1.jar simulacion/lib/commons-logging-1.1.jar simulacion/lib/ws-commons-util-1.0.1.jar simulacion/lib/xmlrpc-client-3.0.jar simulacion/lib/xmlrpc-common-3.0.jar simulacion/lib/xmlrpc-server-3.0.jar simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/ simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/AgentHandler.java simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/SimpleHandlerMapping.java simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/package.html Removed Paths: ------------- simulacion/lib/commons-cli.jar simulacion/lib/commons-collections.jar simulacion/lib/commons-httpclient-2.0.2.jar simulacion/lib/commons-logging-1.0.2.jar simulacion/lib/xmlrpc-2.0.jar simulacion/src/fr/lip6/sma/simulacion/server/Handler.java Modified: simulacion/.classpath =================================================================== --- simulacion/.classpath 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/.classpath 2007-05-24 05:06:59 UTC (rev 147) @@ -2,7 +2,10 @@ <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="lib" path="lib/xmlrpc-2.0.jar"/> + <classpathentry kind="lib" path="lib/xmlrpc-client-3.0.jar"/> + <classpathentry kind="lib" path="lib/xmlrpc-common-3.0.jar"/> + <classpathentry kind="lib" path="lib/xmlrpc-server-3.0.jar"/> + <classpathentry kind="lib" path="lib/ws-commons-util-1.0.1.jar"/> <classpathentry kind="lib" path="lib/kawa-1.8beta.jar"/> <classpathentry kind="lib" path="lib/jmdns.jar"/> <classpathentry kind="lib" path="lib/jazzy.jar"/> @@ -11,11 +14,10 @@ <classpathentry kind="lib" path="lib/xmlParserAPIs.jar"/> <classpathentry kind="lib" path="lib/xml-apis.jar"/> <classpathentry kind="lib" path="lib/xercesImpl.jar"/> - <classpathentry kind="lib" path="lib/commons-logging-1.0.2.jar"/> - <classpathentry kind="lib" path="lib/commons-httpclient-2.0.2.jar"/> - <classpathentry kind="lib" path="lib/commons-collections.jar"/> + <classpathentry kind="lib" path="lib/commons-logging-1.1.jar"/> + <classpathentry kind="lib" path="lib/commons-httpclient-3.0.1.jar"/> + <classpathentry kind="lib" path="lib/commons-collections-3.2.jar"/> <classpathentry kind="lib" path="lib/commons-codec-1.3.jar"/> - <classpathentry kind="lib" path="lib/commons-cli.jar"/> <classpathentry kind="lib" path="lib/commons-beanutils-core.jar"/> <classpathentry kind="lib" path="lib/junit-4.3.1.jar"/> <classpathentry kind="output" path="bin"/> Modified: simulacion/_Build_/Ant/build.xml =================================================================== --- simulacion/_Build_/Ant/build.xml 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/_Build_/Ant/build.xml 2007-05-24 05:06:59 UTC (rev 147) @@ -40,14 +40,12 @@ </loadfile> <property name="src.dir" value="${base.dir}/src/" /> <property name="build.dir" value="build" /> - <property name="cp-jars" value="${base.dir}/lib/Java-mDNS.jar:${base.dir}/lib/jmdns.jar:${base.dir}/lib/junit-4.3.1.jar:${base.dir}/lib/xmlrpc-2.0.jar:${base.dir}/lib/kawa-1.8beta.jar:${base.dir}/lib/jazzy.jar:${base.dir}/lib/AppleJavaExtensions.jar" /> + <property name="cp-jars" value="${base.dir}/lib/Java-mDNS.jar:${base.dir}/lib/jmdns.jar:${base.dir}/lib/junit-4.3.1.jar:${base.dir}/lib/ws-commons-util-1.0.1.jar:${base.dir}/lib/xmlrpc-client-3.0.jar:${base.dir}/lib/xmlrpc-common-3.0.jar:${base.dir}/lib/xmlrpc-server-3.0.jar:${base.dir}/lib/kawa-1.8beta.jar:${base.dir}/lib/jazzy.jar:${base.dir}/lib/AppleJavaExtensions.jar" /> <property environment="env" /> - <property name="checkstyle-jars" value="${env.ANT_HOME}/lib/ant.jar:${base.dir}/lib/checkstyle-4.3.jar:${base.dir}/lib/checkstyle-optional-4.3.jar:${base.dir}/lib/antlr.jar:${base.dir}/lib/jakarta-regexp-1.3.jar:${base.dir}/lib/commons-beanutils-core.jar:${base.dir}/lib/commons-collections.jar:${base.dir}/lib/commons-logging-1.0.2.jar" /> + <property name="checkstyle-jars" value="${env.ANT_HOME}/lib/ant.jar:${base.dir}/lib/checkstyle-4.3.jar:${base.dir}/lib/checkstyle-optional-4.3.jar:${base.dir}/lib/antlr.jar:${base.dir}/lib/jakarta-regexp-1.3.jar:${base.dir}/lib/commons-beanutils-core.jar:${base.dir}/lib/commons-collections.jar:${base.dir}/lib/commons-logging-1.1.jar" /> <taskdef resource="checkstyletask.properties" classpath="${checkstyle-jars}"/> <property name="svn.root" value="https://simulacion.svn.sourceforge.net/svnroot/simulacion/" /> - - <patternset id="runtime-libs" includes="commons-codec-1.3.jar commons-httpclient-2.0.2.jar commons-logging-1.0.2.jar Java-mDNS.jar jmdns.jar xercesImpl.jar xmlrpc-2.0.jar" /> <patternset id="junit-tests"> <include name="**/*Test.java" /> Modified: simulacion/_Build_/Ant/simulacion-ant.xml =================================================================== --- simulacion/_Build_/Ant/simulacion-ant.xml 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/_Build_/Ant/simulacion-ant.xml 2007-05-24 05:06:59 UTC (rev 147) @@ -90,6 +90,10 @@ <include name="**/*.java" /> </patternset> + <property name="checkstyle-jars" value="${env.ANT_HOME}/lib/ant.jar:${simulacion.dir}/lib/checkstyle-4.3.jar:${simulacion.dir}/lib/checkstyle-optional-4.3.jar:${simulacion.dir}/lib/antlr.jar:${simulacion.dir}/lib/jakarta-regexp-1.3.jar:${simulacion.dir}/lib/commons-beanutils-core.jar:${simulacion.dir}/lib/commons-codec-1.3.jar:${simulacion.dir}/lib/commons-httpclient-3.0.1.jar:${simulacion.dir}/lib/commons-logging-1.1.jar" /> + <patternset id="simulacion-runtime-libs" includes="commons-codec-1.3.jar commons-collections-3.2.jar commons-httpclient-3.0.1.jar commons-logging-1.1.jar Java-mDNS.jar jmdns.jar ws-commons-util-1.0.1.jar xercesImpl.jar xmlrpc-client-3.0.jar xmlrpc-common-3.0.jar xmlrpc-server-3.0.jar" /> + <patternset id="runtime-libs" includes="" /> + <!-- Check the version of Simulación --> <target name="-check.simulacion.version"> <loadfile property="simulacion.release.fromfile" srcfile="${simulacion.dir}/version"> @@ -200,7 +204,7 @@ <!-- extract the jars --> <unjar dest="${build.dir}/JarStuff"> <fileset dir="${simulacion.dir}/lib/"> - <patternset refid="runtime-libs" /> + <patternset refid="simulacion-runtime-libs" /> </fileset> </unjar> <unjar dest="${build.dir}/JarStuff" src="${simulacion.dir}/${simulacion.jar}" /> @@ -260,6 +264,7 @@ </target> <target name="ProjectCheckstyle" depends="ProjectJar" unless="skip.checkstyle"> + <taskdef resource="checkstyletask.properties" classpath="${checkstyle-jars}"/> <property name="samedir" value="${simulacion.dir}/checkstyle/"/> <checkstyle config="${samedir}/simulacion_checks.xml"> <fileset dir="${src.dir}" /> Deleted: simulacion/lib/commons-cli.jar =================================================================== (Binary files differ) Modified: simulacion/lib/commons-codec-1.3.jar =================================================================== (Binary files differ) Added: simulacion/lib/commons-collections-3.2.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/commons-collections-3.2.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: simulacion/lib/commons-collections.jar =================================================================== (Binary files differ) Deleted: simulacion/lib/commons-httpclient-2.0.2.jar =================================================================== (Binary files differ) Added: simulacion/lib/commons-httpclient-3.0.1.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/commons-httpclient-3.0.1.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: simulacion/lib/commons-logging-1.0.2.jar =================================================================== (Binary files differ) Added: simulacion/lib/commons-logging-1.1.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/commons-logging-1.1.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: simulacion/lib/ws-commons-util-1.0.1.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/ws-commons-util-1.0.1.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: simulacion/lib/xmlrpc-2.0.jar =================================================================== (Binary files differ) Added: simulacion/lib/xmlrpc-client-3.0.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/xmlrpc-client-3.0.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: simulacion/lib/xmlrpc-common-3.0.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/xmlrpc-common-3.0.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: simulacion/lib/xmlrpc-server-3.0.jar =================================================================== (Binary files differ) Property changes on: simulacion/lib/xmlrpc-server-3.0.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: simulacion/src/fr/lip6/sma/simulacion/server/Handler.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/Handler.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/Handler.java 2007-05-24 05:06:59 UTC (rev 147) @@ -1,95 +0,0 @@ -// ============================== -// File: Handler.java -// Project: Simulaci\xF3n -// Written by: Paul Guyot (pau...@ac...) -// -// Created on: 12/5/2003 -// Tabs: 4 spaces -// -// This software is governed by the CeCILL license under French law and abiding -// by the rules of distribution of free software. You can use, modify and/ or -// redistribute the software under the terms of the CeCILL license as -// circulated by CEA, CNRS and INRIA at the following URL -// "http://www.cecill.info". -// -// As a counterpart to the access to the source code and rights to copy, modify -// and redistribute granted by the license, users are provided only with a -// limited warranty and the software's author, the holder of the economic -// rights, and the successive licensors have only limited liability. -// -// The fact that you are presently reading this means that you have had -// knowledge of the CeCILL license and that you accept its terms. -// -// =========== -// $Id$ -// =========== - -// paquet -package fr.lip6.sma.simulacion.server; - -// import -import java.util.Hashtable; - -/** - * Classe pour l'interface publique du serveur. - * L'int\xE9r\xEAt de cette classe est qu'elle limite les m\xE9thodes qui sont publi\xE9es. - * Inutile d'\xEAtre compl\xE8tement parano, mais ceci permet d'\xE9viter de publier des - * m\xE9thodes qui ne doivent pas \xEAtre appel\xE9es par le r\xE9seau. - * - * @author Paul Guyot <pau...@ac...> - * @version $Revision$ - * - * @see "aucun test d\xE9fini." - */ -public final class Handler { - /** - * R\xE9f\xE9rence sur l'agent. - */ - private final Agent mLocalAgent; - - /** - * Constructeur \xE0 partir de l'agent local. - * - * @param inLocalAgent mod\xE8le associ\xE9 \xE0 ce gestionnaire - */ - public Handler(Agent inLocalAgent) { - mLocalAgent = inLocalAgent; - } - - // CSOFF: IllegalType - /** - * Ex\xE9cute une op\xE9ration avec l'avatar. - * - * @param inOperationName nom de l'op\xE9ration \xE0 ex\xE9cuter. - * @param inParams param\xE8tres de l'op\xE9ration. - * @return le r\xE9sultat de l'op\xE9ration (sous forme de cha\xEEne). - * @throws Exception si une erreur est survenue. - */ - public synchronized String execute( - String inOperationName, - Hashtable<String, Object> inParams) - throws Exception { - // CSON: IllegalType - return mLocalAgent.execute(inOperationName, inParams); - } -} - -// ========================================================================= // -// Price Wang's programmer was coding software. His fingers danced // -// upon the keyboard. The program compiled without an error message, and // -// the program ran like a gentle wind. // -// Excellent!" the Price exclaimed, "Your technique is faultless!" // -// "Technique?" said the programmer, turning from his terminal, // -// "What I follow is the Tao -- beyond all technique. When I first began to // -// program I would see before me the whole program in one mass. After three // -// years I no longer saw this mass. Instead, I used subroutines. But now I // -// see nothing. My whole being exists in a formless void. My senses are // -// idle. My spirit, free to work without a plan, follows its own instinct. // -// In short, my program writes itself. True, sometimes there are difficult // -// problems. I see them coming, I slow down, I watch silently. Then I // -// change a single line of code and the difficulties vanish like puffs of // -// idle smoke. I then compile the program. I sit still and let the joy of // -// the work fill my being. I close my eyes for a moment and then log off." // -// Price Wang said, "Would that all of my programmers were as wise!" // -// -- Geoffrey James, "The Tao of Programming" // -// ========================================================================= // Modified: simulacion/src/fr/lip6/sma/simulacion/server/adapter/xmlrpc/XmlRpcAdapter.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/adapter/xmlrpc/XmlRpcAdapter.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/adapter/xmlrpc/XmlRpcAdapter.java 2007-05-24 05:06:59 UTC (rev 147) @@ -28,7 +28,6 @@ package fr.lip6.sma.simulacion.server.adapter.xmlrpc; // imports -import java.io.IOException; import java.net.InetAddress; import java.net.URL; import java.util.HashSet; @@ -37,11 +36,16 @@ import java.util.Set; import java.util.Vector; -import org.apache.xmlrpc.WebServer; -import org.apache.xmlrpc.XmlRpc; -import org.apache.xmlrpc.XmlRpcClient; import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.XmlRpcHandler; +import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; +import org.apache.xmlrpc.client.XmlRpcClientException; +import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory; +import org.apache.xmlrpc.server.XmlRpcServer; +import org.apache.xmlrpc.server.XmlRpcServerConfigImpl; +import org.apache.xmlrpc.webserver.WebServer; import fr.lip6.sma.simulacion.app.Configuration; import fr.lip6.sma.simulacion.server.Agent; @@ -52,6 +56,7 @@ import fr.lip6.sma.simulacion.server.NetworkAgentException; import fr.lip6.sma.simulacion.server.adapter.Adapter; import fr.lip6.sma.simulacion.server.adapter.AdapterAgent; +import fr.lip6.sma.simulacion.server.xmlrpc.SimpleHandlerMapping; /** * Classe pour un adaptateur XmlRpc. @@ -118,18 +123,6 @@ AgentListManager inAgentListManager) throws Exception { mAgentListManager = inAgentListManager; - // Configuration de XML-RPC. -// XmlRpc.setDebug(true); - try { - XmlRpc.setDriver("xerces"); - // le pilote par d\xE9faut ne sait pas g\xE9rer les - // encodages correctement. - XmlRpc.setEncoding("UTF8"); - } catch (ClassNotFoundException anException) { - anException.printStackTrace(); - System.exit(1); - } - // R\xE9cup\xE9ration de l'interface (par d\xE9faut, null). final String theInterface = inConfiguration.getProperty(INTERFACE_PROPERTY); @@ -137,26 +130,38 @@ // Cr\xE9ation du serveur. final InetAddress theAddress = InetAddress.getByName(theInterface); mServer = new WebServer(0, theAddress); - mServer.start(); - mPort = mServer.getPort(); - // On s'enregistre comme gestionnaire. - mServer.addHandler("adapter", this); + final SimpleHandlerMapping theMapping = new SimpleHandlerMapping(); + theMapping.addHandler("adapter", this); + final XmlRpcServer theServer = mServer.getXmlRpcServer(); + theServer.setHandlerMapping(theMapping); + final XmlRpcServerConfigImpl theServerConfig = + (XmlRpcServerConfigImpl) theServer.getConfig(); + theServerConfig.setEnabledForExtensions(true); + mServer.start(); + mPort = mServer.getPort(); + // R\xE9cup\xE9ration de l'URL du client. final String theClientURL = inConfiguration.getProperty(CLIENT_URL_PROPERTY); // Cr\xE9ation du client. - mClient = new XmlRpcClient(new URL(theClientURL)); + final XmlRpcClientConfigImpl theConfig = + new XmlRpcClientConfigImpl(); + theConfig.setServerURL(new URL(theClientURL)); + mClient = new XmlRpcClient(); + mClient.setTransportFactory( + new XmlRpcCommonsTransportFactory(mClient)); + mClient.setConfig(theConfig); // On s'enregistre aupr\xE8s du client. final String theServerURL = "http://" + theAddress.toString() + ":" + mPort + "/"; - final List<Object> theParams = new Vector<Object>(); + final List<Object> theParams = new Vector<Object>(1); theParams.add(theServerURL); - mClient.execute("adapter.setupAdapter", (Vector<Object>) theParams); + mClient.execute("adapter.setupAdapter", theParams); // On s'enregistre aupr\xE8s de la liste. mAgentListManager.addListener(this); @@ -186,8 +191,8 @@ try { theResult = (String) mClient.execute( - "adapter.executeAgentMethod", (Vector<Object>) theParams); - } catch (IOException anException) { + "adapter.executeAgentMethod", theParams); + } catch (XmlRpcClientException anException) { throw new NetworkAgentException(anException); } catch (XmlRpcException anException) { throw new AgentException(anException); @@ -212,21 +217,19 @@ /** * Point d'entr\xE9e de l'adaptateur XML-RPC. * - * @param inMethodName nom de la m\xE9thode. - * @param inMethodParams param\xE8tres de la m\xE9thode. - * @return le r\xE9sultat de la requ\xEAte. - * @throws Exception si un probl\xE8me est survenu. + * @param inRequest request. + * @return the result of the request. + * @throws XmlRpcException if a problem occurred. */ @SuppressWarnings("unchecked") - public final Object execute( - String inMethodName, - Vector inMethodParams) throws Exception { - // CSON: IllegalType + public final Object execute(XmlRpcRequest inRequest) + throws XmlRpcException { + final String theMethodName = inRequest.getMethodName(); Object theResult; - if (inMethodName.equals("adapter.registerLocalAgent")) { - final String theAgentClass = (String) inMethodParams.get(0); - final String theAgentName = (String) inMethodParams.get(1); + if (theMethodName.equals("adapter.registerLocalAgent")) { + final String theAgentClass = (String) inRequest.getParameter(0); + final String theAgentName = (String) inRequest.getParameter(1); // Cr\xE9ation de l'agent local. assert mLocalAgent == null; @@ -257,17 +260,17 @@ // \xC9chec. theResult = "NO"; } - } else if (inMethodName.equals("adapter.unregisterLocalAgent")) { -// final String theAgentName = (String) inMethodParams.get(0); -// final String theAgentClass = (String) inMethodParams.get(1); + } else if (theMethodName.equals("adapter.unregisterLocalAgent")) { +// final String theAgentClass = (String) inRequest.getParameter(0); +// final String theAgentName = (String) inRequest.getParameter(1); mAgentListManager.unregisterLocalAgent(mLocalAgent); theResult = "OK"; - } else if (inMethodName.equals("adapter.executeMethod")) { - final String theAgentClass = (String) inMethodParams.get(0); - final String theAgentName = (String) inMethodParams.get(1); - final String theMethod = (String) inMethodParams.get(2); + } else if (theMethodName.equals("adapter.executeMethod")) { + final String theAgentClass = (String) inRequest.getParameter(0); + final String theAgentName = (String) inRequest.getParameter(1); + final String theMethod = (String) inRequest.getParameter(2); final Map<String, Object> theParams = - (Map<String, Object>) inMethodParams.get(3); + (Map<String, Object>) inRequest.getParameter(3); final Agent theAgent = mAgentListManager.getAgent( @@ -275,11 +278,15 @@ if (theAgent == null) { // Remarque: il peut y avoir un d\xE9lai, et donc le client peut // ne pas savoir que l'agent n'existe plus. - throw new AgentException( - new NullPointerException("No such agent")); + throw new XmlRpcException("No such agent", new AgentException( + new NullPointerException("No such agent"))); } - theResult = theAgent.execute(theMethod, theParams); - } else if (inMethodName.equals("adapter.getAgentSet")) { + try { + theResult = theAgent.execute(theMethod, theParams); + } catch (AgentException anException) { + throw new XmlRpcException(anException.toString(), anException); + } + } else if (theMethodName.equals("adapter.getAgentSet")) { final Set<String> theAgentIDSet = new HashSet<String>(); for (Agent theAgent : mAgentListManager.getAgentSet()) { theAgentIDSet.add(theAgent.getAgentSpecification().toString()); @@ -287,7 +294,8 @@ theResult = theAgentIDSet; } else { - throw new NoSuchMethodException(inMethodName); + throw new XmlRpcException("No such method", + new NoSuchMethodException(theMethodName)); } return theResult; @@ -322,8 +330,6 @@ public final void listChanged() { try { mClient.execute("adapter.listChanged", new Vector<Object>()); - } catch (IOException anException) { - // Tant pis. } catch (XmlRpcException anException) { // Tant pis (bis). } Modified: simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPClient.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPClient.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPClient.java 2007-05-24 05:06:59 UTC (rev 147) @@ -35,10 +35,12 @@ import java.util.Map; import java.util.Vector; -import org.apache.xmlrpc.AsyncCallback; -import org.apache.xmlrpc.XmlRpc; -import org.apache.xmlrpc.XmlRpcClient; import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.client.AsyncCallback; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; +import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory; import fr.lip6.sma.simulacion.app.Configuration; import fr.lip6.sma.simulacion.server.AgentException; @@ -89,17 +91,7 @@ * Constructeur par d\xE9faut. */ public HTTPClient() { - // Configuration du serveur. -// XmlRpc.setDebug(true); - try { - XmlRpc.setDriver("xerces"); - // le pilote par d\xE9faut ne sait pas g\xE9rer les - // encodages correctement. - XmlRpc.setEncoding("UTF8"); - } catch (ClassNotFoundException anException) { - anException.printStackTrace(); - System.exit(1); - } + // This space for rent. } /** @@ -136,7 +128,13 @@ try { // Tentative de conversion en URL // et cr\xE9ation du client XmlRpc. - mXmlRpcClient = new XmlRpcClient(new URL(inURL)); + final XmlRpcClientConfigImpl theConfig = + new XmlRpcClientConfigImpl(); + theConfig.setServerURL(new URL(inURL)); + mXmlRpcClient = new XmlRpcClient(); + mXmlRpcClient.setTransportFactory( + new XmlRpcCommonsTransportFactory(mXmlRpcClient)); + mXmlRpcClient.setConfig(theConfig); // Appel de la m\xE9thode getVersion. final String theServerGameID = @@ -176,9 +174,6 @@ } catch (XmlRpcException anException) { anException.printStackTrace(); mXmlRpcClient = null; - } catch (IOException anException) { - anException.printStackTrace(); - mXmlRpcClient = null; } catch (ClassCastException anException) { anException.printStackTrace(); mXmlRpcClient = null; @@ -195,8 +190,13 @@ mRunning = true; while (mRunning) { synchronized (this) { - mXmlRpcClient.executeAsync( - "server.listen", (Vector<Object>) theParams, this); + try { + mXmlRpcClient.executeAsync( + "server.listen", theParams, this); + } catch (XmlRpcException anException) { + anException.printStackTrace(); + // On ignore. + } // On attend. try { @@ -210,13 +210,10 @@ try { mXmlRpcClient.execute( "server.endClient", - (Vector<Object>) theParams); + theParams); } catch (XmlRpcException anException) { anException.printStackTrace(); // On ignore. - } catch (IOException anException) { - anException.printStackTrace(); - // On ignore aussi. } mXmlRpcClient = null; @@ -244,17 +241,12 @@ } /** - * M\xE9thode appel\xE9e lorsque le serveur a r\xE9pondu \xE0 notre requ\xEAte listen. - * - * @param inResult r\xE9sultat de la m\xE9thode. - * @param inURL URL du serveur. - * @param inMethod m\xE9thode appel\xE9e (ici listen). + * {@inheritDoc} */ @SuppressWarnings("unchecked") public void handleResult( - Object inResult, - URL inURL, - String inMethod) { + XmlRpcRequest inRequest, + Object inResult) { if ((inResult != null) && (inResult instanceof Throwable)) { // Output the exception. ((Throwable) inResult).printStackTrace(); @@ -295,16 +287,11 @@ } /** - * M\xE9thode appel\xE9e lorsqu'une erreur est survenue avec notre requ\xEAte listen. - * - * @param inException exception survenue. - * @param inURL URL de la requ\xEAte. - * @param inMethod m\xE9thode invoqu\xE9e (listen). + * {@inheritDoc} */ public void handleError( - Exception inException, - URL inURL, - String inMethod) { + XmlRpcRequest inRequest, + Throwable inException) { // On sort. // \xC0 terme, on pourrait \xEAtre plus robuste. inException.printStackTrace(); @@ -467,14 +454,14 @@ theResult = mXmlRpcClient.execute( inMethodName, - (Vector<Object>) inParams); + inParams); } catch (NullPointerException anException) { // On ignore si c'est juste le serveur qui est ferm\xE9. if (mXmlRpcClient != null) { anException.printStackTrace(); } - } catch (IOException anException) { - if (!(anException instanceof ConnectException)) { + } catch (XmlRpcException anException) { + if (!(anException.getCause() instanceof ConnectException)) { anException.printStackTrace(); } Modified: simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPServer.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPServer.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/http/HTTPServer.java 2007-05-24 05:06:59 UTC (rev 147) @@ -40,9 +40,12 @@ import java.util.TimerTask; import java.util.Vector; -import org.apache.xmlrpc.WebServer; -import org.apache.xmlrpc.XmlRpc; +import org.apache.xmlrpc.XmlRpcException; import org.apache.xmlrpc.XmlRpcHandler; +import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.server.XmlRpcServer; +import org.apache.xmlrpc.server.XmlRpcServerConfigImpl; +import org.apache.xmlrpc.webserver.WebServer; import com.kallisys.zeroconf.MDNSException; import com.kallisys.zeroconf.MulticastDNSClient; @@ -55,6 +58,7 @@ import fr.lip6.sma.simulacion.server.AgentSpecification; import fr.lip6.sma.simulacion.server.NetworkAgentException; import fr.lip6.sma.simulacion.server.ServerException; +import fr.lip6.sma.simulacion.server.xmlrpc.SimpleHandlerMapping; /** * Classe pour le serveur HTTP qui g\xE8re les diff\xE9rents clients. @@ -322,24 +326,17 @@ // Cr\xE9ation de la liste des agents. mAgentsRegistry = new Hashtable<AgentSpecification, Integer>(); - // Configuration du serveur. -// XmlRpc.setDebug(true); - XmlRpc.setMaxThreads(2048); - try { - XmlRpc.setDriver("xerces"); - // le pilote par d\xE9faut ne sait pas g\xE9rer les - // encodages correctement. - XmlRpc.setEncoding("UTF8"); - } catch (ClassNotFoundException anException) { - anException.printStackTrace(); - System.exit(1); - } - // Cr\xE9ation du serveur. mServer = new WebServer(thePort); - // On s'enregistre comme gestionnaire. - mServer.addHandler("server", this); + // Configure the server. + final SimpleHandlerMapping theMapping = new SimpleHandlerMapping(); + theMapping.addHandler("server", this); + final XmlRpcServer theServer = mServer.getXmlRpcServer(); + theServer.setHandlerMapping(theMapping); + final XmlRpcServerConfigImpl theServerConfig = + (XmlRpcServerConfigImpl) theServer.getConfig(); + theServerConfig.setEnabledForExtensions(true); // Publication du serveur. if (mMDNSServer != null) { @@ -382,7 +379,11 @@ */ protected void init() throws ServerException { super.init(); - mServer.start(); + try { + mServer.start(); + } catch (IOException anException) { + throw new ServerException(anException); + } } /** @@ -421,53 +422,59 @@ } } - // CSOFF: IllegalType /** - * Point d'entr\xE9e du serveur XML-RPC. - * Cette m\xE9thode est r\xE9-entrante et appel\xE9e \xE0 chaque requ\xEAte. - * - * @param inMethod nom de la m\xE9thode appel\xE9e (objet.nom). - * @param inParams liste des param\xE8tres. - * @return une cha\xEEne d\xE9crivant le jeu (et la version) de ce serveur. - * @throws Exception si un probl\xE8me est survenu. + * {@inheritDoc} */ @SuppressWarnings("unchecked") - public Object execute(String inMethod, Vector inParams) throws Exception { - // CSON: IllegalType + public Object execute(XmlRpcRequest inRequest) throws XmlRpcException { + final String operationName = inRequest.getMethodName(); Object theResult; - if (inMethod.equals("server.getGameID")) { + if (operationName.equals("server.getGameID")) { theResult = mGameID; - } else if (inMethod.equals("server.newClient")) { + } else if (operationName.equals("server.newClient")) { theResult = new Integer(newClient()); - } else if (inMethod.equals("server.listen")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); + } else if (operationName.equals("server.listen")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); theResult = listen(theClientID); - } else if (inMethod.equals("server.endClient")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); + } else if (operationName.equals("server.endClient")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); endClient(theClientID); theResult = ""; - } else if (inMethod.equals("server.register")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); - final String theAgentSpecStr = (String) inParams.get(1); + } else if (operationName.equals("server.register")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); + final String theAgentSpecStr = (String) inRequest.getParameter(1); theResult = Boolean.valueOf( register(theClientID, theAgentSpecStr)); - } else if (inMethod.equals("server.unregister")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); - final String theAgentSpecStr = (String) inParams.get(1); + } else if (operationName.equals("server.unregister")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); + final String theAgentSpecStr = (String) inRequest.getParameter(1); unregister(theClientID, theAgentSpecStr); theResult = ""; - } else if (inMethod.equals("server.executeAgentMethod")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); - final String theAgentSpecStr = (String) inParams.get(1); - final String theMethodName = (String) inParams.get(2); + } else if (operationName.equals("server.executeAgentMethod")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); + final String theAgentSpecStr = (String) inRequest.getParameter(1); + final String theMethodName = (String) inRequest.getParameter(2); final Map<String, Object> theParams = - (Map<String, Object>) inParams.get(3); - final String theResultStr = - executeAgentMethod( - theClientID, - theAgentSpecStr, - theMethodName, - theParams); + (Map<String, Object>) inRequest.getParameter(3); + String theResultStr = null; + try { + theResultStr = + executeAgentMethod( + theClientID, + theAgentSpecStr, + theMethodName, + theParams); + } catch (NetworkAgentException anException) { + if (mVerboseMode) { + anException.printStackTrace(); + } + throw new XmlRpcException(anException.toString(), anException); + } theResult = theResultStr; if (mVerboseMode) { logExecuteAgentMethodVerbose( @@ -477,16 +484,24 @@ theParams, theResultStr); } - } else if (inMethod.equals("server.executeAgentMethodAsync")) { - final int theClientID = ((Integer) inParams.get(0)).intValue(); - final String theAgentSpecStr = (String) inParams.get(1); - final String theMethodName = (String) inParams.get(2); - final Map theParams = (Map) inParams.get(3); - executeAgentMethodAsync( - theClientID, - theAgentSpecStr, - theMethodName, - theParams); + } else if (operationName.equals("server.executeAgentMethodAsync")) { + final int theClientID = + ((Integer) inRequest.getParameter(0)).intValue(); + final String theAgentSpecStr = (String) inRequest.getParameter(1); + final String theMethodName = (String) inRequest.getParameter(2); + final Map theParams = (Map) inRequest.getParameter(3); + try { + executeAgentMethodAsync( + theClientID, + theAgentSpecStr, + theMethodName, + theParams); + } catch (NetworkAgentException anException) { + if (mVerboseMode) { + anException.printStackTrace(); + } + throw new XmlRpcException(anException.toString(), anException); + } theResult = "(void)"; if (mVerboseMode) { logExecuteAgentMethodVerbose( @@ -496,9 +511,9 @@ theParams, "(void)"); } - } else if (inMethod.equals("server.result")) { - final Integer theOperationID = (Integer) inParams.get(1); - final String theMethodResult = (String) inParams.get(2); + } else if (operationName.equals("server.result")) { + final Integer theOperationID = (Integer) inRequest.getParameter(1); + final String theMethodResult = (String) inRequest.getParameter(2); theResult = ""; final List<Object> theHolder = mPendingOperations.get(theOperationID); @@ -508,9 +523,10 @@ theHolder.notifyAll(); } } - } else if (inMethod.equals("server.exception")) { - final Integer theOperationID = (Integer) inParams.get(1); - final String theExceptionString = (String) inParams.get(2); + } else if (operationName.equals("server.exception")) { + final Integer theOperationID = (Integer) inRequest.getParameter(1); + final String theExceptionString = + (String) inRequest.getParameter(2); theResult = ""; final List<Object> theHolder = mPendingOperations.get(theOperationID); @@ -521,7 +537,8 @@ } } } else { - throw new NoSuchMethodException(inMethod); + throw new XmlRpcException("No such method", + new NoSuchMethodException(operationName)); } return theResult; } Modified: simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentListManager.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentListManager.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentListManager.java 2007-05-24 05:06:59 UTC (rev 147) @@ -88,7 +88,7 @@ /** * Constructeur \xE0 partir d'un serveur MDXR. - * Lance la recherche des avatars. + * Lance la recherche des agents. * * @param inServer serveur MDXR (son port nous int\xE9resse). * @param inPlayerClasses classes des joueurs. Modified: simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentRequest.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentRequest.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRAgentRequest.java 2007-05-24 05:06:59 UTC (rev 147) @@ -30,11 +30,16 @@ // imports import java.io.IOException; import java.net.InetSocketAddress; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; import java.util.Map; import java.util.Vector; -import org.apache.xmlrpc.XmlRpcClient; import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.client.XmlRpcClient; +import org.apache.xmlrpc.client.XmlRpcClientConfigImpl; +import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory; import com.kallisys.zeroconf.MulticastDNSClient; import com.kallisys.zeroconf.MulticastDNSServer; @@ -113,19 +118,32 @@ // Contact du serveur maintenant qu'on a son adresse et son port. final InetSocketAddress theAddress = mService.getAddresses()[0]; - final XmlRpcClient theXMLRPCClient = - new XmlRpcClient( + final XmlRpcClientConfigImpl theConfig = + new XmlRpcClientConfigImpl(); + URL theURL; + + try { + theURL = + new URL("http", theAddress.getAddress().getHostAddress(), - theAddress.getPort()); - // CSOFF: IllegalType - final Vector<Object> theParamsVector = new Vector<Object>(); - // CSON: IllegalType + theAddress.getPort(), + "/"); + } catch (MalformedURLException anException) { + throw new XmlRpcException(anException.toString(), anException); + } + + theConfig.setServerURL(theURL); + final XmlRpcClient theXMLRPCClient = new XmlRpcClient(); + theXMLRPCClient.setTransportFactory( + new XmlRpcCommonsTransportFactory(theXMLRPCClient)); + theXMLRPCClient.setConfig(theConfig); + final List<Object> theParamsVector = new Vector<Object>(2); theParamsVector.add(inOperationName); theParamsVector.add(inParams); // La m\xE9thode retourne une cha\xEEne. final String theResult = - (String) theXMLRPCClient.execute("avatar.execute", theParamsVector); + (String) theXMLRPCClient.execute("agent.execute", theParamsVector); return theResult; } Modified: simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRServer.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRServer.java 2007-05-23 03:17:17 UTC (rev 146) +++ simulacion/src/fr/lip6/sma/simulacion/server/mdxr/MDXRServer.java 2007-05-24 05:06:59 UTC (rev 147) @@ -28,14 +28,19 @@ package fr.lip6.sma.simulacion.server.mdxr; // imports -import org.apache.xmlrpc.WebServer; -import org.apache.xmlrpc.XmlRpc; +import java.io.IOException; +import org.apache.xmlrpc.server.XmlRpcServer; +import org.apache.xmlrpc.server.XmlRpcServerConfigImpl; +import org.apache.xmlrpc.webserver.WebServer; + import fr.lip6.sma.simulacion.app.Configuration; import fr.lip6.sma.simulacion.server.Agent; import fr.lip6.sma.simulacion.server.AgentListManager; -import fr.lip6.sma.simulacion.server.Handler; import fr.lip6.sma.simulacion.server.Server; +import fr.lip6.sma.simulacion.server.ServerException; +import fr.lip6.sma.simulacion.server.xmlrpc.AgentHandler; +import fr.lip6.sma.simulacion.server.xmlrpc.SimpleHandlerMapping; /** * Classe pour le serveur de Simulacion. @@ -56,7 +61,7 @@ * Gestionnaire pour l'agent local, <code>null</code> tant qu'il n'est * pas d\xE9fini. */ - private Handler mLocalAgentHandler; + private AgentHandler mLocalAgentHandler; /** * Gestionnaire de liste pour les agents. @@ -64,34 +69,42 @@ private MDXRAgentListManager mAgentListManager; /** + * Handler mappings. + */ + private final SimpleHandlerMapping mHandlerMapping; + + /** * Constructeur par d\xE9faut. */ public MDXRServer() { super(0); mLocalAgentHandler = null; + + mHandlerMapping = new SimpleHandlerMapping(); + final XmlRpcServer theServer = getXmlRpcServer(); + theServer.setHandlerMapping(mHandlerMapping); } /** * Configure et d\xE9marre le serveur. * * @param inConfiguration configuration de l'application. + * @throws ServerException if there was a problem binding the server. */ - public void start(Configuration inConfiguration) { - // Configuration du serveur. -// XmlRpc.setDebug(true); + public void start(Configuration inConfiguration) throws ServerException { + // Configuration. + final XmlRpcServer theServer = getXmlRpcServer(); + final XmlRpcServerConfigImpl theServerConfig = + (XmlRpcServerConfigImpl) theServer.getConfig(); + theServerConfig.setEnabledForExtensions(true); + + // On lance le serveur. try { - XmlRpc.setDriver("xerces"); - // le pilote par d\xE9faut ne sait pas g\xE9rer les - // encodages correctement. - XmlRpc.setEncoding("UTF8"); - } catch (ClassNotFoundException anException) { - anException.printStackTrace(); - System.exit(1); + start(); + } catch (IOException anException) { + throw new ServerException(anException); } - - // On lance le serveur. - start(); // Puis on construit le gestionnaire de liste. mAgentListManager = @@ -117,12 +130,12 @@ final void setLocalAgent(Agent inLocalAgent) { if (mLocalAgentHandler != null) { // Suppression de l'ancien agent. - removeHandler("avatar"); + mHandlerMapping.removeHandler("agent"); } // Ajout du (nouveau) gestionnaire. - mLocalAgentHandler = new Handler(inLocalAgent); - addHandler("avatar", mLocalAgentHandler); + mLocalAgentHandler = new AgentHandler(inLocalAgent); + mHandlerMapping.addHandler("agent", mLocalAgentHandler); } /** @@ -137,7 +150,7 @@ if (mLocalAgentHandler != null) { // On supprime le gestionnaire - removeHandler("avatar"); + mHandlerMapping.removeHandler("agent"); mLocalAgentHandler = null; } Added: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/AgentHandler.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/AgentHandler.java (rev 0) +++ simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/AgentHandler.java 2007-05-24 05:06:59 UTC (rev 147) @@ -0,0 +1,107 @@ +// ============================== +// File: Handler.java +// Project: Simulaci\xF3n +// Written by: Paul Guyot (pau...@ac...) +// +// Created on: 12/5/2003 +// Tabs: 4 spaces +// +// This software is governed by the CeCILL license under French law and abiding +// by the rules of distribution of free software. You can use, modify and/ or +// redistribute the software under the terms of the CeCILL license as +// circulated by CEA, CNRS and INRIA at the following URL +// "http://www.cecill.info". +// +// As a counterpart to the access to the source code and rights to copy, modify +// and redistribute granted by the license, users are provided only with a +// limited warranty and the software's author, the holder of the economic +// rights, and the successive licensors have only limited liability. +// +// The fact that you are presently reading this means that you have had +// knowledge of the CeCILL license and that you accept its terms. +// +// =========== +// $Id$ +// =========== + +// paquet +package fr.lip6.sma.simulacion.server.xmlrpc; + +// import +import java.util.Map; + +import org.apache.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.XmlRpcHandler; +import org.apache.xmlrpc.XmlRpcRequest; + +import fr.lip6.sma.simulacion.server.Agent; +import fr.lip6.sma.simulacion.server.AgentException; + +/** + * Classe pour l'interface publique du serveur. + * L'int\xE9r\xEAt de cette classe est qu'elle limite les m\xE9thodes qui sont publi\xE9es. + * Inutile d'\xEAtre compl\xE8tement parano, mais ceci permet d'\xE9viter de publier des + * m\xE9thodes qui ne doivent pas \xEAtre appel\xE9es par le r\xE9seau. + * + * @author Paul Guyot <pau...@ac...> + * @version $Revision$ + * + * @see "aucun test d\xE9fini." + */ +public final class AgentHandler implements XmlRpcHandler { + /** + * R\xE9f\xE9rence sur l'agent. + */ + private final Agent mLocalAgent; + + /** + * Constructeur \xE0 partir de l'agent local. + * + * @param inLocalAgent mod\xE8le associ\xE9 \xE0 ce gestionnaire + */ + public AgentHandler(Agent inLocalAgent) { + mLocalAgent = inLocalAgent; + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + public Object execute(XmlRpcRequest inRequest) throws XmlRpcException { + Object theResult; + if (inRequest.getMethodName().endsWith(".execute")) { + final String operationName = (String) inRequest.getParameter(0); + final Map<String, Object> theParams = + (Map<String, Object>) inRequest.getParameter(1); + try { + theResult = mLocalAgent.execute(operationName, theParams); + } catch (AgentException anException) { + throw new XmlRpcException(anException.toString(), anException); + } + } else { + throw new XmlRpcException("No such method"); + } + + return theResult; + } +} + +// ========================================================================= // +// Price Wang's programmer was coding software. His fingers danced // +// upon the keyboard. The program compiled without an error message, and // +// the program ran like a gentle wind. // +// Excellent!" the Price exclaimed, "Your technique is faultless!" // +// "Technique?" said the programmer, turning from his terminal, // +// "What I follow is the Tao -- beyond all technique. When I first began to // +// program I would see before me the whole program in one mass. After three // +// years I no longer saw this mass. Instead, I used subroutines. But now I // +// see nothing. My whole being exists in a formless void. My senses are // +// idle. My spirit, free to work without a plan, follows its own instinct. // +// In short, my program writes itself. True, sometimes there are difficult // +// problems. I see them coming, I slow down, I watch silently. Then I // +// change a single line of code and the difficulties vanish like puffs of // +// idle smoke. I then compile the program. I sit still and let the joy of // +// the work fill my being. I close my eyes for a moment and then log off." // +// Price Wang said, "Would that all of my programmers were as wise!" // +// -- Geoffrey James, "The Tao of Programming" // +// ========================================================================= // Property changes on: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/AgentHandler.java ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + Revision Id Added: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/SimpleHandlerMapping.java =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/SimpleHandlerMapping.java (rev 0) +++ simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/SimpleHandlerMapping.java 2007-05-24 05:06:59 UTC (rev 147) @@ -0,0 +1,91 @@ +// ============================== +// File: SimpleHandlerMapping.java +// Project: Simulaci\xF3n +// Written by: Paul Guyot (pau...@ac...) +// +// Created on: 24/5/2007 +// Tabs: 4 spaces +// +// This software is governed by the CeCILL license under French law and abiding +// by the rules of distribution of free software. You can use, modify and/ or +// redistribute the software under the terms of the CeCILL license as +// circulated by CEA, CNRS and INRIA at the following URL +// "http://www.cecill.info". +// +// As a counterpart to the access to the source code and rights to copy, modify +// and redistribute granted by the license, users are provided only with a +// limited warranty and the software's author, the holder of the economic +// rights, and the successive licensors have only limited liability. +// +// The fact that you are presently reading this means that you have had +// knowledge of the CeCILL license and that you accept its terms. +// +// =========== +// $Id$ +// =========== + +// paquet +package fr.lip6.sma.simulacion.server.xmlrpc; + +// imports +import java.util.HashMap; +import java.util.Map; + +import org.apache.xmlrpc.XmlRpcHandler; +import org.apache.xmlrpc.server.XmlRpcHandlerMapping; + +/** + * Simple handler mapping implementation for the purpose of the transition + * from Apache XmlRpc-2.0 to XmlRpc-3.0. + * + * @author Paul Guyot <pau...@ac...> + * @version $Revision$ + */ +public final class SimpleHandlerMapping implements XmlRpcHandlerMapping { + /** + * List of handlers. + */ + private final Map<String, XmlRpcHandler> mHandlers; + + /** + * Default constructor. + */ + public SimpleHandlerMapping() { + mHandlers = new HashMap<String, XmlRpcHandler>(); + } + + /** + * {@inheritDoc} + */ + public XmlRpcHandler getHandler(String inName) { + final String[] segments = inName.split("\\."); + return mHandlers.get(segments[0]); + } + + /** + * Add a handler. + * + * @param inName name of the handler. + * @param inHandler handler to add. + */ + public void addHandler(String inName, XmlRpcHandler inHandler) { + mHandlers.put(inName, inHandler); + } + + /** + * Remove a handler. + * + * @param inName name of the handler. + */ + public void removeHandler(String inName) { + mHandlers.remove(inName); + } +} + +// ======================================================================== // +// Making files is easy under the UNIX operating system. Therefore, users // +// tend to create numerous files using large amounts of file space. It has // +// been said that the only standard thing about all UNIX systems is the // +// message-of-the-day telling users to clean up their files. // +// -- System V.2 administrator's guide // +// ======================================================================== // Property changes on: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/SimpleHandlerMapping.java ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + Revision Id Added: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/package.html =================================================================== --- simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/package.html (rev 0) +++ simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/package.html 2007-05-24 05:06:59 UTC (rev 147) @@ -0,0 +1,42 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<!-- +============================== +Fichier: fr/lip6/sma/simulacion/server/xmlrpc/package.html +Projet: Simulaci\xF3n +Ecrit par: Paul Guyot (pau...@ac...) + +Cr\xE9\xE9 le: 24/5/2007 +Tabulation: 4 espaces + +This software is governed by the CeCILL license under French law and abiding +by the rules of distribution of free software. You can use, modify and/ or +redistribute the software under the terms of the CeCILL license as +circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, modify +and redistribute granted by the license, users are provided only with a +limited warranty and the software's author, the holder of the economic +rights, and the successive licensors have only limited liability. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +=========== +$Id$ +=========== +--!> +<html> +<head> +</head> +<body bgcolor="white"> + +Package for common classes related to Xml-Rpc. + +</body> +</html> +<!-- +=============================================================== +Excessive login or logout messages are a sure sign of senility. +=============================================================== +--> Property changes on: simulacion/src/fr/lip6/sma/simulacion/server/xmlrpc/package.html ___________________________________________________________________ Name: svn:executable + * Name: svn:keywords + Revision Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |