Work in progress, still.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/proxy/branches/version-2.0-work@964999 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/cglib/pom.xml b/cglib/pom.xml
index b51c726..9f7c61b 100644
--- a/cglib/pom.xml
+++ b/cglib/pom.xml
@@ -20,7 +20,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>commons-proxy</artifactId>
+ <artifactId>commons-proxy-parent</artifactId>
<groupId>org.apache.commons</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
@@ -31,7 +31,7 @@
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -42,7 +42,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
diff --git a/cglib/src/main/resources/META-INF/services/org.apache.commons.proxy.ProxyFactory b/cglib/src/main/resources/META-INF/services/org.apache.commons.proxy.ProxyFactory
new file mode 100644
index 0000000..12ec239
--- /dev/null
+++ b/cglib/src/main/resources/META-INF/services/org.apache.commons.proxy.ProxyFactory
@@ -0,0 +1 @@
+org.apache.commons.proxy.cglib.CglibProxyFactory
\ No newline at end of file
diff --git a/cglib/src/test/java/org/apache/commons/proxy/cglib/TestCglibProxyFactory.java b/cglib/src/test/java/org/apache/commons/proxy/cglib/TestCglibProxyFactory.java
index e2985ef..0539e1b 100644
--- a/cglib/src/test/java/org/apache/commons/proxy/cglib/TestCglibProxyFactory.java
+++ b/cglib/src/test/java/org/apache/commons/proxy/cglib/TestCglibProxyFactory.java
@@ -27,6 +27,5 @@
public TestCglibProxyFactory()
{
- super(new CglibProxyFactory());
}
}
diff --git a/core/pom.xml b/core/pom.xml
index c72654a..194f557 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -3,13 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>commons-proxy</artifactId>
+ <artifactId>commons-proxy-parent</artifactId>
<groupId>org.apache.commons</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<dependencies>
<dependency>
@@ -49,6 +49,12 @@
<optional>true</optional>
</dependency>
<dependency>
+ <groupId>concurrent</groupId>
+ <artifactId>concurrent</artifactId>
+ <version>1.3.4</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.4.0</version>
diff --git a/core/src/test/java/org/apache/commons/proxy/TestProxyUtils.java b/core/src/test/java/org/apache/commons/proxy/TestProxyUtils.java
new file mode 100644
index 0000000..e3a1156
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/TestProxyUtils.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import junit.framework.TestCase;
+import org.apache.commons.proxy.util.DuplicateEcho;
+import org.apache.commons.proxy.util.Echo;
+import org.apache.commons.proxy.util.EchoImpl;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Properties;
+
+public class TestProxyUtils extends TestCase
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+ private Properties prevProperties;
+
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ protected void setUp() throws Exception
+ {
+ prevProperties = System.getProperties();
+ System.setProperties(new Properties());
+ }
+
+ protected void tearDown() throws Exception
+ {
+ System.setProperties(prevProperties);
+ }
+
+ public void testNullValue()
+ {
+ assertNullValue(null, String.class);
+ assertNullValue(( char ) 0, Character.TYPE);
+ assertNullValue(0, Integer.TYPE);
+ assertNullValue(( long ) 0, Long.TYPE);
+ assertNullValue(( short ) 0, Short.TYPE);
+ assertNullValue(( double ) 0, Double.TYPE);
+ assertNullValue(( float ) 0, Float.TYPE);
+ assertNullValue(false, Boolean.TYPE);
+ assertNullValue(( byte ) 0, Byte.TYPE);
+ }
+
+ private void assertNullValue( Object expected, Class type )
+ {
+ assertEquals(expected, ProxyUtils.nullValue(type));
+ }
+
+ public void testCreateNullObject() throws Exception
+ {
+ final Echo nullEcho = ( Echo ) ProxyUtils
+ .createNullObject(new JavassistProxyFactory(), new Class[] {Echo.class});
+ assertNull(nullEcho.echoBack("hello"));
+ assertNull(nullEcho.echoBack("hello", "world"));
+ assertEquals(( int ) 0, nullEcho.echoBack(12345));
+ }
+
+ public void testCreateNullObjectWithClassLoader() throws Exception
+ {
+ final Echo nullEcho = ( Echo ) ProxyUtils.createNullObject(new JavassistProxyFactory(),
+ Echo.class.getClassLoader(),
+ new Class[] {Echo.class});
+ assertNull(nullEcho.echoBack("hello"));
+ assertNull(nullEcho.echoBack("hello", "world"));
+ assertEquals(( int ) 0, nullEcho.echoBack(12345));
+ }
+
+ public void testGetAllInterfaces()
+ {
+ assertNull(ProxyUtils.getAllInterfaces(null));
+ assertEquals(Arrays.asList(new Class[] {DuplicateEcho.class, Serializable.class, Echo.class}),
+ Arrays.asList(ProxyUtils.getAllInterfaces(EchoImpl.class)));
+ }
+
+ public void testGetJavaClassName() throws Exception
+ {
+ assertEquals("java.lang.Object[]", ProxyUtils.getJavaClassName(Object[].class));
+ assertEquals("java.lang.Object[][]", ProxyUtils.getJavaClassName(Object[][].class));
+ assertEquals("java.lang.String[][][]", ProxyUtils.getJavaClassName(String[][][].class));
+ assertEquals("int", ProxyUtils.getJavaClassName(Integer.TYPE));
+ assertEquals("float", ProxyUtils.getJavaClassName(Float.TYPE));
+ assertEquals("long", ProxyUtils.getJavaClassName(Long.TYPE));
+ assertEquals("double", ProxyUtils.getJavaClassName(Double.TYPE));
+ assertEquals("short", ProxyUtils.getJavaClassName(Short.TYPE));
+ assertEquals("byte", ProxyUtils.getJavaClassName(Byte.TYPE));
+ assertEquals("char", ProxyUtils.getJavaClassName(Character.TYPE));
+ assertEquals("boolean", ProxyUtils.getJavaClassName(Boolean.TYPE));
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/exception/AbstractExceptionClassTestCase.java b/core/src/test/java/org/apache/commons/proxy/exception/AbstractExceptionClassTestCase.java
new file mode 100644
index 0000000..343ddd6
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/exception/AbstractExceptionClassTestCase.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import junit.framework.TestCase;
+
+/**
+ * @author James Carman
+ * @since 1.0
+ */
+public abstract class AbstractExceptionClassTestCase extends TestCase
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+ private final Class exceptionClass;
+
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+ public AbstractExceptionClassTestCase( Class exceptionClass )
+ {
+ this.exceptionClass = exceptionClass;
+ }
+
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testCauseOnlyConstructor() throws Exception
+ {
+ final Exception cause = new Exception();
+ Exception e = ( Exception ) exceptionClass.getConstructor(new Class[] {Throwable.class}).newInstance(new Object[] {cause});
+ assertEquals(cause.toString(), e.getMessage());
+ assertEquals(cause, e.getCause());
+ }
+
+ public void testMessageAndCauseConstructor() throws Exception
+ {
+ final Exception cause = new Exception();
+ final String message = "message";
+ Exception e = ( Exception ) exceptionClass.getConstructor(new Class[] {String.class, Throwable.class}).newInstance(new Object[] {message, cause});
+ assertEquals(message, e.getMessage());
+ assertEquals(cause, e.getCause());
+ }
+
+ public void testMessageOnlyConstructor() throws Exception
+ {
+ final String message = "message";
+ Exception e = ( Exception ) exceptionClass.getConstructor(new Class[] {String.class}).newInstance(new Object[] {message});
+ assertEquals(message, e.getMessage());
+ assertNull(e.getCause());
+ }
+
+ public void testNoArgConstructor() throws Exception
+ {
+ Exception e = ( Exception ) exceptionClass.getConstructor(new Class[] {}).newInstance(new Object[] {});
+ assertNull(e.getMessage());
+ assertNull(e.getCause());
+ }
+}
diff --git a/core/src/test/java/org/apache/commons/proxy/exception/TestDelegateProviderException.java b/core/src/test/java/org/apache/commons/proxy/exception/TestDelegateProviderException.java
new file mode 100644
index 0000000..45af58c
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/exception/TestDelegateProviderException.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+public class TestDelegateProviderException extends AbstractExceptionClassTestCase
+{
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+ public TestDelegateProviderException()
+ {
+ super(ObjectProviderException.class);
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/exception/TestInvocationHandlerException.java b/core/src/test/java/org/apache/commons/proxy/exception/TestInvocationHandlerException.java
new file mode 100644
index 0000000..13ed169
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/exception/TestInvocationHandlerException.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+public class TestInvocationHandlerException extends AbstractExceptionClassTestCase
+{
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+ public TestInvocationHandlerException()
+ {
+ super(InvokerException.class);
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/exception/TestProxyFactoryException.java b/core/src/test/java/org/apache/commons/proxy/exception/TestProxyFactoryException.java
new file mode 100644
index 0000000..4498a29
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/exception/TestProxyFactoryException.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ * @since 1.0
+ */
+public class TestProxyFactoryException extends AbstractExceptionClassTestCase
+{
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+ public TestProxyFactoryException()
+ {
+ super(ProxyFactoryException.class);
+ }
+}
diff --git a/core/src/test/java/org/apache/commons/proxy/impl/TestMethodSignature.java b/core/src/test/java/org/apache/commons/proxy/impl/TestMethodSignature.java
new file mode 100644
index 0000000..4388dd4
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/impl/TestMethodSignature.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.impl;
+
+import junit.framework.TestCase;
+
+public class TestMethodSignature extends TestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testEquals() throws Exception
+ {
+ final MethodSignature sig = new MethodSignature(Echo.class.getMethod("echoBack", new Class[] {String.class}));
+ assertTrue(sig.equals(sig));
+ assertFalse(sig.equals("echoBack"));
+ assertEquals(sig, new MethodSignature(Echo.class.getMethod("echoBack", new Class[] {String.class})));
+ assertEquals(sig, new MethodSignature(DuplicateEcho.class.getMethod("echoBack", new Class[] {String.class})));
+ assertFalse(sig.equals(new MethodSignature(Echo.class.getMethod("echoBack", new Class[] {String.class, String.class}))));
+ assertFalse(sig.equals(new MethodSignature(Echo.class.getMethod("echo", new Class[] {}))));
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/CountingProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/CountingProvider.java
new file mode 100644
index 0000000..ae4d3e6
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/CountingProvider.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider;
+
+import org.apache.commons.proxy.ObjectProvider;
+
+/**
+ * @author James Carman
+ * @since 1.0
+ */
+public class CountingProvider extends ProviderDecorator
+{
+//**********************************************************************************************************************
+// Fields
+//**********************************************************************************************************************
+
+ private int count = 0;
+
+//**********************************************************************************************************************
+// Constructors
+//**********************************************************************************************************************
+
+ public CountingProvider( ObjectProvider inner )
+ {
+ super(inner);
+ }
+
+//**********************************************************************************************************************
+// ObjectProvider Implementation
+//**********************************************************************************************************************
+
+
+ public synchronized Object getObject()
+ {
+ count++;
+ return super.getObject();
+ }
+
+//**********************************************************************************************************************
+// Getter/Setter Methods
+//**********************************************************************************************************************
+
+ public synchronized int getCount()
+ {
+ return count;
+ }
+}
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/TestBeanProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/TestBeanProvider.java
new file mode 100644
index 0000000..8973bfa
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/TestBeanProvider.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider;
+
+import org.apache.commons.proxy.exception.ObjectProviderException;
+import org.apache.commons.proxy.util.AbstractTestCase;
+
+public class TestBeanProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testAbstractBeanClass()
+ {
+ try
+ {
+ final BeanProvider p = new BeanProvider();
+ p.setBeanClass(Number.class);
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testNonAccessibleConstructor()
+ {
+ try
+ {
+ new BeanProvider(MyBean.class).getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testSerialization()
+ {
+ assertSerializable(new BeanProvider(MyBean.class));
+ }
+
+ public void testWithNullBeanClass()
+ {
+ try
+ {
+ final BeanProvider p = new BeanProvider();
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+//**********************************************************************************************************************
+// Inner Classes
+//**********************************************************************************************************************
+
+ public static class MyBean
+ {
+ private MyBean()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/TestCloningProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/TestCloningProvider.java
new file mode 100644
index 0000000..adac321
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/TestCloningProvider.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider;
+
+import org.apache.commons.proxy.exception.ObjectProviderException;
+import org.apache.commons.proxy.util.AbstractTestCase;
+
+import java.util.Date;
+
+public class TestCloningProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testSerialization()
+ {
+ assertSerializable(new CloningProvider(new Date()));
+ }
+
+ public void testValidCloneable()
+ {
+ final Date now = new Date();
+ final CloningProvider provider = new CloningProvider(now);
+ final Date clone1 = ( Date ) provider.getObject();
+ assertEquals(now, clone1);
+ assertNotSame(now, clone1);
+ final Date clone2 = ( Date ) provider.getObject();
+ assertEquals(now, clone2);
+ assertNotSame(now, clone2);
+ assertNotSame(clone2, clone1);
+ }
+
+ public void testWithExceptionThrown()
+ {
+ final CloningProvider provider = new CloningProvider(new ExceptionCloneable());
+ try
+ {
+ provider.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testWithInvalidCloneable()
+ {
+ final CloningProvider provider = new CloningProvider(new InvalidCloneable());
+ try
+ {
+ provider.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testWithPrivateCloneMethod()
+ {
+ final CloningProvider provider = new CloningProvider(new PrivateCloneable());
+ try
+ {
+ provider.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+//**********************************************************************************************************************
+// Inner Classes
+//**********************************************************************************************************************
+
+ public static class ExceptionCloneable implements Cloneable
+ {
+ public Object clone()
+ {
+ throw new RuntimeException("No clone for you!");
+ }
+ }
+
+ public static class InvalidCloneable implements Cloneable
+ {
+ }
+
+ public static class PrivateCloneable implements Cloneable
+ {
+ protected Object clone()
+ {
+ return this;
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/TestConstantProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/TestConstantProvider.java
new file mode 100644
index 0000000..8c4eee3
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/TestConstantProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider;
+
+import org.apache.commons.proxy.util.AbstractTestCase;
+
+/**
+ * @since 1.0
+ */
+public class TestConstantProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testGetObject() throws Exception
+ {
+ final String s = "Hello, World!";
+ final ConstantProvider provider = new ConstantProvider(s);
+ assertSame(s, provider.getObject());
+ }
+
+ public void testSerialization()
+ {
+ assertSerializable(new ConstantProvider("Hello, World!"));
+ }
+}
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/TestNullProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/TestNullProvider.java
new file mode 100644
index 0000000..12f59f5
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/TestNullProvider.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider;
+
+import org.apache.commons.proxy.util.AbstractTestCase;
+
+/**
+ * @author James Carman
+ * @since 1.0
+ */
+public class TestNullProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testGetObject()
+ {
+ final NullProvider provider = new NullProvider();
+ assertNull(provider.getObject());
+ }
+
+ public void testSerialization()
+ {
+ assertSerializable(new NullProvider());
+ }
+}
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestBurlapProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestBurlapProvider.java
new file mode 100644
index 0000000..f3dcc3a
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestBurlapProvider.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider.remoting;
+
+import org.apache.commons.proxy.exception.ObjectProviderException;
+import org.apache.commons.proxy.util.AbstractTestCase;
+import org.apache.commons.proxy.util.Echo;
+
+public class TestBurlapProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testSerialization()
+ {
+ final BurlapProvider p = new BurlapProvider();
+ p.setServiceInterface(Echo.class);
+ p.setUrl("a malformed URL");
+ assertSerializable(p);
+ }
+
+ public void testWithMalformedUrl()
+ {
+ try
+ {
+ final BurlapProvider p = new BurlapProvider(Echo.class, "a malformed URL");
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testWithMalformedUrlBean()
+ {
+ try
+ {
+ final BurlapProvider p = new BurlapProvider();
+ p.setServiceInterface(Echo.class);
+ p.setUrl("a malformed URL");
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestHessianProvider.java b/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestHessianProvider.java
new file mode 100644
index 0000000..e002b90
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/proxy/provider/remoting/TestHessianProvider.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.provider.remoting;
+
+import org.apache.commons.proxy.exception.ObjectProviderException;
+import org.apache.commons.proxy.util.AbstractTestCase;
+import org.apache.commons.proxy.util.Echo;
+
+public class TestHessianProvider extends AbstractTestCase
+{
+//**********************************************************************************************************************
+// Other Methods
+//**********************************************************************************************************************
+
+ public void testSerialization()
+ {
+ final HessianProvider p = new HessianProvider();
+ p.setServiceInterface(Echo.class);
+ p.setUrl("a malformed URL");
+ assertSerializable(p);
+ }
+
+ public void testWithMalformedUrl()
+ {
+ try
+ {
+ final HessianProvider p = new HessianProvider(Echo.class, "a malformed URL");
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+
+ public void testWithMalformedUrlBean()
+ {
+ try
+ {
+ final HessianProvider p = new HessianProvider();
+ p.setServiceInterface(Echo.class);
+ p.setUrl("a malformed URL");
+ p.getObject();
+ fail();
+ }
+ catch( ObjectProviderException e )
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/test/resources/log4j.properties b/core/src/test/resources/log4j.properties
similarity index 100%
rename from src/test/resources/log4j.properties
rename to core/src/test/resources/log4j.properties
diff --git a/javassist/pom.xml b/javassist/pom.xml
index 743c2d4..efe8297 100644
--- a/javassist/pom.xml
+++ b/javassist/pom.xml
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>commons-proxy</artifactId>
+ <artifactId>commons-proxy-parent</artifactId>
<groupId>org.apache.commons</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
@@ -14,7 +14,7 @@
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -24,7 +24,7 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
diff --git a/jdk/pom.xml b/jdk/pom.xml
index 9893f00..3e5c4fb 100644
--- a/jdk/pom.xml
+++ b/jdk/pom.xml
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
- <artifactId>commons-proxy</artifactId>
+ <artifactId>commons-proxy-parent</artifactId>
<groupId>org.apache.commons</groupId>
<version>2.0-SNAPSHOT</version>
</parent>
@@ -14,12 +14,12 @@
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>commons-proxy-core</artifactId>
+ <artifactId>commons-proxy</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
diff --git a/pom.xml b/pom.xml
index 886a58c..40edaa9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,9 +28,9 @@
<parent>
<groupId>org.apache.commons</groupId>
<artifactId>commons-parent</artifactId>
- <version>16</version>
+ <version>17</version>
</parent>
- <artifactId>commons-proxy</artifactId>
+ <artifactId>commons-proxy-parent</artifactId>
<version>2.0-SNAPSHOT</version>
<name>Commons Proxy</name>
<description>Java library for dynamic proxying</description>