Skip to content
This repository was archived by the owner on Aug 13, 2020. It is now read-only.

Commit 06f6eb6

Browse files
authored
Merge pull request #765 from CJSCommonPlatform/add-blacklisting-of-commands
Allow contexts to be able to blacklist the handling of certain commands
2 parents fd0ab61 + f510e3a commit 06f6eb6

23 files changed

+455
-43
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ All notable changes to this project will be documented in this file, which follo
33
on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to
44
[Semantic Versioning](http://semver.org/).
55

6-
76
## [Unreleased]
87

8+
## [6.0.10] - 2018-08-28
9+
### Added
10+
- JMX SystemCommands can now be disabled for a context
11+
912
## [6.0.9] - 2018-08-21
1013
### Fixed
1114
- JsonSchemaValidationMatcher now supports yaml/json/schema location

core/src/main/java/uk/gov/justice/services/core/json/FileBasedJsonSchemaValidator.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.everit.json.schema.Schema;
1010
import org.everit.json.schema.ValidationException;
1111
import org.json.JSONObject;
12-
import org.slf4j.Logger;
1312

1413
/**
1514
* Service for validating JSON payloads against a schema.
@@ -20,13 +19,13 @@ public class FileBasedJsonSchemaValidator {
2019
private final Map<String, Schema> schemas = new ConcurrentHashMap<>();
2120

2221
@Inject
23-
Logger logger;
22+
private JsonSchemaLoader jsonSchemaLoader;
2423

2524
@Inject
26-
JsonSchemaLoader jsonSchemaLoader;
25+
private PayloadExtractor payloadExtractor;
2726

2827
@Inject
29-
PayloadExtractor payloadExtractor;
28+
private SchemaValidationErrorMessageGenerator schemaValidationErrorMessageGenerator;
3029

3130
/**
3231
* Validate a JSON payload against the correct schema for the given message type name. If the
@@ -36,13 +35,14 @@ public class FileBasedJsonSchemaValidator {
3635
* @param actionName the message type name
3736
*/
3837
public void validateWithoutSchemaCatalog(final String envelopeJson, final String actionName) {
39-
logger.debug("Falling back to file based schema lookup, no catalog schema found for: {}", actionName);
4038
final JSONObject payload = payloadExtractor.extractPayloadFrom(envelopeJson);
4139

4240
try {
4341
schemaOf(actionName).validate(payload);
44-
} catch (final ValidationException ex) {
45-
throw new JsonSchemaValidationException(ex.getMessage(), ex);
42+
} catch (final ValidationException e) {
43+
throw new JsonSchemaValidationException(
44+
schemaValidationErrorMessageGenerator.generateErrorMessage(e),
45+
e);
4646
}
4747
}
4848

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package uk.gov.justice.services.core.json;
2+
3+
import static java.lang.String.format;
4+
5+
import java.util.List;
6+
7+
import org.everit.json.schema.ValidationException;
8+
9+
public class SchemaValidationErrorMessageGenerator {
10+
11+
private static final String ERROR_MASSAGE_FORMAT = "Json validation failed with %d violation(s): %s. Errors: %s. Violated schema id: '%s'. Location: '%s'";
12+
13+
public String generateErrorMessage(final ValidationException e) {
14+
15+
final int violationCount = e.getViolationCount();
16+
final String errorMessage = e.getErrorMessage();
17+
final List<String> allMessages = e.getAllMessages();
18+
final String id = e.getViolatedSchema().getId();
19+
final String schemaLocation = e.getSchemaLocation();
20+
21+
return format(ERROR_MASSAGE_FORMAT, violationCount, errorMessage, allMessages, id, schemaLocation);
22+
}
23+
}

core/src/test/java/uk/gov/justice/services/core/enveloper/spi/DefaultEnveloperProviderTest.java renamed to core/src/test/java/uk/gov/justice/services/core/enveloper/spi/DefaultEnveloperProviderIT.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import uk.gov.justice.services.core.json.JsonSchemaLoader;
4444
import uk.gov.justice.services.core.json.PayloadExtractor;
4545
import uk.gov.justice.services.core.json.SchemaCatalogAwareJsonSchemaValidator;
46+
import uk.gov.justice.services.core.json.SchemaValidationErrorMessageGenerator;
4647
import uk.gov.justice.services.core.mapping.ActionNameToMediaTypesMappingObserver;
4748
import uk.gov.justice.services.core.mapping.DefaultMediaTypesMappingCache;
4849
import uk.gov.justice.services.core.mapping.DefaultNameToMediaTypeConverter;
@@ -73,7 +74,7 @@
7374
import org.junit.runner.RunWith;
7475

7576
@RunWith(ApplicationComposer.class)
76-
public class DefaultEnveloperProviderTest {
77+
public class DefaultEnveloperProviderIT {
7778

7879
private static final String TEST_EVENT_NAME = "test.event.something-happened";
7980

@@ -143,7 +144,9 @@ public class DefaultEnveloperProviderTest {
143144
MediaTypesMappingCacheInitialiser.class,
144145
SchemaIdMappingCacheInitialiser.class,
145146
DefaultEnveloper.class,
146-
ObjectMapperProducer.class
147+
ObjectMapperProducer.class,
148+
149+
SchemaValidationErrorMessageGenerator.class
147150
})
148151
public WebApp war() {
149152
return new WebApp()
@@ -173,7 +176,7 @@ public void shouldDelegateToDefaultEnveloperFromCdiToEnvelopeWithMetadateFrom()
173176
new UtcClock(),
174177
new ObjectToJsonValueConverter(new ObjectMapperProducer().objectMapper()));
175178

176-
enveloper.register(new EventFoundEvent(DefaultEnveloperProviderTest.TestEvent.class, TEST_EVENT_NAME));
179+
enveloper.register(new EventFoundEvent(DefaultEnveloperProviderIT.TestEvent.class, TEST_EVENT_NAME));
177180

178181
final Metadata metadata = createMetadata();
179182
final TestPojo payload = new TestPojo(TEST_EVENT_NAME);

core/src/test/java/uk/gov/justice/services/core/it/AllEventsHandlerIT.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import uk.gov.justice.services.core.json.JsonSchemaLoader;
5151
import uk.gov.justice.services.core.json.PayloadExtractor;
5252
import uk.gov.justice.services.core.json.SchemaCatalogAwareJsonSchemaValidator;
53+
import uk.gov.justice.services.core.json.SchemaValidationErrorMessageGenerator;
5354
import uk.gov.justice.services.core.mapping.ActionNameToMediaTypesMappingObserver;
5455
import uk.gov.justice.services.core.mapping.DefaultMediaTypesMappingCache;
5556
import uk.gov.justice.services.core.mapping.DefaultNameToMediaTypeConverter;
@@ -157,7 +158,9 @@ public class AllEventsHandlerIT {
157158
EnvelopeInspector.class,
158159
DummyJsonSchemaValidator.class,
159160
MediaTypesMappingCacheInitialiser.class,
160-
SchemaIdMappingCacheInitialiser.class
161+
SchemaIdMappingCacheInitialiser.class,
162+
163+
SchemaValidationErrorMessageGenerator.class
161164
})
162165
public WebApp war() {
163166
return new WebApp()

core/src/test/java/uk/gov/justice/services/core/it/CustomServiceComponentHandlerIT.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import uk.gov.justice.services.core.json.JsonSchemaLoader;
5353
import uk.gov.justice.services.core.json.PayloadExtractor;
5454
import uk.gov.justice.services.core.json.SchemaCatalogAwareJsonSchemaValidator;
55+
import uk.gov.justice.services.core.json.SchemaValidationErrorMessageGenerator;
5556
import uk.gov.justice.services.core.mapping.ActionNameToMediaTypesMappingObserver;
5657
import uk.gov.justice.services.core.mapping.DefaultMediaTypesMappingCache;
5758
import uk.gov.justice.services.core.mapping.DefaultNameToMediaTypeConverter;
@@ -158,7 +159,9 @@ public class CustomServiceComponentHandlerIT {
158159
DummyJsonSchemaValidator.class,
159160

160161
MediaTypesMappingCacheInitialiser.class,
161-
SchemaIdMappingCacheInitialiser.class
162+
SchemaIdMappingCacheInitialiser.class,
163+
164+
SchemaValidationErrorMessageGenerator.class
162165

163166
})
164167
public WebApp war() {

core/src/test/java/uk/gov/justice/services/core/it/EventHandlerIT.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import uk.gov.justice.services.core.json.JsonSchemaLoader;
5555
import uk.gov.justice.services.core.json.PayloadExtractor;
5656
import uk.gov.justice.services.core.json.SchemaCatalogAwareJsonSchemaValidator;
57+
import uk.gov.justice.services.core.json.SchemaValidationErrorMessageGenerator;
5758
import uk.gov.justice.services.core.mapping.ActionNameToMediaTypesMappingObserver;
5859
import uk.gov.justice.services.core.mapping.DefaultMediaTypesMappingCache;
5960
import uk.gov.justice.services.core.mapping.DefaultNameToMediaTypeConverter;
@@ -165,7 +166,9 @@ public class EventHandlerIT {
165166
DummyJsonSchemaValidator.class,
166167

167168
MediaTypesMappingCacheInitialiser.class,
168-
SchemaIdMappingCacheInitialiser.class
169+
SchemaIdMappingCacheInitialiser.class,
170+
171+
SchemaValidationErrorMessageGenerator.class
169172
})
170173
public WebApp war() {
171174
return new WebApp()

core/src/test/java/uk/gov/justice/services/core/it/SenderRequesterHandlerIT.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import uk.gov.justice.services.core.json.JsonSchemaLoader;
4848
import uk.gov.justice.services.core.json.PayloadExtractor;
4949
import uk.gov.justice.services.core.json.SchemaCatalogAwareJsonSchemaValidator;
50+
import uk.gov.justice.services.core.json.SchemaValidationErrorMessageGenerator;
5051
import uk.gov.justice.services.core.mapping.ActionNameToMediaTypesMappingObserver;
5152
import uk.gov.justice.services.core.mapping.DefaultMediaTypesMappingCache;
5253
import uk.gov.justice.services.core.mapping.DefaultNameToMediaTypeConverter;
@@ -170,7 +171,9 @@ public class SenderRequesterHandlerIT {
170171
DummyJsonSchemaValidator.class,
171172

172173
MediaTypesMappingCacheInitialiser.class,
173-
SchemaIdMappingCacheInitialiser.class
174+
SchemaIdMappingCacheInitialiser.class,
175+
176+
SchemaValidationErrorMessageGenerator.class
174177
})
175178
public WebApp war() {
176179
return new WebApp()

core/src/test/java/uk/gov/justice/services/core/json/FileBasedJsonSchemaValidatorTest.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
@RunWith(MockitoJUnitRunner.class)
2626
public class FileBasedJsonSchemaValidatorTest {
2727

28-
@Mock
29-
private Logger logger;
30-
3128
@Mock
3229
private JsonSchemaLoader jsonSchemaLoader;
3330

3431
@Mock
3532
private PayloadExtractor payloadExtractor;
3633

34+
@Mock
35+
private SchemaValidationErrorMessageGenerator schemaValidationErrorMessageGenerator;
36+
3737
@InjectMocks
3838
private FileBasedJsonSchemaValidator fileBasedJsonSchemaValidator;
3939

@@ -52,27 +52,30 @@ public void shouldLoadASchemaFromTheFileSystemByItsNameAndValidate() throws Exce
5252
fileBasedJsonSchemaValidator.validateWithoutSchemaCatalog(envelopeJson, actionName);
5353

5454
verify(schema).validate(payload);
55-
verify(logger).debug("Falling back to file based schema lookup, no catalog schema found for: {}", actionName);
5655
}
5756

5857
@Test
5958
public void shouldThrowExceptionIfSchemaValidationFails() throws Exception {
6059

6160
final String actionName = "example.action-name";
6261
final String envelopeJson = "{\"envelope\": \"json\"}";
62+
final String errorMessage = "error message";
6363

6464
final JSONObject payload = mock(JSONObject.class);
6565
final Schema schema = mock(Schema.class);
66+
final ValidationException validationException = mock(ValidationException.class);
6667

6768
when(payloadExtractor.extractPayloadFrom(envelopeJson)).thenReturn(payload);
6869
when(jsonSchemaLoader.loadSchema(actionName)).thenReturn(schema);
69-
doThrow(new ValidationException(schema, "", "", "")).when(schema).validate(payload);
70+
when(schemaValidationErrorMessageGenerator.generateErrorMessage(validationException)).thenReturn(errorMessage);
71+
doThrow(validationException).when(schema).validate(payload);
7072

7173
try {
7274
fileBasedJsonSchemaValidator.validateWithoutSchemaCatalog(envelopeJson, actionName);
7375
fail();
7476
} catch (final JsonSchemaValidationException e) {
75-
assertThat(e.getCause(), is(instanceOf(ValidationException.class)));
77+
assertThat(e.getMessage(), is(errorMessage));
78+
assertThat(e.getCause(), is(validationException));
7679
}
7780
}
7881
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package uk.gov.justice.services.core.json;
2+
3+
import static org.hamcrest.CoreMatchers.is;
4+
import static org.junit.Assert.assertThat;
5+
import static org.mockito.Mockito.mock;
6+
import static org.mockito.Mockito.when;
7+
8+
import org.everit.json.schema.Schema;
9+
import org.everit.json.schema.ValidationException;
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
import org.mockito.InjectMocks;
13+
import org.mockito.runners.MockitoJUnitRunner;
14+
15+
@RunWith(MockitoJUnitRunner.class)
16+
public class SchemaValidationErrorMessageGeneratorTest {
17+
18+
19+
@InjectMocks
20+
private SchemaValidationErrorMessageGenerator schemaValidationErrorMessageGenerator;
21+
22+
@Test
23+
public void shouldName() throws Exception {
24+
25+
final Schema violatedSchema = mock(Schema.class);
26+
27+
when(violatedSchema.getId()).thenReturn("schema id");
28+
29+
final ValidationException validationException = new ValidationException(
30+
violatedSchema,
31+
"error message",
32+
"don't care",
33+
"schemaLocation");
34+
35+
final String errorMessage = schemaValidationErrorMessageGenerator.generateErrorMessage(validationException);
36+
37+
assertThat(errorMessage, is("Json validation failed with 1 violation(s): error message. Errors: [#: error message]. Violated schema id: 'schema id'. Location: 'schemaLocation'"));
38+
}
39+
}

0 commit comments

Comments
 (0)