Skip to content

Commit 2ea38b0

Browse files
authored
Test that cglib's Callback[] getCallbacks() is not Written (2.x) (#5356)
1 parent 28888a8 commit 2ea38b0

File tree

7 files changed

+147
-0
lines changed

7 files changed

+147
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.fasterxml.jackson.databind.ext;
2+
3+
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.newJsonMapper;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
6+
import java.util.Collections;
7+
import java.util.Map;
8+
9+
import org.hibernate.repackage.cglib.MockedHibernateCglibProxy;
10+
import org.junit.jupiter.api.Test;
11+
import org.springframework.cglib.proxy.MockedSpringCglibProxy;
12+
13+
import com.fasterxml.jackson.databind.ObjectMapper;
14+
15+
import net.sf.cglib.MockedNetCglibProxy;
16+
17+
// [databind#5354] Test for filtering out CGLIB-generated properties
18+
public class CglibFiltering5354Test
19+
{
20+
private final ObjectMapper MAPPER = newJsonMapper();
21+
22+
// https://github.com/FasterXML/jackson-databind/issues/5354
23+
@Test
24+
public void testWriteWithSpringCglibProxyDoesNotIncludeCallbacksProperty() throws Exception
25+
{
26+
MockedSpringCglibProxy mockedProxy = new MockedSpringCglibProxy("hello");
27+
String json = MAPPER.writeValueAsString(mockedProxy);
28+
Map<?, ?> properties = MAPPER.readValue(json, Map.class);
29+
assertEquals(properties.keySet(), Collections.singleton("propertyName"));
30+
}
31+
32+
// https://github.com/FasterXML/jackson-databind/issues/5354
33+
@Test
34+
public void testWriteWithHibernateCglibProxyDoesNotIncludeCallbacksProperty() throws Exception
35+
{
36+
MockedHibernateCglibProxy mockedProxy = new MockedHibernateCglibProxy("hello");
37+
String json = MAPPER.writeValueAsString(mockedProxy);
38+
Map<?, ?> properties = MAPPER.readValue(json, Map.class);
39+
assertEquals(properties.keySet(), Collections.singleton("propertyName"));
40+
}
41+
42+
// https://github.com/FasterXML/jackson-databind/issues/5354
43+
@Test
44+
public void testWriteWithNetCglibProxyDoesNotIncludeCallbacksProperty() throws Exception
45+
{
46+
MockedNetCglibProxy mockedProxy = new MockedNetCglibProxy("hello");
47+
String json = MAPPER.writeValueAsString(mockedProxy);
48+
Map<?, ?> properties = MAPPER.readValue(json, Map.class);
49+
assertEquals(properties.keySet(), Collections.singleton("propertyName"));
50+
}
51+
52+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package net.sf.cglib;
2+
3+
/**
4+
* A mock object to test if a method is returning cglib's
5+
* {@code Callback[] getCallbacks()} found on a cglib proxy object.
6+
* @author Rob Winch
7+
*/
8+
public class Callback {
9+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package net.sf.cglib;
2+
3+
/**
4+
* A mock Proxy object used to test writing a cglib proxy object.
5+
* @author Rob Winch
6+
*/
7+
public class MockedNetCglibProxy {
8+
9+
private final String propertyName;
10+
11+
public MockedNetCglibProxy(String propertyName) {
12+
this.propertyName = propertyName;
13+
}
14+
15+
public String getPropertyName() {
16+
return this.propertyName;
17+
}
18+
19+
public Callback[] getCallbacks() {
20+
return new Callback[] { new Callback(), new Callback() };
21+
}
22+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hibernate.repackage.cglib;
2+
3+
/**
4+
* A mock object to test if a method is returning Hibernate's
5+
* {@code Callback[] getCallbacks()} found on a cglib proxy object.
6+
* NOTE: Hibernate repackages the Callback interface to this location.
7+
* @author Rob Winch
8+
*/
9+
public class Callback {
10+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.hibernate.repackage.cglib;
2+
3+
/**
4+
* A mock Proxy object used to test writing a Hibernate cglib proxy object.
5+
* @author Rob Winch
6+
*/
7+
public class MockedHibernateCglibProxy {
8+
9+
private final String propertyName;
10+
11+
public MockedHibernateCglibProxy(String propertyName) {
12+
this.propertyName = propertyName;
13+
}
14+
15+
public String getPropertyName() {
16+
return this.propertyName;
17+
}
18+
19+
public Callback[] getCallbacks() {
20+
return new Callback[] { new Callback(), new Callback() };
21+
}
22+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.springframework.cglib.proxy;
2+
3+
/**
4+
* A mock object to test if a method is returning Spring Framework's
5+
* {@code Callback[] getCallbacks()} found on a cglib proxy object.
6+
* NOTE: Spring repackages the Callback interface to this location.
7+
* @author Rob Winch
8+
*/
9+
public class Callback {
10+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.springframework.cglib.proxy;
2+
3+
/**
4+
* A mock Proxy object used to test writing a Springframework cglib proxy object.
5+
* @author Rob Winch
6+
*/
7+
public class MockedSpringCglibProxy {
8+
9+
private final String propertyName;
10+
11+
public MockedSpringCglibProxy(String propertyName) {
12+
this.propertyName = propertyName;
13+
}
14+
15+
public String getPropertyName() {
16+
return this.propertyName;
17+
}
18+
19+
public Callback[] getCallbacks() {
20+
return new Callback[] { new Callback(), new Callback() };
21+
}
22+
}

0 commit comments

Comments
 (0)