// Path: src/main/java/net/ozwolf/mockserver/raml/internal/domain/BodySpecification.java
// public interface BodySpecification {
//     MediaType getContentType();
// 
//     ValidationErrors validate(String body);
// }
// 
// Path: src/main/java/net/ozwolf/mockserver/raml/internal/domain/ValidationErrors.java
// public class ValidationErrors {
//     private final List<String> messages;
// 
//     public ValidationErrors() {
//         this.messages = newArrayList();
//     }
// 
//     public void addMessage(String error, Object... formattedParameters) {
//         this.messages.add(String.format(error, formattedParameters));
//     }
// 
//     public void combineWith(ValidationErrors errors) {
//         this.messages.addAll(errors.getMessages());
//     }
// 
//     public boolean isInError() {
//         return !this.messages.isEmpty();
//     }
// 
//     public List<String> getMessages() {
//         return messages;
//     }
// }
// 
// Path: src/main/java/net/ozwolf/mockserver/raml/internal/validator/body/content/JsonContentValidator.java
// public class JsonContentValidator {
//     private final String bodyType;
// 
//     public JsonContentValidator(String bodyType) {
//         this.bodyType = bodyType;
//     }
// 
//     public ValidationErrors validate(String schema, String requestBody) {
//         ValidationErrors errors = new ValidationErrors();
// 
//         try {
//             JsonNode schemaNode = JsonLoader.fromString(schema);
//             JsonNode dataNode = JsonLoader.fromString(requestBody);
// 
//             ProcessingReport report = JsonSchemaFactory.byDefault().getJsonSchema(schemaNode).validate(dataNode);
// 
//             if (!report.isSuccess())
//                 report.iterator().forEachRemaining(m -> errors.addMessage("[ %s ] [ body ] %s", bodyType, m.getMessage()));
//         } catch (Exception e) {
//             errors.addMessage("[ %s ] [ body ] Unexpected error of [ %s ] while validating JSON content", bodyType, e.getMessage());
//         }
//         return errors;
//     }
// }


import net.ozwolf.mockserver.raml.internal.domain.BodySpecification;
import net.ozwolf.mockserver.raml.internal.domain.ValidationErrors;
import net.ozwolf.mockserver.raml.internal.validator.body.content.JsonContentValidator;
import org.raml.model.MimeType;
import javax.ws.rs.core.MediaType;
package net.ozwolf.mockserver.raml.internal.domain.body;



public class JsonBodySpecification implements BodySpecification {
    private final String bodyType;
    private final MimeType mimeType;

    public JsonBodySpecification(String bodyType, MimeType mimeType) {
        this.bodyType = bodyType;
        this.mimeType = mimeType;
    }

// Path: src/main/java/net/ozwolf/mockserver/raml/internal/domain/BodySpecification.java
// public interface BodySpecification {
//     MediaType getContentType();
// 
//     ValidationErrors validate(String body);
// }
// 
// Path: src/main/java/net/ozwolf/mockserver/raml/internal/domain/ValidationErrors.java
// public class ValidationErrors {
//     private final List<String> messages;
// 
//     public ValidationErrors() {
//         this.messages = newArrayList();
//     }
// 
//     public void addMessage(String error, Object... formattedParameters) {
//         this.messages.add(String.format(error, formattedParameters));
//     }
// 
//     public void combineWith(ValidationErrors errors) {
//         this.messages.addAll(errors.getMessages());
//     }
// 
//     public boolean isInError() {
//         return !this.messages.isEmpty();
//     }
// 
//     public List<String> getMessages() {
//         return messages;
//     }
// }
// 
// Path: src/main/java/net/ozwolf/mockserver/raml/internal/validator/body/content/JsonContentValidator.java
// public class JsonContentValidator {
//     private final String bodyType;
// 
//     public JsonContentValidator(String bodyType) {
//         this.bodyType = bodyType;
//     }
// 
//     public ValidationErrors validate(String schema, String requestBody) {
//         ValidationErrors errors = new ValidationErrors();
// 
//         try {
//             JsonNode schemaNode = JsonLoader.fromString(schema);
//             JsonNode dataNode = JsonLoader.fromString(requestBody);
// 
//             ProcessingReport report = JsonSchemaFactory.byDefault().getJsonSchema(schemaNode).validate(dataNode);
// 
//             if (!report.isSuccess())
//                 report.iterator().forEachRemaining(m -> errors.addMessage("[ %s ] [ body ] %s", bodyType, m.getMessage()));
//         } catch (Exception e) {
//             errors.addMessage("[ %s ] [ body ] Unexpected error of [ %s ] while validating JSON content", bodyType, e.getMessage());
//         }
//         return errors;
//     }
// }


// Path: src/main/java/net/ozwolf/mockserver/raml/internal/domain/body/JsonBodySpecification.java
import net.ozwolf.mockserver.raml.internal.domain.BodySpecification;
import net.ozwolf.mockserver.raml.internal.domain.ValidationErrors;
import net.ozwolf.mockserver.raml.internal.validator.body.content.JsonContentValidator;
import org.raml.model.MimeType;
import javax.ws.rs.core.MediaType;

package net.ozwolf.mockserver.raml.internal.domain.body;



public class JsonBodySpecification implements BodySpecification {
    private final String bodyType;
    private final MimeType mimeType;

    public JsonBodySpecification(String bodyType, MimeType mimeType) {
        this.bodyType = bodyType;
        this.mimeType = mimeType;
    }

    @Override