You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jc...@apache.org on 2005/10/14 16:08:25 UTC
svn commit: r321126 - in /jakarta/commons/sandbox/proxy/trunk: ./
src/java/org/apache/commons/proxy/exception/
src/java/org/apache/commons/proxy/factory/javassist/
src/java/org/apache/commons/proxy/handler/
src/test/org/apache/commons/proxy/handler/
Author: jcarman
Date: Fri Oct 14 07:08:17 2005
New Revision: 321126
URL: http://svn.apache.org/viewcvs?rev=321126&view=rev
Log:
Adding support for Apache XML-RPC.
Added:
jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java (with props)
jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java (with props)
jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java (with props)
Modified:
jakarta/commons/sandbox/proxy/trunk/build.xml
jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml
jakarta/commons/sandbox/proxy/trunk/project.xml
jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistMethodInvocation.java
Modified: jakarta/commons/sandbox/proxy/trunk/build.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/build.xml?rev=321126&r1=321125&r2=321126&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/build.xml (original)
+++ jakarta/commons/sandbox/proxy/trunk/build.xml Fri Oct 14 07:08:17 2005
@@ -70,6 +70,8 @@
<runtime-dependency groupId="log4j" version="1.2.9" />
<runtime-dependency groupId="commons-discovery" version="0.2" />
<runtime-dependency groupId="javassist" version="3.0"/>
+ <runtime-dependency groupId="xmlrpc" version="2.0" />
+ <runtime-dependency groupId="commons-codec" version="1.3" />
<build-dependency groupId="junit" version="3.8.1"/>
<build-dependency groupId="jmock" version="1.0.1" />
</target>
Modified: jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml?rev=321126&r1=321125&r2=321126&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml (original)
+++ jakarta/commons/sandbox/proxy/trunk/commons-proxy.iml Fri Oct 14 07:08:17 2005
@@ -165,6 +165,24 @@
<SOURCES />
</library>
</orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/lib/runtime/xmlrpc/xmlrpc.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
+ <orderEntry type="module-library">
+ <library>
+ <CLASSES>
+ <root url="jar://$MODULE_DIR$/lib/runtime/commons-codec/commons-codec.jar!/" />
+ </CLASSES>
+ <JAVADOC />
+ <SOURCES />
+ </library>
+ </orderEntry>
<orderEntryProperties />
</component>
</module>
Modified: jakarta/commons/sandbox/proxy/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/project.xml?rev=321126&r1=321125&r2=321126&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/project.xml (original)
+++ jakarta/commons/sandbox/proxy/trunk/project.xml Fri Oct 14 07:08:17 2005
@@ -259,6 +259,24 @@
<comment>The JMock Mock Objects Library</comment>
</properties>
</dependency>
+ <dependency>
+ <groupId>xmlrpc</groupId>
+ <artifactId>xmlrpc</artifactId>
+ <version>2.0</version>
+ <url>http://ws.apache.org/xmlrpc/</url>
+ <properties>
+ <comment>Apache XML-RPC</comment>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.3</version>
+ <url>http://jakarta.apache.org/commons/codec/</url>
+ <properties>
+ <comment>Jakarta Commons Codec</comment>
+ </properties>
+ </dependency>
</dependencies>
<build>
Added: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java?rev=321126&view=auto
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java (added)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java Fri Oct 14 07:08:17 2005
@@ -0,0 +1,43 @@
+/* $Id$
+ *
+ * Copyright 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.commons.proxy.exception;
+
+/**
+ * @author James Carman
+ * @version 1.0
+ */
+public class InvocationHandlerException extends RuntimeException
+{
+ public InvocationHandlerException()
+ {
+ }
+
+ public InvocationHandlerException( String message )
+ {
+ super( message );
+ }
+
+ public InvocationHandlerException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public InvocationHandlerException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}
Propchange: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/exception/InvocationHandlerException.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistMethodInvocation.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistMethodInvocation.java?rev=321126&r1=321125&r2=321126&view=diff
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistMethodInvocation.java (original)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/factory/javassist/JavassistMethodInvocation.java Fri Oct 14 07:08:17 2005
@@ -112,7 +112,7 @@
constructor.setBody( "{\n\tsuper($$);\n}" );
ctClass.addConstructor( constructor );
final CtMethod proceedMethod = new CtMethod( JavassistUtils.resolve( Object.class ), "proceed",
- JavassistUtils.resolve( ProxyUtils.EMPTY_ARGUMENT_TYPES ), ctClass );
+ JavassistUtils.resolve( new Class[0] ), ctClass );
final Class[] argumentTypes = interfaceMethod.getParameterTypes();
final StringBuffer proceedBody = new StringBuffer( "{\n" );
if( !Void.TYPE.equals( interfaceMethod.getReturnType() ) )
@@ -124,14 +124,14 @@
proceedBody.append( "\t" );
}
proceedBody.append( "( (" );
- proceedBody.append( interfaceMethod.getDeclaringClass().getName() );
+ proceedBody.append( JavassistUtils.getJavaClassName( interfaceMethod.getDeclaringClass() ) );
proceedBody.append( " )target )." );
proceedBody.append( interfaceMethod.getName() );
proceedBody.append( "(" );
for( int i = 0; i < argumentTypes.length; ++i )
{
proceedBody.append( "(" );
- proceedBody.append( argumentTypes[i].getName() );
+ proceedBody.append( JavassistUtils.getJavaClassName( argumentTypes[i] ) );
proceedBody.append( ")arguments[" );
proceedBody.append( i );
proceedBody.append( "]" );
Added: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java?rev=321126&view=auto
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java (added)
+++ jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java Fri Oct 14 07:08:17 2005
@@ -0,0 +1,63 @@
+/* $Id$
+ *
+ * Copyright 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.commons.proxy.handler;
+
+import org.apache.xmlrpc.XmlRpcHandler;
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.commons.proxy.exception.InvocationHandlerException;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Vector;
+
+/**
+ * @author James Carman
+ * @version 1.0
+ */
+public class XmlRpcInvocationHandler implements InvocationHandler
+{
+ private final XmlRpcHandler handler;
+ private final String handlerName;
+
+ public XmlRpcInvocationHandler( XmlRpcHandler handler, String handlerName )
+ {
+ this.handler = handler;
+ this.handlerName = handlerName;
+ }
+
+ public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
+ {
+ final Object returnValue = handler.execute( handlerName + "." + method.getName(), toArgumentVector( args ) );
+ if( returnValue instanceof XmlRpcException )
+ {
+ throw new InvocationHandlerException( "Unable to execute XML-RPC call.", ( XmlRpcException )returnValue );
+
+ }
+ return returnValue;
+ }
+
+ private Vector toArgumentVector( Object[] args )
+ {
+ final Vector v = new Vector();
+ for( int i = 0; i < args.length; i++ )
+ {
+ Object arg = args[i];
+ v.addElement( arg );
+ }
+ return v;
+ }
+}
Propchange: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/proxy/trunk/src/java/org/apache/commons/proxy/handler/XmlRpcInvocationHandler.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java?rev=321126&view=auto
==============================================================================
--- jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java (added)
+++ jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java Fri Oct 14 07:08:17 2005
@@ -0,0 +1,72 @@
+/* $Id$
+ *
+ * Copyright 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.commons.proxy.handler;
+
+import junit.framework.TestCase;
+import org.apache.commons.proxy.factory.cglib.CglibProxyFactory;
+import org.apache.commons.proxy.util.Echo;
+import org.apache.commons.proxy.util.EchoImpl;
+import org.apache.commons.proxy.exception.InvocationHandlerException;
+import org.apache.xmlrpc.WebServer;
+import org.apache.xmlrpc.XmlRpcClient;
+
+/**
+ * @author James Carman
+ */
+public class TestXmlRpcInvocationHandler extends TestCase
+{
+ private WebServer server;
+ private XmlRpcClient client;
+
+ protected void setUp() throws Exception
+ {
+ server = new WebServer( 9999 );
+ server.addHandler( "echo", new EchoImpl() );
+ server.start();
+ client = new XmlRpcClient( "http://localhost:9999/RPC2" );
+ }
+
+ protected void tearDown() throws Exception
+ {
+ server.shutdown();
+ }
+
+ public void testInvalidHandlerName()
+ {
+ final XmlRpcInvocationHandler handler = new XmlRpcInvocationHandler( client, "invalid" );
+ final Echo echo = ( Echo ) new CglibProxyFactory()
+ .createInvocationHandlerProxy( handler, new Class[]{ Echo.class } );
+ try
+ {
+ echo.echoBack( "Hello" );
+ fail();
+ }
+ catch( InvocationHandlerException e )
+ {
+
+ }
+ }
+
+ public void testValidInvocation() throws Exception
+ {
+ final XmlRpcInvocationHandler handler = new XmlRpcInvocationHandler( client, "echo" );
+ final Echo echo = ( Echo ) new CglibProxyFactory()
+ .createInvocationHandlerProxy( handler, new Class[]{ Echo.class } );
+ assertEquals( "Hello", echo.echoBack( "Hello" ) );
+
+ }
+}
\ No newline at end of file
Propchange: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/sandbox/proxy/trunk/src/test/org/apache/commons/proxy/handler/TestXmlRpcInvocationHandler.java
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org