1

I am trying to write a helper class to get PactDslJsonBody from a Java Pojo directly. However, it fails to create nested Json Objects. Can someone explain me why?Below is my code :

HELPER CLASS CODE - used to convert input java pojo to PactDslJsonBody

public class PactDslHelper {

    private static PactDslJsonBody responseBody;

    public PactDslJsonBody getResponseBody() {
        return responseBody;
    }


    private PactDslJsonBody updateResponseBody(Class<?> clazz) {
        responseBody.object("yooyoo");
        Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {
            String fieldName = field.getName();
            System.out.println("fieldName is : = " + fieldName);
            System.out.println("fieldType Simple Name is : = " + field.getType().getSimpleName());
            switch (field.getType().getSimpleName()) {
            case "Integer":
                responseBody.integerType(fieldName);
                break;
            case "String":
                responseBody.stringType(fieldName);
                break;
            case "UUID":
                responseBody.uuid(fieldName);
                break;
            case "Boolean":
                responseBody.booleanType(fieldName);
                break;

            }
        }
        responseBody.closeObject();
        return responseBody;
    }

    public PactDslHelper(Class<?> clazz) {

        Field[] fields = clazz.getDeclaredFields();
        responseBody = new PactDslJsonBody();

        for (Field field : fields) {
            Class<?> fieldType = field.getType();
            String fieldName = field.getName();
            System.out.println("fieldName is : = " + fieldName);
            System.out.println("fieldType Simple Name is : = " + field.getType().getSimpleName());
            switch (field.getType().getSimpleName()) {
            case "Integer":
                responseBody.integerType(fieldName);
                break;
            case "String":
                responseBody.stringMatcher(fieldName,ApplicationConstants.REGEX_UUID);
                break;
            case "UUID":
                responseBody.uuid(fieldName);
                break;
            case "Boolean":
                responseBody.booleanType(fieldName);
                break;
            default:
                if (!fieldType.isPrimitive()) {
                    responseBody = updateResponseBody(fieldType);
                }
            }
        }

    }

SNIPPET OF HOW TO USE THIS CLASS:

responseBody_dto = new PactDslHelper(ProductFrontEntity.class);

TEST WHICH IS FAILING : INPUT CLASS :

public class ProductFrontEntity {
        private String storeId;
        private String productId;
        private String code;
        private ProductIdentificationMap productIdentificationMap;
        }

public class ProductIdentificationMap {
    private String jAN;
    }

EXPECTED RESULT:

{
 productId:***,
 code:***,
 productIdentificationMap{
                          jan:***
                }
}

ACTUAL RESULT:

{
 productId:***,
 code:***,
 jan:***
}
PaChSu
  • 297
  • 3
  • 13

1 Answers1

0

Could it be because your own code is faulty? You don't seem to open a new object inside of your object container object which you don't close properly at the end, hence why everything is flat.

If you're using java 8, I'd really recommend you use the Lambda version of the DSL as it's easier to understand.

Please try to keep this forum open for Pact specific question and not questions around why your own code doesn't function.

J_A_X
  • 12,857
  • 1
  • 25
  • 31