Skip to content

Commit 29637a8

Browse files
committed
Added NoPbFieldsException
1 parent 12afd60 commit 29637a8

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.rumpf.proto.exception;
2+
3+
public class NoPbFieldsException extends RuntimeException {
4+
5+
private Class<?> clazz;
6+
7+
public NoPbFieldsException(Class<?> clazz) {
8+
this.clazz = clazz;
9+
}
10+
11+
public Class<?> getObjectClazz() {
12+
return clazz;
13+
}
14+
15+
@Override
16+
public String getMessage() {
17+
return String.format("Class \"%s\" does not contain any fields with @PbField annotation", clazz.getName());
18+
}
19+
}

src/main/java/com/rumpf/proto/mapper/PbObjectMapper.java

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.protobuf.CodedOutputStream;
55
import com.rumpf.proto.PbField;
66
import com.rumpf.proto.exception.DuplicateFieldNumberException;
7+
import com.rumpf.proto.exception.NoPbFieldsException;
78
import com.rumpf.proto.field.MessageField;
89
import com.rumpf.proto.field.MessageFieldFactory;
910

@@ -54,6 +55,10 @@ private void initMessageFields(Object object) {
5455
messageFields.put(mf.getFieldNumber(), mf);
5556
}
5657
}
58+
59+
if(messageFields.isEmpty()) {
60+
throw new NoPbFieldsException(object.getClass());
61+
}
5762
}
5863

5964
////////////////////////////////////////////////////
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.rumpf.exception;
2+
3+
import com.rumpf.proto.exception.NoPbFieldsException;
4+
import com.rumpf.proto.mapper.PbObjectMapper;
5+
import org.junit.jupiter.api.Assertions;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.nio.ByteBuffer;
10+
11+
public class NoPbFieldsTest {
12+
13+
private static PbObjectMapper mapper;
14+
15+
@BeforeAll
16+
public static void setup() {
17+
mapper = new PbObjectMapper();
18+
}
19+
20+
private static class SampleClass1 {
21+
22+
private String a;
23+
private String b;
24+
}
25+
26+
private static class SampleClass2 {
27+
28+
}
29+
30+
@Test
31+
public void duplicateFieldNumberTest1() {
32+
NoPbFieldsException ex = Assertions.assertThrows(
33+
NoPbFieldsException.class,
34+
() -> mapper.write(new SampleClass1(), ByteBuffer.allocate(1))
35+
);
36+
37+
Assertions.assertEquals(SampleClass1.class, ex.getObjectClazz(), "Unexpected Class<?> object returned");
38+
}
39+
40+
@Test
41+
public void duplicateFieldNumberTest2() {
42+
NoPbFieldsException ex = Assertions.assertThrows(
43+
NoPbFieldsException.class,
44+
() -> mapper.write(new SampleClass2(), ByteBuffer.allocate(1))
45+
);
46+
47+
Assertions.assertEquals(SampleClass2.class, ex.getObjectClazz(), "Unexpected Class<?> object returned");
48+
}
49+
}

0 commit comments

Comments
 (0)