From 94ee92559b051f2f82ed681f841f4f13016842ed Mon Sep 17 00:00:00 2001 From: "Determe, Sebastien (sd378r)" Date: Tue, 2 May 2017 03:53:18 -0700 Subject: [MSO-8] Second step of the rebase for MSO Second rebase containing additional features for MSO + total reworking of the BPMN structure + Notification flow can now be added at the end of some BPMN flows Change-Id: I7e937c7a0ba1593ca85e164a093f79c7e38b6ce0 Signed-off-by: Determe, Sebastien (sd378r) --- .../WebContent/META-INF/MANIFEST.MF | 4 + .../WEB-INF/jboss-deployment-structure.xml | 17 ++ .../WebContent/WEB-INF/jboss-web.xml | 3 + .../WebContent/WEB-INF/web.xml | 80 +++++++++ .../WebContent/check.html | 10 ++ adapters/mso-workflow-message-adapter/pom.xml | 76 +++++++++ .../adapters/workflowmessage/BPRestCallback.java | 178 +++++++++++++++++++++ .../workflowmessage/WMAdapterConstants.java | 30 ++++ .../workflowmessage/WMAdapterProperties.java | 89 +++++++++++ .../adapters/workflowmessage/WMAdapterRest.java | 140 ++++++++++++++++ .../adapters/workflowmessage/WMAdapterUtils.java | 48 ++++++ .../src/test/resources/logback-test.xml | 25 +++ 12 files changed, 700 insertions(+) create mode 100644 adapters/mso-workflow-message-adapter/WebContent/META-INF/MANIFEST.MF create mode 100644 adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-deployment-structure.xml create mode 100644 adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-web.xml create mode 100644 adapters/mso-workflow-message-adapter/WebContent/WEB-INF/web.xml create mode 100644 adapters/mso-workflow-message-adapter/WebContent/check.html create mode 100644 adapters/mso-workflow-message-adapter/pom.xml create mode 100644 adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java create mode 100644 adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterConstants.java create mode 100644 adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterProperties.java create mode 100644 adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java create mode 100644 adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java create mode 100644 adapters/mso-workflow-message-adapter/src/test/resources/logback-test.xml (limited to 'adapters/mso-workflow-message-adapter') diff --git a/adapters/mso-workflow-message-adapter/WebContent/META-INF/MANIFEST.MF b/adapters/mso-workflow-message-adapter/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..bbf7aa0cf9 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Dependencies: org.jboss.logging +Class-Path: + diff --git a/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-deployment-structure.xml b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-deployment-structure.xml new file mode 100644 index 0000000000..9a24bfc509 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-deployment-structure.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-web.xml b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-web.xml new file mode 100644 index 0000000000..a6ab6790c1 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/jboss-web.xml @@ -0,0 +1,3 @@ + + workflows/messages + \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/web.xml b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/web.xml new file mode 100644 index 0000000000..2adea83c4e --- /dev/null +++ b/adapters/mso-workflow-message-adapter/WebContent/WEB-INF/web.xml @@ -0,0 +1,80 @@ + + + mso-workflow-message-adapter + + check.html + + + log.configuration + logback.workflow-message-adapter.xml + + + mso.configuration + MSO_PROP_WORKFLOW_MESSAGE_ADAPTER=mso.workflow-message-adapter.properties,MSO_PROP_TOPOLOGY=topology.properties,MSO_PROP_AAF=cadi.properties + + + resteasy.resources + + org.openecomp.mso.logger.MsoLoggingServlet, + org.openecomp.mso.MsoStatusHandler, + org.openecomp.mso.adapters.workflowmessage.WMAdapterRest + + + + Resteasy + org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher + + + Resteasy + /* + + + LogFilter + com.att.ecomp.mso.logger.LogFilter + + + LogFilter + /* + + + org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap + + + + SiteStatus + SiteStatus APIs + /rest/setStatus/* + POST + + + SiteControl-Client + + + + + MSO internal Requests + Internal Requests + /rest/logging/* + /rest/properties/* + POST + GET + + + MSO-Client + + + + BASIC + ApplicationRealm + + + SiteControl-Client + + + MSO-Client + + diff --git a/adapters/mso-workflow-message-adapter/WebContent/check.html b/adapters/mso-workflow-message-adapter/WebContent/check.html new file mode 100644 index 0000000000..454997901e --- /dev/null +++ b/adapters/mso-workflow-message-adapter/WebContent/check.html @@ -0,0 +1,10 @@ + + + + +Health Check + + +Application ready + + \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/pom.xml b/adapters/mso-workflow-message-adapter/pom.xml new file mode 100644 index 0000000000..bde619f509 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/pom.xml @@ -0,0 +1,76 @@ + + 4.0.0 + + org.openecomp.mso + adapters + 1.1.0-SNAPSHOT + + org.openecomp.mso.adapters + mso-workflow-message-adapter + war + mso-workflow-message-adapter + mso workflow message adapter + + + ${project.artifactId}-${project.version} + + + + maven-war-plugin + 2.4 + + ${basedir}/WebContent + false + + + + + + + + org.openecomp.mso.adapters + mso-adapter-utils + ${project.version} + + + org.openecomp.mso.adapters + mso-adapters-rest-interface + ${project.version} + + + javax + javaee-web-api + 6.0 + provided + + + org.jboss.spec.javax.ejb + jboss-ejb-api_3.1_spec + 1.0.0.Final + provided + + + org.jboss.ejb3 + jboss-ejb3-ext-api + 1.1.1 + provided + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + org.openecomp.mso + status-control + ${project.version} + + + + org.springframework + spring-web + 4.3.2.RELEASE + + + diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java new file mode 100644 index 0000000000..cb3aea62c7 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/BPRestCallback.java @@ -0,0 +1,178 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.mso.adapters.workflowmessage; + +import javax.xml.bind.DatatypeConverter; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; + +/** + * Sends asynchronous messages to the BPMN WorkflowMessage service. + */ +public class BPRestCallback { + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA); + private static final MsoAlarmLogger ALARMLOGGER = new MsoAlarmLogger(); + + /** + * Sends a message to the BPMN workflow message service. The URL path is + * constructed using the specified message type and correlator. + * @param workflowMessageUrl the base BPMN WorkflowMessage URL + * @param messageType the message type + * @param correlator the message correlator + * @param contentType the value for the HTTP Content-Type header (possibly null) + * @param message the content (possibly null) + * @return true if the message was consumed successfully by the endpoint + */ + public boolean send(String workflowMessageUrl, String messageType, + String correlator, ContentType contentType, String message) { + LOGGER.debug(getClass().getSimpleName() + ".send(" + + "workflowMessageUrl=" + workflowMessageUrl + + " messageType=" + messageType + + " correlator=" + correlator + + " contentType=" + contentType + + " message=" + message + + ")"); + + while (workflowMessageUrl.endsWith("/")) { + workflowMessageUrl = workflowMessageUrl.substring(0, workflowMessageUrl.length()-1); + } + + String endpoint = workflowMessageUrl + "/" + WMAdapterUtils.encodeURLPathSegment(messageType) + + "/" + WMAdapterUtils.encodeURLPathSegment(correlator); + + return send(endpoint, contentType, message); + } + + /** + * Sends a message to the BPMN workflow message service. The specified URL + * must have the message type and correlator already embedded in it. + * @param url the endpoint URL + * @param message the content (possibly null) + * @param contentType the value for the HTTP Content-Type header (possibly null) + * @return true if the message was consumed successfully by the endpoint + */ + public boolean send(String url, ContentType contentType, String message) { + LOGGER.debug(getClass().getSimpleName() + ".send(" + + "url=" + url + + " contentType=" + contentType + + " message=" + message + + ")"); + + LOGGER.info(MessageEnum.RA_CALLBACK_BPEL, message == null ? "[no content]" : message, "Camunda", ""); + + HttpPost method = null; + HttpResponse httpResponse = null; + + try { + // TODO: configurable timeout? + int timeout = 60 * 1000; + + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(timeout) + .setConnectTimeout(timeout) + .setConnectionRequestTimeout(timeout) + .build(); + + HttpClient client = HttpClientBuilder.create().build(); + method = new HttpPost(url); + method.setConfig(requestConfig); + + if (message != null) { + method.setEntity(new StringEntity(message, contentType)); + } + + boolean error = false; + + try { + // AAF Integration, disabled for now due to the constrains from other party + // String userCredentials = CredentialConstants.getDecryptedCredential(WMAdapterConstants.DEFAULT_BPEL_AUTH); + // Once AAF enabled, the credential shall be get by triggering the CredentialConstants.getDecryptedCredential -- remove line + String userCredentials = WMAdapterProperties.getEncryptedProperty(WMAdapterConstants.BPEL_AUTH_PROP, + WMAdapterConstants.DEFAULT_BPEL_AUTH, WMAdapterConstants.ENCRYPTION_KEY); + String authorization = "Basic " + DatatypeConverter.printBase64Binary(userCredentials.getBytes()); + method.setHeader("Authorization", authorization); + } catch (Exception e) { + LOGGER.error(MessageEnum.RA_SET_CALLBACK_AUTH_EXC, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, + "Unable to set authorization in callback request", e); + ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, + "Unable to set authorization in callback request: " + e.getMessage()); + error = true; + } + + if (!error) { + httpResponse = client.execute(method); + + @SuppressWarnings("unused") + String responseContent = null; + + if (httpResponse.getEntity() != null) { + responseContent = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + } + + if (httpResponse.getStatusLine().getStatusCode() >= 300) { + String msg = "Received error response to callback request: " + httpResponse.getStatusLine(); + LOGGER.error(MessageEnum.RA_CALLBACK_BPEL_EXC, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, msg); + ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, msg); + } + + httpResponse = null; + } + + method.reset(); + method = null; + return true; + } catch (Exception e) { + LOGGER.error(MessageEnum.RA_CALLBACK_BPEL_EXC, "Camunda", "", MsoLogger.ErrorCode.BusinessProcesssError, + "Error sending callback request", e); + ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, + "Error sending callback request: " + e.getMessage()); + return false; + } finally { + if (httpResponse != null) { + try { + EntityUtils.consume(httpResponse.getEntity()); + } catch (Exception e) { + // Ignore + } + } + + if (method != null) { + try { + method.reset(); + } catch (Exception e) { + // Ignore + } + } + + LOGGER.info(MessageEnum.RA_CALLBACK_BPEL_COMPLETE, "Camunda", ""); + } + } +} \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterConstants.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterConstants.java new file mode 100644 index 0000000000..a92051da12 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterConstants.java @@ -0,0 +1,30 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.mso.adapters.workflowmessage; + +public interface WMAdapterConstants { + public static final String MSO_PROPERTIES_ID = "MSO_PROP_WORKFLOW_MESSAGE_ADAPTER"; + public static final String BPEL_URL_PROP = "org.openecomp.mso.adapters.workflow.message.bpelurl"; + + // Once AAF enabled, the credential shall be get by triggering the CredentialConstants.getEncryptedPropValue + public static final String BPEL_AUTH_PROP = "org.openecomp.mso.adapters.workflow.message.bpelauth"; + public static final String DEFAULT_BPEL_AUTH = "05FDA034C27D1CA51AAB8FAE512EDE45241E16FC8C137D292AA3A964431C82DB"; + public static final String ENCRYPTION_KEY = "aa3871669d893c7fb8abbcda31b88b4f"; +} \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterProperties.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterProperties.java new file mode 100644 index 0000000000..e63c404024 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterProperties.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.mso.adapters.workflowmessage; + +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.properties.MsoJavaProperties; +import org.openecomp.mso.properties.MsoPropertiesException; +import org.openecomp.mso.properties.MsoPropertiesFactory; + +/** + * Static methods to access Workflow Message Adapter properties. + */ +public final class WMAdapterProperties { + private static final MsoPropertiesFactory MSO_PROPERTIES_FACTORY = new MsoPropertiesFactory(); + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA); + + /** + * Gets the value of a Workflow Message Adapter property. + * @param key the property key + * @param defaultValue the default value to use if the property does not + * exist or if an error occurs + */ + public static String getProperty(String key, String defaultValue) { + MsoJavaProperties properties; + + try { + properties = MSO_PROPERTIES_FACTORY.getMsoJavaProperties(WMAdapterConstants.MSO_PROPERTIES_ID); + } catch (MsoPropertiesException e) { + LOGGER.error (MessageEnum.NO_PROPERTIES, + "Unknown. MSO Properties ID not found in cache: " + WMAdapterConstants.MSO_PROPERTIES_ID, + "WorkflowMessageAdatper", "", MsoLogger.ErrorCode.DataError, + "Exception - MSO Properties ID not found in cache", e); + return defaultValue; + } + + String value = properties.getProperty(key, defaultValue); + LOGGER.debug("Config read for " + WMAdapterConstants.MSO_PROPERTIES_ID + + " - key:" + key + " value:" + value); + return value; + } + + /** + * Gets the value of an Workflow Message Adapter property. + * @param key the property key + * @param defaultValue the default value to use if the property does not + * exist or if an error occurs + */ + public static String getEncryptedProperty(String key, String defaultValue, String encryptionKey) { + MsoJavaProperties properties; + + try { + properties = MSO_PROPERTIES_FACTORY.getMsoJavaProperties(WMAdapterConstants.MSO_PROPERTIES_ID); + } catch (MsoPropertiesException e) { + LOGGER.error (MessageEnum.NO_PROPERTIES, + "Unknown. MSO Properties ID not found in cache: " + WMAdapterConstants.MSO_PROPERTIES_ID, + "WorkflowMessageAdatper", "", MsoLogger.ErrorCode.DataError, + "Exception - MSO Properties ID not found in cache", e); + return defaultValue; + } + + String value = properties.getEncryptedProperty(key, defaultValue, encryptionKey); + LOGGER.debug("Config read for " + WMAdapterConstants.MSO_PROPERTIES_ID + " - key:" + key); + return value; + } + + /** + * Instantiation is not allowed. + */ + private WMAdapterProperties() { + } +} \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java new file mode 100644 index 0000000000..db7e47f00e --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterRest.java @@ -0,0 +1,140 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.mso.adapters.workflowmessage; + +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.http.entity.ContentType; + +import org.openecomp.mso.HealthCheckUtils; +import org.openecomp.mso.logger.MessageEnum; +import org.openecomp.mso.logger.MsoAlarmLogger; +import org.openecomp.mso.logger.MsoLogger; +import org.openecomp.mso.utils.UUIDChecker; + +/** + * Workflow Message Adapter interface added in 1707. Supports delivery of + * callbacks from external systems to waiting BPMN workflows. + */ +@Path("/") +public class WMAdapterRest { + private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA); + private static final MsoAlarmLogger ALARMLOGGER = new MsoAlarmLogger(); + + @HEAD + @GET + @Path("/healthcheck") + @Produces(MediaType.TEXT_HTML) + public Response healthcheck(@QueryParam("requestId") String requestId) { + long startTime = System.currentTimeMillis(); + MsoLogger.setServiceName("Healthcheck"); + UUIDChecker.verifyOldUUID(requestId, LOGGER); + HealthCheckUtils healthCheck = new HealthCheckUtils(); + + if (!healthCheck.siteStatusCheck(LOGGER, startTime)) { + return HealthCheckUtils.HEALTH_CHECK_NOK_RESPONSE; + } + + if (!healthCheck.configFileCheck(LOGGER, startTime, WMAdapterConstants.MSO_PROPERTIES_ID)) { + return HealthCheckUtils.NOT_STARTED_RESPONSE; + } + + LOGGER.debug("healthcheck - Successful"); + return HealthCheckUtils.HEALTH_CHECK_RESPONSE; + } + + /** + * Receives a message from a remote system. + * @param content the message content + */ + @POST + @Path("/message/{messageType}/{correlator}") + @Consumes("*/*") + @Produces({MediaType.TEXT_PLAIN}) + public Response receiveWorkflowMessage( + @HeaderParam("Content-Type") String contentTypeHeader, + @PathParam("messageType") String messageType, + @PathParam("correlator") String correlator, + String content) { + + String path= "workflow/" + messageType + "/" + correlator; + LOGGER.info(MessageEnum.RA_RECEIVE_WORKFLOW_MESSAGE, content, "WorkflowMessageAdapter", path); + + long startTime = System.currentTimeMillis(); + + ContentType contentType = null; + + if (contentTypeHeader != null) { + try { + contentType = ContentType.parse(contentTypeHeader); + } catch (Exception e) { + // If we don't get a valid one, we handle it below. + } + } + + if (contentType == null && content != null) { + String error = "Missing or Invalid Content-Type"; + LOGGER.error(MessageEnum.RA_PARSING_REQUEST_ERROR, error, "WorkflowMessageAdapter", path, + MsoLogger.ErrorCode.DataError, "Bad Request"); + ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, error); + return Response.status(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE).entity(error).build(); + } + + String bpUrl = WMAdapterProperties.getProperty(WMAdapterConstants.BPEL_URL_PROP, null); + + if (bpUrl == null) { + String error = "Missing configuration for: " + WMAdapterConstants.BPEL_URL_PROP; + LOGGER.error(MessageEnum.RA_CONFIG_EXC, error, "WorkflowMessageAdapter", path, + MsoLogger.ErrorCode.DataError, "Configuration Error"); + ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, error); + return Response.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).entity(error).build(); + } + + long bpStartTime = System.currentTimeMillis(); + BPRestCallback callback = new BPRestCallback(); + boolean callbackSuccess = callback.send(bpUrl, messageType, correlator, contentType, content); + + if (callbackSuccess) { + LOGGER.recordMetricEvent(bpStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, + "Sent notification", "BPMN", bpUrl, null); + LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successful"); + } else { + LOGGER.recordMetricEvent(bpStartTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, + "Failed to send notification", "BPMN", bpUrl, null); + LOGGER.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, + "Failed to send notification"); + } + + return Response.status(204).build(); + } +} diff --git a/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java new file mode 100644 index 0000000000..b371d2dd9b --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/main/java/org/openecomp/mso/adapters/workflowmessage/WMAdapterUtils.java @@ -0,0 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.openecomp.mso.adapters.workflowmessage; + +import java.io.UnsupportedEncodingException; + +import org.springframework.web.util.UriUtils; + +/** + * Utility methods used by WMAdapterRest. + */ +public final class WMAdapterUtils { + /** + * Encodes a URL path segment according to RFC 3986 Section 2. + * @param pathSegment the path segment to encode + * @return the encoded path segment + */ + public static String encodeURLPathSegment(String pathSegment) { + try { + return UriUtils.encodePathSegment(pathSegment, "UTF-8"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException("UTF-8 encoding is not supported"); + } + } + + /** + * Instantiation is not allowed. + */ + private WMAdapterUtils() { + } +} \ No newline at end of file diff --git a/adapters/mso-workflow-message-adapter/src/test/resources/logback-test.xml b/adapters/mso-workflow-message-adapter/src/test/resources/logback-test.xml new file mode 100644 index 0000000000..bc3d7f36b6 --- /dev/null +++ b/adapters/mso-workflow-message-adapter/src/test/resources/logback-test.xml @@ -0,0 +1,25 @@ + + + + + %d{MM/dd-HH:mm:ss.SSS}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{ServiceName}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}||%X{ServerIPAddress}|%X{ServerFQDN}|%X{RemoteHost}||%X{Timer}|%msg%n + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit 1.2.3-korg