if (!(consumerParameters.getCarrierTechnologyParameters() instanceof RestClientCarrierTechnologyParameters)) {
final String errorMessage =
"specified consumer properties are not applicable to REST client consumer (" + this.name + ")";
- LOGGER.warn(errorMessage);
throw new ApexEventException(errorMessage);
}
restConsumerProperties =
final String errorMessage = "specified HTTP method of \"" + restConsumerProperties.getHttpMethod()
+ "\" is invalid, only HTTP method \"GET\" "
+ "is supported for event reception on REST client consumer (" + this.name + ")";
- LOGGER.warn(errorMessage);
throw new ApexEventException(errorMessage);
}
final String errorMessage = "reception of event from URL \"" + restConsumerProperties.getUrl()
+ "\" failed with status code " + response.getStatus() + " and message \""
+ response.readEntity(String.class) + "\"";
- LOGGER.warn(errorMessage);
throw new ApexEventRuntimeException(errorMessage);
}
/*-
* ============LICENSE_START=======================================================
* Copyright (C) 2016-2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2019-2020 Nordix Foundation.
+ * Modifications Copyright (C) 2019-2021 Nordix Foundation.
* Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
* Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
* ================================================================================
import java.util.Optional;
import java.util.Properties;
import java.util.Set;
+import java.util.regex.Pattern;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
// The REST carrier properties
private RestClientCarrierTechnologyParameters restProducerProperties;
+ private Pattern httpCodeFilterPattern = null;
+
/**
* {@inheritDoc}.
*/
if (!(producerParameters.getCarrierTechnologyParameters() instanceof RestClientCarrierTechnologyParameters)) {
final String errorMessage =
"specified producer properties are not applicable to REST client producer (" + this.name + ")";
- LOGGER.warn(errorMessage);
throw new ApexEventException(errorMessage);
}
restProducerProperties =
(RestClientCarrierTechnologyParameters) producerParameters.getCarrierTechnologyParameters();
+ this.httpCodeFilterPattern = Pattern.compile(restProducerProperties.getHttpCodeFilter());
+
// Check if the HTTP method has been set
if (restProducerProperties.getHttpMethod() == null) {
restProducerProperties.setHttpMethod(RestPluginCarrierTechnologyParameters.HttpMethod.POST);
final String errorMessage = "specified HTTP method of \"" + restProducerProperties.getHttpMethod()
+ "\" is invalid, only HTTP methods \"POST\" and \"PUT\" are supported "
+ "for event sending on REST client producer (" + this.name + ")";
- LOGGER.warn(errorMessage);
throw new ApexEventException(errorMessage);
}
NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, untaggedUrl, response.readEntity(String.class));
- // Check that the request worked
- if (response.getStatus() != Response.Status.OK.getStatusCode()) {
+
+ // Match the return code
+ var isPass = httpCodeFilterPattern.matcher(String.valueOf(response.getStatus()));
+
+ // Check that status code
+ if (!isPass.matches()) {
final String errorMessage = "send of event to URL \"" + untaggedUrl + "\" using HTTP \""
+ restProducerProperties.getHttpMethod() + "\" failed with status code " + response.getStatus();
throw new ApexEventRuntimeException(errorMessage);
arcp.stop();
}
+ @Test
+ public void testApexRestClientProducerPostEventAccepted() throws ApexEventException {
+ ApexRestClientProducer arcp = new ApexRestClientProducer();
+ assertNotNull(arcp);
+
+ EventHandlerParameters producerParameters = new EventHandlerParameters();
+ RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
+ producerParameters.setCarrierTechnologyParameters(rcctp);
+
+ rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
+ arcp.init("RestClientConsumer", producerParameters);
+ assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
+ assertEquals("RestClientConsumer", arcp.getName());
+
+ rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
+ Properties properties = new Properties();
+ properties.put("tag", "exist");
+ properties.put("key", "that");
+ Mockito.doReturn(Response.Status.ACCEPTED.getStatusCode()).when(responseMock).getStatus();
+ Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
+ Mockito.doReturn(builderMock).when(targetMock).request("application/json");
+ Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
+ Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
+ arcp.setClient(httpClientMock);
+
+ arcp.sendEvent(123, properties, "EventName", "This is an ACCEPTED Event");
+ arcp.stop();
+ }
+
@Test
public void testApexRestClientProducerPostEventCache() throws ApexEventException {
ApexRestClientProducer arcp = new ApexRestClientProducer();