Version used: 1.0.1
Source: maven repo
The bug is in line 97 of ReflectionUtils.java if (methodSource.getSuperclass() != Object.class) { //recursion stop condition
There should also be null check if (methodSource.getSuperclass() != Object.class && methodSource.getSuperclass() != null) {
I was trying to play around with PropertyMapping but I think that this is not the case.
I'm adding simple unit test:
package com.xyz.test.entityaudit;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.core.diff.Diff;
import org.javers.core.diff.changetype.ValueChange;
import org.javers.core.metamodel.annotation.Entity;
import org.javers.core.metamodel.annotation.Id;
import org.junit.Test;
/**
* @author nejct
*/
public class JaversTest {
@Test
public void simpleClassTest() {
// given
SimpleTestClass foo = new SimpleTestClass(1l, "Foo", new TestInterfaceImpl("Bar"));
SimpleTestClass bar = new SimpleTestClass(1l, "Bar", new TestInterfaceImpl("Foo"));
Javers javers = JaversBuilder.javers().build();
// when
Diff diff = javers.compare(foo, bar);
// then
assertTrue(diff.getChanges().size() == 2);
for(ValueChange change : diff.getChangesByType(ValueChange.class)) {
if (change.getProperty().getName().equals("testInterfaceProperty")) {
assertTrue(change.getLeft().equals("Bar"));
assertTrue(change.getRight().equals("Foo"));
} else if (change.getProperty().getName().equals("stringProperty")) {
assertTrue(change.getLeft().equals("Foo"));
assertTrue(change.getRight().equals("Bar"));
} else {
}
}
System.out.println(diff);
}
@Test
public void classWithInterfaceTest() {
// given
TestClassWithInterfaceProperty foo = new TestClassWithInterfaceProperty(1l, "Foo", new TestInterfaceImpl("Bar"));
TestClassWithInterfaceProperty bar = new TestClassWithInterfaceProperty(1l, "Bar", new TestInterfaceImpl("Foo"));
Javers javers = JaversBuilder.javers().build();
// when
Diff diff = javers.compare(foo, bar);
// then
assertTrue(diff.getChanges().size() == 2);
for(ValueChange change : diff.getChangesByType(ValueChange.class)) {
if (change.getProperty().getName().equals("testInterfaceProperty")) {
assertTrue(change.getLeft().equals("Bar"));
assertTrue(change.getRight().equals("Foo"));
} else if (change.getProperty().getName().equals("stringProperty")) {
assertTrue(change.getLeft().equals("Foo"));
assertTrue(change.getRight().equals("Bar"));
} else {
}
}
System.out.println(diff);
}
@Entity
public class SimpleTestClass {
@Id
private Long id;
private List<String> list = java.util.Arrays.asList("Foo", "Bar");
private String stringProperty;
private TestInterfaceImpl testInterface;
public SimpleTestClass(Long id, String stringProperty, TestInterfaceImpl testInterface) {
this.id = id;
this.stringProperty = stringProperty;
this.testInterface = testInterface;
}
}
@Entity
public class TestClassWithInterfaceProperty {
@Id
private Long id;
private List<String> list = java.util.Arrays.asList("Foo", "Bar");
private String string;
private TestInterface testInterface;
public TestClassWithInterfaceProperty(Long id, String string, TestInterfaceImpl testInterface) {
this.id = id;
this.string = string;
this.testInterface = testInterface;
}
}
interface TestInterface {
String getProperty();
}
public class TestInterfaceImpl implements TestInterface {
private String testInterfaceProperty;
public TestInterfaceImpl(String testInterfaceProperty) {
this.testInterfaceProperty = testInterfaceProperty;
}
@Override
public String getProperty() {
return "Foo";
}
}
}
EDIT: added updated test if you want to use it later.
The text was updated successfully, but these errors were encountered:
Version used: 1.0.1
Source: maven repo
The bug is in line 97 of ReflectionUtils.java
if (methodSource.getSuperclass() != Object.class) { //recursion stop condition
There should also be null check
if (methodSource.getSuperclass() != Object.class && methodSource.getSuperclass() != null) {
I was trying to play around with PropertyMapping but I think that this is not the case.
I'm adding simple unit test:
EDIT: added updated test if you want to use it later.
The text was updated successfully, but these errors were encountered: