Skip to content

Commit b0d0ed4

Browse files
committed
Fix PojoCodecProvider handling of registered packages
Ensure registered packages and automatic codecs work in the same manner. JAVA-2799
1 parent 89cbb64 commit b0d0ed4

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

bson/src/main/org/bson/codecs/pojo/PojoCodecProvider.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,9 @@ public <T> Codec<T> get(final Class<T> clazz, final CodecRegistry registry) {
7171
@SuppressWarnings("unchecked")
7272
private <T> PojoCodec<T> getPojoCodec(final Class<T> clazz, final CodecRegistry registry) {
7373
ClassModel<T> classModel = (ClassModel<T>) classModels.get(clazz);
74-
if (classModel != null || (clazz.getPackage() != null && packages.contains(clazz.getPackage().getName()))) {
75-
if (classModel == null) {
76-
classModel = createClassModel(clazz, conventions);
77-
discriminatorLookup.addClassModel(classModel);
78-
}
74+
if (classModel != null) {
7975
return new PojoCodecImpl<T>(classModel, registry, propertyCodecProviders, discriminatorLookup);
80-
} else if (automatic) {
76+
} else if (automatic || (clazz.getPackage() != null && packages.contains(clazz.getPackage().getName()))) {
8177
try {
8278
classModel = createClassModel(clazz, conventions);
8379
} catch (IllegalStateException e) {

bson/src/test/unit/org/bson/codecs/pojo/PojoRoundTripTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,14 @@ public static Collection<Object[]> data() {
371371
for (TestData testData : testCases()) {
372372
data.add(new Object[]{format("%s", testData.getName()), testData.getModel(), testData.getJson(), testData.getBuilder()});
373373
data.add(new Object[]{format("%s [Auto]", testData.getName()), testData.getModel(), testData.getJson(), AUTOMATIC_BUILDER});
374+
data.add(new Object[]{format("%s [Package]", testData.getName()), testData.getModel(), testData.getJson(), PACKAGE_BUILDER});
374375
}
375376
return data;
376377
}
377378

378379
private static final PojoCodecProvider.Builder AUTOMATIC_BUILDER = PojoCodecProvider.builder().automatic(true);
380+
private static final PojoCodecProvider.Builder PACKAGE_BUILDER = PojoCodecProvider.builder().register("org.bson.codecs.pojo.entities",
381+
"org.bson.codecs.pojo.entities.conventions");
379382

380383
private static class TestData {
381384
private final String name;

0 commit comments

Comments
 (0)