Author: jochen
Date: Tue Jun 13 13:38:36 2006
New Revision: 413980
URL: http://svn.apache.org/viewvc?rev=413980&view=rev
Log:
Added a factory for proxy objects.
Added:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/ClientFactory.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
webservices/xmlrpc/trunk/tests/src/test/resources/org/apache/xmlrpc/test/DynamicProxyTest.properties
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
Added:
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/ClientFactory.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/ClientFactory.java?rev=413980&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/ClientFactory.java
(added)
+++
webservices/xmlrpc/trunk/client/src/main/java/org/apache/xmlrpc/client/util/ClientFactory.java
Tue Jun 13 13:38:36 2006
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1999,2006 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.xmlrpc.client.util;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.apache.xmlrpc.client.XmlRpcClient;
+
+
+/**
+ * <p>The [EMAIL PROTECTED] ClientFactory} is a useful tool for simplifying the
+ * use of Apache XML-RPC. The rough idea is as follows: All XML-RPC
+ * handlers are implemented as interfaces. The server uses the actual
+ * implementation. The client uses the [EMAIL PROTECTED] ClientFactory} to
+ * obtain an implementation, which is based on running XML-RPC calls.</p>
+ */
+public class ClientFactory {
+ private final XmlRpcClient client;
+ private boolean objectMethodLocal;
+
+ /** Creates a new instance.
+ * @param pClient A fully configured XML-RPC client, which is
+ * used internally to perform XML-RPC calls.
+ */
+ public ClientFactory(XmlRpcClient pClient) {
+ client = pClient;
+ }
+
+ /** Returns the factories client.
+ */
+ public XmlRpcClient getClient() {
+ return client;
+ }
+
+ /** Returns, whether a method declared by the [EMAIL PROTECTED] Object
+ * Object class} is performed by the local object, rather than
+ * by the server. Defaults to true.
+ */
+ public boolean isObjectMethodLocal() {
+ return objectMethodLocal;
+ }
+
+ /** Sets, whether a method declared by the [EMAIL PROTECTED] Object
+ * Object class} is performed by the local object, rather than
+ * by the server. Defaults to true.
+ */
+ public void setObjectMethodLocal(boolean pObjectMethodLocal) {
+ objectMethodLocal = pObjectMethodLocal;
+ }
+
+ /** Creates an object, which is implementing the given interface.
+ * The objects methods are internally calling an XML-RPC server
+ * by using the factories client.
+ */
+ public Object newInstance(Class pClass) {
+ return newInstance(Thread.currentThread().getContextClassLoader(),
pClass);
+ }
+
+ /** Creates an object, which is implementing the given interface.
+ * The objects methods are internally calling an XML-RPC server
+ * by using the factories client.
+ */
+ public Object newInstance(ClassLoader pClassLoader, final Class pClass) {
+ return Proxy.newProxyInstance(pClassLoader, new Class[]{pClass}, new
InvocationHandler(){
+ public Object invoke(Object pProxy, Method pMethod, Object[]
pArgs) throws Throwable {
+ if (isObjectMethodLocal() &&
pMethod.getDeclaringClass().equals(Object.class)) {
+ return pMethod.invoke(pProxy, pArgs);
+ }
+ String methodName = pClass.getName() + "." + pMethod.getName();
+ return client.execute(methodName, pArgs);
+ }
+ });
+ }
+}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java?rev=413980&r1=413979&r2=413980&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/BaseTest.java
Tue Jun 13 13:38:36 2006
@@ -41,31 +41,11 @@
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
-import junit.framework.TestCase;
-
/** An abstract test case, to be implemented for the various
* transport classes.
*/
-public class BaseTest extends TestCase {
- private ClientProvider[] providers;
-
- public void setUp() throws Exception {
- if (providers == null) {
- XmlRpcHandlerMapping mapping = getHandlerMapping();
- providers = new ClientProvider[]{
- new LocalTransportProvider(mapping),
- new LocalStreamTransportProvider(mapping),
- new LiteTransportProvider(mapping, true),
- // new LiteTransportProvider(mapping, false),
Doesn't support HTTP/1.1
- new SunHttpTransportProvider(mapping, true),
- new SunHttpTransportProvider(mapping, false),
- new CommonsProvider(mapping),
- new ServletWebServerProvider(mapping, true),
- new ServletWebServerProvider(mapping, false)
- };
- }
- }
+public class BaseTest extends XmlRpcTestCase {
/** The remote class being invoked by the test case.
*/
@@ -305,16 +285,6 @@
return new PropertyHandlerMapping(getClass().getClassLoader(),
getClass().getResource("BaseTest.properties"),
true);
- }
-
- protected XmlRpcClientConfigImpl getConfig(ClientProvider pProvider)
throws Exception {
- return pProvider.getConfig();
- }
-
- protected XmlRpcClientConfig getExConfig(ClientProvider pProvider)
throws Exception {
- XmlRpcClientConfigImpl config = getConfig(pProvider);
- config.setEnabledForExtensions(true);
- return config;
}
/** Test, whether we can invoke a method, passing a byte value.
Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java?rev=413980&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
(added)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/DynamicProxyTest.java
Tue Jun 13 13:38:36 2006
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1999,2006 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.xmlrpc.test;
+
+import java.io.IOException;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.util.ClientFactory;
+import org.apache.xmlrpc.server.PropertyHandlerMapping;
+import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+
+
+/** Test case for the [EMAIL PROTECTED] ClientFactory}.
+ */
+public class DynamicProxyTest extends XmlRpcTestCase {
+ /** An interface, which is being implemented by the
+ * server.
+ */
+ public interface Adder {
+ /** Returns the sum of the given integers.
+ */
+ public int add(int pNum1, int pNum2);
+ }
+
+ /** Implementation of [EMAIL PROTECTED] Adder}, which is used by
+ * the server.
+ */
+ public static class AdderImpl implements Adder {
+ public int add(int pNum1, int pNum2) {
+ return pNum1 + pNum2;
+ }
+ }
+
+ protected XmlRpcHandlerMapping getHandlerMapping() throws IOException,
XmlRpcException {
+ return new PropertyHandlerMapping(getClass().getClassLoader(),
+
getClass().getResource("DynamicProxyTest.properties"),
+ true);
+ }
+
+ private ClientFactory getClientFactory(ClientProvider pProvider) throws
Exception {
+ XmlRpcClient client = pProvider.getClient();
+ client.setConfig(getConfig(pProvider));
+ return new ClientFactory(client);
+ }
+
+ /** Tests calling the [EMAIL PROTECTED] Adder#add(int,int)} method
+ * by using an object, which has been created by the
+ * [EMAIL PROTECTED] ClientFactory}.
+ */
+ public void testAdderCall() throws Exception {
+ for (int i = 0; i < providers.length; i++) {
+ testAdderCall(providers[i]);
+ }
+ }
+
+ private void testAdderCall(ClientProvider pProvider) throws Exception {
+ ClientFactory factory = getClientFactory(pProvider);
+ Adder adder = (Adder) factory.newInstance(Adder.class);
+ assertEquals(6, adder.add(2, 4));
+ }
+}
Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java?rev=413980&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
(added)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
Tue Jun 13 13:38:36 2006
@@ -0,0 +1,61 @@
+/*
+ * Copyright 1999,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.xmlrpc.test;
+
+import java.io.IOException;
+
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.client.XmlRpcClientConfig;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+
+import junit.framework.TestCase;
+
+
+/** Abstract base class for deriving test cases.
+ */
+public abstract class XmlRpcTestCase extends TestCase {
+ protected ClientProvider[] providers;
+
+ protected abstract XmlRpcHandlerMapping getHandlerMapping() throws
IOException, XmlRpcException;
+
+ protected XmlRpcClientConfigImpl getConfig(ClientProvider pProvider)
throws Exception {
+ return pProvider.getConfig();
+ }
+
+ protected XmlRpcClientConfig getExConfig(ClientProvider pProvider) throws
Exception {
+ XmlRpcClientConfigImpl config = getConfig(pProvider);
+ config.setEnabledForExtensions(true);
+ return config;
+ }
+
+ public void setUp() throws Exception {
+ if (providers == null) {
+ XmlRpcHandlerMapping mapping = getHandlerMapping();
+ providers = new ClientProvider[]{
+ new LocalTransportProvider(mapping),
+ new LocalStreamTransportProvider(mapping),
+ new LiteTransportProvider(mapping, true),
+ // new LiteTransportProvider(mapping, false), Doesn't support
HTTP/1.1
+ new SunHttpTransportProvider(mapping, true),
+ new SunHttpTransportProvider(mapping, false),
+ new CommonsProvider(mapping),
+ new ServletWebServerProvider(mapping, true),
+ new ServletWebServerProvider(mapping, false)
+ };
+ }
+ }
+}
Added:
webservices/xmlrpc/trunk/tests/src/test/resources/org/apache/xmlrpc/test/DynamicProxyTest.properties
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/resources/org/apache/xmlrpc/test/DynamicProxyTest.properties?rev=413980&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/resources/org/apache/xmlrpc/test/DynamicProxyTest.properties
(added)
+++
webservices/xmlrpc/trunk/tests/src/test/resources/org/apache/xmlrpc/test/DynamicProxyTest.properties
Tue Jun 13 13:38:36 2006
@@ -0,0 +1 @@
+org.apache.xmlrpc.test.DynamicProxyTest$Adder=org.apache.xmlrpc.test.DynamicProxyTest$AdderImpl
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]