Author: jochen
Date: Fri Feb 24 06:36:58 2006
New Revision: 380676
URL: http://svn.apache.org/viewcvs?rev=380676&view=rev
Log:
Added interfaces, which are specifying the implementation of
XML-RPC introspection (XMLRPC-75).
Added:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcListableHandlerMapping.java
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcMetaDataHandler.java
Added:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcListableHandlerMapping.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcListableHandlerMapping.java?rev=380676&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcListableHandlerMapping.java
(added)
+++
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcListableHandlerMapping.java
Fri Feb 24 06:36:58 2006
@@ -0,0 +1,88 @@
+package org.apache.xmlrpc.metadata;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcHandler;
+import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+
+
+/** A listable handler mapping is able to provide support for
+ * XML-RPC meta data, as specified
+ * <a href="http://scripts.incutio.com/xmlrpc/introspection.html">
+ * here</a>.<br>
+ *
+ * @see <a href="http://scripts.incutio.com/xmlrpc/introspection.html">
+ * Specification of XML-RPC introspection</a>
+ */
+public interface XmlRpcListableHandlerMapping extends XmlRpcHandlerMapping {
+ /** This method implements the introspection method
+ * <code>system.listMethods</code>, which is specified
+ * as follows:
+ * <cite>
+ * <p>This method may be used to enumerate the methods implemented
+ * by the XML-RPC server.</p>
+ * <p>The <code>system.listMethods</code> method requires no
+ * parameters. It returns an array of strings, each of which is
+ * the name of a method implemented by the server.
+ * </cite>
+ * <p>Note, that the specification doesn't require that the list
+ * must be exhaustive. We conclude, that a valid method
+ * "handlerName" doesn't need to be in the list. For example,
+ * a handler, which implements [EMAIL PROTECTED] XmlRpcHandler}, but not
+ * [EMAIL PROTECTED] XmlRpcMetaDataHandler}, should possibly excluded:
+ * Otherwise, the listable handler mapping could not provide
+ * meaningful replies to <code>system.methodSignature</code>,
+ * and <code>system.methodHelp</code>.
+ *
+ * @throws XmlRpcException An internal error occurred.
+ */
+ String[] getListMethods() throws XmlRpcException;
+
+ /** This method implements the introspection method
+ * <code>system.methodSignature</code>, which is specified
+ * as follows:
+ * <cite>
+ * <p>This method takes one parameter, the name of a method
+ * implemented by the XML-RPC server. It returns an array
+ * of possible signatures for this method. A signature is
+ * an array of types. The first of these types is the return
+ * type of the method, the rest are parameters.</p>
+ * <p>Multiple signatures (ie. overloading) are permitted:
+ * this is the reason that an array of signatures are returned
+ * by this method.</p>
+ * <p>Signatures themselves are restricted to the top level
+ * parameters expected by a method. For instance if a method
+ * expects one array of structs as a parameter, and it returns
+ * a string, its signature is simply "string, array". If it
+ * expects three integers, its signature is
+ * "string, int, int, int".</p>
+ * <p>If no signature is defined for the method, a none-array
+ * value is returned. Therefore this is the way to test for a
+ * non-signature, if $resp below is the response object from
+ * a method call to system.methodSignature:
+ * <pre>
+ * $v=$resp->value();
+ * if ($v->kindOf()!="array") {
+ * // then the method did not have a signature defined
+ * }
+ * </pre>
+ * See the introspect.php demo included in this distribution
+ * for an example of using this method.</p>
+ * </cite>
+ * @see XmlRpcMetaDataHandler#getSignatures()
+ */
+ String[][] getMethodSignature(String pHandlerName) throws XmlRpcException;
+
+ /** This method implements the introspection method
+ * <code>system.methodSignature</code>, which is specified
+ * as follows:
+ * <cite>
+ * <p>This method takes one parameter, the name of a
+ * method implemented by the XML-RPC server. It
+ * returns a documentation string describing the
+ * use of that method. If no such string is available,
+ * an empty string is returned.</p>
+ * <p>The documentation string may contain HTML markup.</p>
+ * </cite>
+ */
+ String getMethodHelp(String pHandlerName) throws XmlRpcException;
+}
Added:
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcMetaDataHandler.java
URL:
http://svn.apache.org/viewcvs/webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcMetaDataHandler.java?rev=380676&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcMetaDataHandler.java
(added)
+++
webservices/xmlrpc/trunk/server/src/main/java/org/apache/xmlrpc/metadata/XmlRpcMetaDataHandler.java
Fri Feb 24 06:36:58 2006
@@ -0,0 +1,40 @@
+package org.apache.xmlrpc.metadata;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcHandler;
+import org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping;
+
+
+/** A metadata handler is able to provide metadata about
+ * itself, as specified
+ * <a href="http://scripts.incutio.com/xmlrpc/introspection.html">
+ * here</a>.<br>
+ *
+ * @see <a href="http://scripts.incutio.com/xmlrpc/introspection.html">
+ * Specification of XML-RPC introspection</a>
+ */
+public interface XmlRpcMetaDataHandler extends XmlRpcHandler {
+ /** <p>This method may be used to implement
+ * [EMAIL PROTECTED]
XmlRpcListableHandlerMapping#getMethodSignature(String)}.
+ * Typically, the handler mapping will pick up the
+ * matching handler, invoke its method
+ * [EMAIL PROTECTED] #getSignatures()}, and return the result.</p>
+ * <p>Method handlers, which are created by the
+ * [EMAIL PROTECTED] AbstractReflectiveHandlerMapping}, will typically
+ * return a single signature only.</p>
+ * @return An array of arrays. Any element in the outer
+ * array is a signature. The elements in the inner array
+ * are being concatenated with commas. The inner arrays
+ * first element is the return type, followed by the
+ * parameter types.
+ */
+ String[][] getSignatures() throws XmlRpcException;
+
+ /** <p>This method may be used to implement
+ * [EMAIL PROTECTED]
XmlRpcListableHandlerMapping#getMethodHelp(String)}.
+ * Typically, the handler mapping will pick up the
+ * matching handler, invoke its method
+ * [EMAIL PROTECTED] #getSignatures()}, and return the result.</p>
+ */
+ String getMethodHelp() throws XmlRpcException;
+}