Closed johngluck65 closed 8 years ago
I solved this by writing a filter that excludes classes if a field is of a given type. However, it seems to me that in order to be more useful, there should be a way to extend the Random generators to prevent problems such as that.
Thank you for raising the issue, I'll have confirmed the issue and it will be fixed in the next release.
Please download the latest release which addresses the issue raised.
It appears that OpenPojo is attempting generate a pojo Test for java.util.UUID. I'm not certain how to prevent this from happening.
I have a pojo that looks like this (fields were removed). As far as I can tell, this logic in DefaultRandomGenerator appears to be incorrect in that I'm uncertain as to why one would generate a pojo if you get here. Perhaps I'm mistaken.
At any rate, when I run the LessThan.compare, the lefthand array contains two longs, and the rightHand contains something that looks like class B[. I'm expecting it to contain a byte array.
I'm using version 0.8.1. please advise.
---------POJO-------------- package
import java.util.UUID;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true) public class User {
} }
My test code is below
package
import java.util.ArrayList; import java.util.Iterator; import java.util.List;
import org.junit.Before; import org.junit.Test;
import com.openpojo.reflection.PojoClass; import com.openpojo.reflection.PojoClassFilter; import com.openpojo.reflection.filters.FilterSyntheticClasses; import com.openpojo.reflection.impl.PojoClassFactory; import com.openpojo.validation.PojoValidator; import com.openpojo.validation.Validator; import com.openpojo.validation.ValidatorBuilder; import com.openpojo.validation.test.impl.GetterTester; import com.openpojo.validation.test.impl.SetterTester;
public class OpenPojoTest {
//private PojoClassFilter filter; protected String[] packageNames = new String[1]; //private List pojoClasses = new ArrayList();
private Validator pojoValidator;
public OpenPojoTest() { }
@Before public void setup() { pojoValidator = ValidatorBuilder.create() .with(new SetterTester(), new GetterTester()) .build(); // Get all classes recursively under package
}
@Test public void validate() {
} } package
import OpenPojoTest;
public class ClientOpenPojoTest extends OpenPojoTest {
public ClientOpenPojoTest() { packageNames[0] = "";
}
}
package
import java.util.UUID;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true) public class User {
} }
I am getting the following exception
com.openpojo.reflection.exception.ReflectionException: Failed to create instance for class [com.openpojo.reflection.impl.PojoClassImpl [clazz=class java.util.UUID, pojoFields=[PojoFieldImpl [field=private static final long java.util.UUID.serialVersionUID, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private final long java.util.UUID.mostSigBits, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private final long java.util.UUID.leastSigBits, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient int java.util.UUID.version, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient int java.util.UUID.variant, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient volatile long java.util.UUID.timestamp, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient int java.util.UUID.sequence, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient long java.util.UUID.node, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=private transient int java.util.UUID.hashCode, fieldGetter=null, fieldSetter=null], PojoFieldImpl [field=static final boolean java.util.UUID.$assertionsDisabled, fieldGetter=null, fieldSetter=null]], pojoMethods=[PojoMethodImpl [constructor=java.util.UUID args=[class [B] return=class java.util.UUID], PojoMethodImpl [constructor=java.util.UUID args=[long, long] return=class java.util.UUID], PojoMethodImpl [method=equals args=[class java.lang.Object] return=boolean], PojoMethodImpl [method=toString args=[] return=class java.lang.String], PojoMethodImpl [method=hashCode args=[] return=int], PojoMethodImpl [method=compareTo args=[class java.util.UUID] return=int], PojoMethodImpl [method=compareTo args=[class java.lang.Object] return=int], PojoMethodImpl [method=timestamp args=[] return=long], PojoMethodImpl [method=readObject args=[class java.io.ObjectInputStream] return=void], PojoMethodImpl [method=digits args=[long, int] return=class java.lang.String], PojoMethodImpl [method=variant args=[] return=int], PojoMethodImpl [method=version args=[] return=int], PojoMethodImpl [method=node args=[] return=long], PojoMethodImpl [method=randomUUID args=[] return=class java.util.UUID], PojoMethodImpl [method=nameUUIDFromBytes args=[class [B] return=class java.util.UUID], PojoMethodImpl [method=fromString args=[class java.lang.String] return=class java.util.UUID], PojoMethodImpl [method=getLeastSignificantBits args=[] return=long], PojoMethodImpl [method=getMostSignificantBits args=[] return=long], PojoMethodImpl [method=clockSequence args=[] return=int]]]] using constructor [PojoMethodImpl [constructor=java.util.UUID args=[class [B] return=class java.util.UUID]] at com.openpojo.reflection.exception.ReflectionException.getInstance(ReflectionException.java:53) at com.openpojo.reflection.construct.InstanceFactory.createInstance(InstanceFactory.java:233) at com.openpojo.reflection.construct.InstanceFactory.getLeastCompleteInstance(InstanceFactory.java:170) at com.openpojo.random.impl.DefaultRandomGenerator.doGenerate(DefaultRandomGenerator.java:62) at com.openpojo.random.RandomFactory.getRandomValue(RandomFactory.java:100) at com.openpojo.random.RandomFactory.getRandomValue(RandomFactory.java:108) at com.openpojo.validation.test.impl.SetterTester.run(SetterTester.java:43) at com.openpojo.validation.utils.ValidationHelper.runValidation(ValidationHelper.java:104) at com.openpojo.validation.impl.DefaultValidator.validate(DefaultValidator.java:46) at com.openpojo.validation.impl.DefaultValidator.validate(DefaultValidator.java:51) at com.openpojo.validation.impl.DefaultValidator.validate(DefaultValidator.java:57) at.OpenPojoTest.validate(OpenPojoTest.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: com.openpojo.reflection.exception.ReflectionException
at com.openpojo.reflection.exception.ReflectionException.getInstance(ReflectionException.java:53)
at com.openpojo.reflection.impl.PojoMethodImpl.invoke(PojoMethodImpl.java:86)
at com.openpojo.reflection.construct.InstanceFactory.doGetInstance(InstanceFactory.java:96)
at com.openpojo.reflection.construct.InstanceFactory.getInstance(InstanceFactory.java:81)
at com.openpojo.reflection.construct.InstanceFactory.createInstance(InstanceFactory.java:231)
... 34 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.openpojo.reflection.impl.PojoMethodImpl.invoke(PojoMethodImpl.java:78)
... 37 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 5
at java.util.UUID.(UUID.java:126)
... 42 more