;http://ws.apache.org/xmlrpc/apidocs/org/apache/xmlrpc/XmlRpcHandler.html (defvar *xml-rpc-server-port* 8888) (defvar *xml-rpc-server*) (defun setup-server () (when (boundp '*xml-rpc-server*) (#"shutdown" *xml-rpc-server*)) (setq *xml-rpc-server* (new 'WebServer *xml-rpc-server-port*)) (#"start" *xml-rpc-server*) (let ((proxy (jinterface-implementation (find-java-class "org.apache.xmlrpc.XmlRpcHandler") "execute" (lambda (method args) (handle-rpc-call method args)) ))) (#"addHandler" *xml-rpc-server* "$default" proxy))) ;(eval-when (:load-toplevel :execute) ; (setup-server)) (defun handle-rpc-call (method args) (multiple-value-bind (value condition) (ignore-errors (cond ((equal (#"toString" method) "echo") (#"toString" (#"elementAt" args 0))) (t (format nil "Error - Don't know method ~a" (#"toString" method))))) (if condition ;(format nil "Error: ~a" condition) value ;;))) (let ((exception (new 'xmlrpc.XmlRpcException 0 (format nil "Error: ~a" condition)))) (jstatic (jmethod "jsint.Procedure" "throwObject" (jclass "java.lang.Object")) (jclass "jsint.Procedure") exception)) value))) (defun test () (add-to-classpath "~/Desktop/lsw/trunk/extlib/commons-httpclient-3.0.jar") (let ((client (new 'XmlRpcClient "http://localhost:8888/"))) (let ((args (new 'java.util.vector 1))) (#"add" args "hello") (#"execute" client "echo" args))))