2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (c) 2022 Deutsche telekom
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.apihandlerinfra;
24 import com.fasterxml.jackson.core.JsonProcessingException;
25 import com.fasterxml.jackson.databind.ObjectMapper;
26 import io.swagger.v3.oas.annotations.OpenAPIDefinition;
27 import io.swagger.v3.oas.annotations.Operation;
28 import io.swagger.v3.oas.annotations.info.Info;
29 import io.swagger.v3.oas.annotations.media.ArraySchema;
30 import io.swagger.v3.oas.annotations.media.Content;
31 import io.swagger.v3.oas.annotations.media.Schema;
32 import io.swagger.v3.oas.annotations.responses.ApiResponse;
33 import org.apache.http.HttpStatus;
34 import org.onap.aai.domain.yang.Relationship;
35 import org.onap.aai.domain.yang.RelationshipData;
36 import org.onap.aai.domain.yang.ServiceInstance;
37 import org.onap.aai.domain.yang.SliceProfile;
38 import org.onap.aaiclient.client.aai.AAIRestClientImpl;
39 import org.onap.logging.filter.base.ErrorCode;
40 import org.onap.so.apihandler.camundabeans.CamundaResponse;
41 import org.onap.so.apihandler.common.*;
42 import org.onap.so.apihandlerinfra.exceptions.ApiException;
43 import org.onap.so.apihandlerinfra.exceptions.BPMNFailureException;
44 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
45 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
46 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
47 import org.onap.so.moi.*;
48 import org.onap.so.constants.Status;
49 import org.onap.so.db.catalog.beans.Service;
50 import org.onap.so.db.catalog.beans.ServiceRecipe;
51 import org.onap.so.db.catalog.client.CatalogDbClient;
52 import org.onap.so.db.request.beans.InfraActiveRequests;
53 import org.onap.so.db.request.client.RequestsDbClient;
54 import org.onap.so.logger.LogConstants;
55 import org.onap.so.logger.LoggingAnchor;
56 import org.onap.so.logger.MessageEnum;
57 import org.onap.so.rest.catalog.beans.Vnf;
58 import org.onap.so.serviceinstancebeans.*;
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
62 import org.springframework.beans.factory.annotation.Autowired;
63 import org.springframework.http.ResponseEntity;
64 import org.springframework.stereotype.Component;
65 import org.springframework.transaction.annotation.Transactional;
67 import javax.ws.rs.container.ContainerRequestContext;
68 import javax.ws.rs.core.Context;
69 import javax.ws.rs.core.MediaType;
70 import javax.ws.rs.core.Response;
71 import java.sql.Timestamp;
73 import java.util.function.Function;
74 import java.util.stream.Collectors;
77 @Path("/onap/so/infra/moi/api/rest/")
79 info = @Info(title = "/onap/so/infra/moi/api/rest/", description = "API Requests for 3gpp MO Instances"))
80 public class ManagedObject3gppServiceInstances {
82 private static final Logger LOGGER = LoggerFactory.getLogger(ManagedObject3gppServiceInstances.class);
84 private static final String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";
86 private static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";
88 private static final String SAVE_TO_DB = "save instance to db";
90 private static final String URI_PREFIX = "/moi/api/rest/";
93 private MsoRequest msoRequest;
96 private CatalogDbClient catalogDbClient;
99 private RequestsDbClient requestsDbClient;
102 private RequestHandlerUtils requestHandlerUtils;
105 private ResponseBuilder builder;
108 private CamundaClient camundaClient;
111 private ResponseHandler responseHandler;
113 private AAIRestClientImpl aaiRestClient = new AAIRestClientImpl();
116 * POST Requests for 3GPP MOI Service create nssi on a version provided
118 * @throws ApiException
122 @Path("/{version:[vV][1]}/NetworkSliceSubnet/{id}")
123 @Consumes(MediaType.APPLICATION_JSON)
124 @Produces(MediaType.APPLICATION_JSON)
125 @Operation(description = "Create a 3GPP MOI NSSI on a version provided", responses = @ApiResponse(
126 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
127 public Response allocateNssi(MoiAllocateRequest request, @PathParam("version") String version,
128 @PathParam("id") String id, @Context ContainerRequestContext requestContext) throws ApiException {
129 String requestId = requestHandlerUtils.getRequestId(requestContext);
130 HashMap<String, String> instanceIdMap = new HashMap<>();
131 instanceIdMap.put("serviceInstanceId", id);
132 return processAllocateRequest(request, Action.createRanSlice, version, requestId, instanceIdMap,
133 requestHandlerUtils.getRequestUri(requestContext, URI_PREFIX));
137 @Path("/{version:[vV][1]}/NetworkSliceSubnet/{id}")
138 @Consumes(MediaType.APPLICATION_JSON)
139 @Produces(MediaType.APPLICATION_JSON)
140 @Operation(description = "Modify a 3GPP MOI NSSI on a version provided", responses = @ApiResponse(
141 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
142 public Response modifyNssi(MoiAllocateRequest request, @PathParam("version") String version,
143 @PathParam("id") String id, @Context ContainerRequestContext requestContext) throws ApiException {
144 String requestId = requestHandlerUtils.getRequestId(requestContext);
145 HashMap<String, String> instanceIdMap = new HashMap<>();
146 instanceIdMap.put("serviceInstanceId", id);
147 return processAllocateRequest(request, Action.modifyRanSlice, version, requestId, instanceIdMap,
148 requestHandlerUtils.getRequestUri(requestContext, URI_PREFIX));
152 * DELETE Requests to delete 3GPP MOI Service instance on a version provided
154 * @throws ApiException
157 @Path("/{version:[vV][1]}/NetworkSliceSubnet/{id}")
158 @Consumes(MediaType.APPLICATION_JSON)
159 @Produces(MediaType.APPLICATION_JSON)
160 @Operation(description = "Delete a 3GPP MOI NSSI on a version provided", responses = @ApiResponse(
161 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Response.class)))))
162 public Response deleteNssi(MoiAllocateRequest request, @PathParam("version") String version,
163 @PathParam("id") String id, @Context ContainerRequestContext requestContext) throws ApiException {
164 String requestId = requestHandlerUtils.getRequestId(requestContext);
165 HashMap<String, String> instanceIdMap = new HashMap<>();
166 instanceIdMap.put("serviceInstanceId", id);
167 return processAllocateRequest(request, Action.deleteRanSlice, version, requestId, instanceIdMap,
168 requestHandlerUtils.getRequestUri(requestContext, URI_PREFIX));
172 * GET Requests for 3GPP MOI Service get nssi on a version provided
174 * @throws ApiException
177 @Operation(description = "Find slice Profile for nssi id", responses = @ApiResponse(
178 content = @Content(array = @ArraySchema(schema = @Schema(implementation = Vnf.class)))))
179 @Path("/{version:[vV][1]}/NetworkSliceSubnet/{id}")
180 @Produces({MediaType.APPLICATION_JSON})
181 @Transactional(readOnly = true)
182 public Response getMOIAttributes(@PathParam("version") String version, @PathParam("id") String id)
183 throws ApiException {
184 GETMoiResponse mOIResponse = new GETMoiResponse();
185 String response = null;
187 Optional<ServiceInstance> serviceInstance = aaiRestClient.getServiceInstanceById(id, "5G", "5GCustomer");
188 if (serviceInstance.isPresent()) {
189 LOGGER.info("Id from request {}", id);
190 ServiceInstance serviceInstanceObj = serviceInstance.get();
191 mOIResponse.setId(serviceInstanceObj.getServiceInstanceId());
192 mOIResponse.setAdministrativeState(serviceInstanceObj.getOperationalStatus());
193 mOIResponse.setOperationalState(serviceInstanceObj.getOrchestrationStatus());
196 Attributes attributes = new Attributes();
197 List<org.onap.so.moi.SliceProfile> sliceProfileList = new ArrayList<org.onap.so.moi.SliceProfile>();
199 List<Relationship> listOfNssiRelationship = serviceInstanceObj.getRelationshipList().getRelationship();
201 List<Relationship> listOfNssiRelationshipAR = listOfNssiRelationship.stream()
202 .filter(relationship -> relationship.getRelatedTo().equalsIgnoreCase("allotted-resource"))
203 .collect(Collectors.toList());
205 for (Relationship relationship : listOfNssiRelationshipAR) {
206 org.onap.so.moi.SliceProfile sliceProfile = new org.onap.so.moi.SliceProfile();
207 for (RelationshipData relationshipData : relationship.getRelationshipData()) {
208 if (relationshipData.getRelationshipKey()
209 .equalsIgnoreCase("service-instance.service-instance-id")) {
210 String sliceProfileInstanceId = relationshipData.getRelationshipValue();
211 LOGGER.debug(">>> sliceProfileInstance: {}", sliceProfileInstanceId);
213 Optional<ServiceInstance> sliceProfileServiceInstance = aaiRestClient
214 .getServiceInstanceByIdWithDepth(sliceProfileInstanceId, "5G", "5GCustomer");
215 if (sliceProfileServiceInstance.isPresent()) {
216 ServiceInstance sliceProfileServiceInstanceObj = sliceProfileServiceInstance.get();
217 SliceProfile sliceProfile1 =
218 sliceProfileServiceInstanceObj.getSliceProfiles().getSliceProfile().get(0);
221 .add(AAISliceProfileToMOISlice(sliceProfile1, sliceProfileServiceInstanceObj));
222 } catch (Exception e) {
223 LOGGER.info("Can not construct responce {}", e);
234 attributes.setSliceProfileList(sliceProfileList);
235 mOIResponse.setAttributes(attributes);
236 ObjectMapper mapper = new ObjectMapper();
238 response = mapper.writeValueAsString(mOIResponse);
239 } catch (Exception exception) {
240 LOGGER.error("Error while creating MOIResponse JSON" + exception.getMessage());
243 return builder.buildResponse(HttpStatus.SC_OK, null, response, version);
247 return builder.buildResponse(HttpStatus.SC_NOT_FOUND, null, null, version);
250 private org.onap.so.moi.SliceProfile AAISliceProfileToMOISlice(SliceProfile sliceProfile,
251 ServiceInstance serviceInstance) {
252 org.onap.so.moi.SliceProfile sliceProfileMoi = new org.onap.so.moi.SliceProfile();
254 sliceProfileMoi.setSliceProfileId(sliceProfile.getProfileId());
256 String serviceType = serviceInstance.getServiceType();
258 // rANSliceSubnetProfile
259 RANSliceSubnetProfile ranSliceSubnetProfile = new RANSliceSubnetProfile();
260 ranSliceSubnetProfile.setServiceType(serviceType);
261 ranSliceSubnetProfile.setdLLatency(sliceProfile.getLatency());
262 ranSliceSubnetProfile.setCoverageAreaTAList(Integer.valueOf(sliceProfile.getCoverageAreaTAList()));
263 ranSliceSubnetProfile.setMaxNumberofUEs(sliceProfile.getMaxNumberOfUEs());
264 ranSliceSubnetProfile.setResourceSharingLevel(sliceProfile.getResourceSharingLevel());
265 ranSliceSubnetProfile.setAreaTrafficCapDL(sliceProfile.getAreaTrafficCapDL());
268 String[] plmnIdData = serviceInstance.getServiceInstanceLocationId().split("-");
269 PlmnId plmnId = new PlmnId();
270 plmnId.setMcc(Integer.valueOf(plmnIdData[0]));
271 plmnId.setMnc(Integer.valueOf(plmnIdData[1]));
274 String[] snssaiData = serviceInstance.getEnvironmentContext().split("-");
275 Snssai snssai = new Snssai();
276 snssai.setSst(snssaiData[0]);
277 snssai.setSd(snssaiData[1]);
280 PlmnInfo plmnInfo = new PlmnInfo();
281 plmnInfo.setPlmnId(plmnId);
282 plmnInfo.setSnssai(snssai);
284 List<PlmnInfo> plmnInfoList = new ArrayList<PlmnInfo>();
285 plmnInfoList.add(plmnInfo);
287 sliceProfileMoi.setrANSliceSubnetProfile(ranSliceSubnetProfile);
288 sliceProfileMoi.setPlmnInfoList(plmnInfoList);
290 return sliceProfileMoi;
295 * Process allocate service request and send request to corresponding workflow
301 * @throws ApiException
303 private Response processAllocateRequest(MoiAllocateRequest request, Action action, String version, String requestId,
304 HashMap<String, String> instanceIdMap, String requestUri) throws ApiException {
305 String defaultServiceModelName = "UUI_DEFAULT";
306 String requestScope = ModelType.service.name();
307 String apiVersion = version.substring(1);
308 String serviceRequestJson = toString.apply(request);
310 ServiceInstancesRequest sir = createServiceInstanceRequest(request, requestId);
311 String requestDetails = null;
313 requestDetails = new ObjectMapper().writeValueAsString(sir);
314 LOGGER.debug(">>> sir: {}", sir);
315 } catch (JsonProcessingException e) {
318 if (serviceRequestJson != null) {
319 InfraActiveRequests currentActiveReq = createRequestObject(request, action, requestId, Status.IN_PROGRESS,
320 requestScope, serviceRequestJson);
322 String instanceId = instanceIdMap.get("serviceInstanceId");
323 String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
324 requestHandlerUtils.checkForDuplicateRequests(action, instanceIdMap, requestScope, currentActiveReq,
327 requestHandlerUtils.setInstanceId(currentActiveReq, requestScope, instanceId, instanceIdMap);
329 requestsDbClient.save(currentActiveReq);
330 } catch (Exception e) {
331 LOGGER.error("Exception occurred", e);
332 ErrorLoggerInfo errorLoggerInfo =
333 new ErrorLoggerInfo.Builder(MessageEnum.APIH_DB_ACCESS_EXC, ErrorCode.DataError)
334 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
335 throw new RequestDbFailureException.Builder(SAVE_TO_DB, e.toString(),
336 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).cause(e)
337 .errorInfo(errorLoggerInfo).build();
340 RecipeLookupResult recipeLookupResult;
342 recipeLookupResult = getServiceInstanceOrchestrationURI("123", action, defaultServiceModelName);
344 LOGGER.debug("recipeLookupResult: {}", recipeLookupResult);
345 } catch (Exception e) {
346 LOGGER.error(LoggingAnchor.FOUR, MessageEnum.APIH_DB_ACCESS_EXC.toString(), MSO_PROP_APIHANDLER_INFRA,
347 ErrorCode.AvailabilityError.getValue(), "Exception while communciate with Catalog DB", e);
348 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
349 MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
350 ErrorNumbers.SVC_NO_SERVER_RESOURCES, null, version);
351 LOGGER.debug(END_OF_THE_TRANSACTION + response.getEntity());
355 if (recipeLookupResult == null) {
356 LOGGER.error(LoggingAnchor.FOUR, MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND.toString(),
357 MSO_PROP_APIHANDLER_INFRA, ErrorCode.DataError.getValue(), "No recipe found in DB");
358 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
359 MsoException.ServiceException, "Recipe does not exist in catalog DB",
360 ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null, version);
361 LOGGER.debug(END_OF_THE_TRANSACTION + response.getEntity());
365 String serviceInstanceType = sir.getRequestDetails().getRequestParameters().getSubscriptionServiceType();
366 RequestClientParameter parameter;
368 parameter = new RequestClientParameter.Builder().setRequestId(requestId).setBaseVfModule(false)
369 .setRecipeTimeout(recipeLookupResult.getRecipeTimeout()).setRequestAction(action.name())
370 .setServiceInstanceId(instanceId).setServiceType(serviceInstanceType)
371 .setRequestDetails(requestDetails).setApiVersion(version).setALaCarte(false)
372 .setRecipeParamXsd(recipeLookupResult.getRecipeParamXsd()).setApiVersion(apiVersion)
373 .setRequestUri(requestUri).build();
374 } catch (Exception e) {
375 LOGGER.error("Exception occurred", e);
376 ErrorLoggerInfo errorLoggerInfo =
377 new ErrorLoggerInfo.Builder(MessageEnum.APIH_BPEL_RESPONSE_ERROR, ErrorCode.SchemaError)
378 .errorSource(Constants.MSO_PROP_APIHANDLER_INFRA).build();
379 throw new ValidateException.Builder("Unable to generate RequestClientParamter object" + e.getMessage(),
380 HttpStatus.SC_INTERNAL_SERVER_ERROR, ErrorNumbers.SVC_BAD_PARAMETER).errorInfo(errorLoggerInfo)
383 return postBPELRequest(currentActiveReq, parameter, recipeLookupResult.getOrchestrationURI(), requestScope);
385 Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
386 MsoException.ServiceException, "JsonProcessingException occurred - serviceRequestJson is null",
387 ErrorNumbers.SVC_BAD_PARAMETER, null, version);
393 private ServiceInstancesRequest createServiceInstanceRequest(MoiAllocateRequest request, String id) {
395 RequestDetails requestDetails = new RequestDetails();
396 RequestInfo requestInfo = new RequestInfo();
397 requestInfo.setInstanceName("ran_nssi_" + id);
398 requestInfo.setRequestorId("MO");
399 requestInfo.setProductFamilyId("5G");
400 requestInfo.setSource("MO");
402 requestDetails.setRequestInfo(requestInfo);
404 SubscriberInfo subscriberInfo = new SubscriberInfo();
405 subscriberInfo.setGlobalSubscriberId("5GCustomer");
406 requestDetails.setSubscriberInfo(subscriberInfo);
408 Project project = new Project();
409 project.setProjectName("basicnw-project");
410 requestDetails.setProject(project);
412 OwningEntity owningEntity = new OwningEntity();
413 owningEntity.setOwningEntityId("67f2e84c-734d-4e90-a1e4-d2ffa2e75849");
414 owningEntity.setOwningEntityName("OE-5GCustomer");
415 requestDetails.setOwningEntity(owningEntity);
417 RequestParameters requestParameters = new RequestParameters();
418 requestParameters.setaLaCarte(false);
419 requestParameters.setSubscriptionServiceType("5G");
421 Map<String, Object> nssiUserParams = new HashMap<>();
422 Attributes attributes = request.getAttributes();
423 nssiUserParams.put("nssi", attributes);
425 Map<String, Object> homingSolution = new HashMap<>();
426 homingSolution.put("Homing_Solution", "true");
428 List<Map<String, Object>> userParams = new ArrayList<>();
430 userParams.add(nssiUserParams);
431 userParams.add(homingSolution);
433 requestParameters.setUserParams(userParams);
435 requestDetails.setRequestParameters(requestParameters);
437 ServiceInstancesRequest sir = new ServiceInstancesRequest();
438 sir.setServiceInstanceId(id);
439 sir.setRequestDetails(requestDetails);
444 public InfraActiveRequests createRequestObject(Object request, Action action, String requestId, Status status,
445 String requestScope, String requestJson) {
446 InfraActiveRequests aq = new InfraActiveRequests();
448 String serviceInstanceName = null;
449 String serviceInstanceId = null;
450 if (action.name().equals("ranSlice")) {
451 serviceInstanceName = "ran_nssi_" + requestId;
452 aq.setServiceInstanceName(serviceInstanceName);
453 } else if (action.name().equals("updateInstance")) {
454 LOGGER.debug(">>>>> updateInstance");
457 aq.setRequestId(requestId);
458 aq.setRequestAction(action.toString());
459 aq.setRequestUrl(MDC.get(LogConstants.HTTP_URL));
460 Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
461 aq.setStartTime(startTimeStamp);
462 aq.setRequestScope(requestScope);
463 aq.setRequestBody(requestJson);
464 aq.setRequestStatus(status.toString());
465 aq.setLastModifiedBy(Constants.MODIFIED_BY_APIHANDLER);
466 } catch (Exception e) {
467 LOGGER.error("Exception when creation record request", e);
469 if (!status.equals(Status.FAILED)) {
477 * Getting recipes from catalogDb
479 * @param serviceModelUUID the service model version uuid
480 * @param action the action for the service
481 * @param defaultServiceModelName default service name
482 * @return the service recipe result
484 private RecipeLookupResult getServiceInstanceOrchestrationURI(String serviceModelUUID, Action action,
485 String defaultServiceModelName) {
487 RecipeLookupResult recipeLookupResult = getServiceURI(serviceModelUUID, action, defaultServiceModelName);
489 if (recipeLookupResult != null) {
490 LOGGER.debug("Orchestration URI is: " + recipeLookupResult.getOrchestrationURI() + ", recipe Timeout is: "
491 + Integer.toString(recipeLookupResult.getRecipeTimeout()));
493 LOGGER.debug("No matching recipe record found");
495 return recipeLookupResult;
498 Function<Object, String> toString = serviceRequest -> {
499 ObjectMapper mapper = new ObjectMapper();
500 String requestAsString = null;
502 requestAsString = mapper.writeValueAsString(serviceRequest);
503 } catch (JsonProcessingException e) {
504 LOGGER.debug("Exception while converting service request object to String {}", e);
506 return requestAsString;
510 * Getting recipes from catalogDb If Service recipe is not set, use default recipe, if set , use special recipe.
512 * @param serviceModelUUID the service version uuid
513 * @param action the action of the service.
514 * @param defaultServiceModelName default service name
515 * @return the service recipe result.
517 private RecipeLookupResult getServiceURI(String serviceModelUUID, Action action, String defaultServiceModelName) {
519 Service defaultServiceRecord =
520 catalogDbClient.getFirstByModelNameOrderByModelVersionDesc(defaultServiceModelName);
521 // set recipe as default generic recipe
522 ServiceRecipe recipe =
523 catalogDbClient.getFirstByServiceModelUUIDAndAction(defaultServiceRecord.getModelUUID(), action.name());
524 // check the service special recipe
525 if (null != serviceModelUUID && !serviceModelUUID.isEmpty()) {
526 ServiceRecipe serviceSpecialRecipe =
527 catalogDbClient.getFirstByServiceModelUUIDAndAction(serviceModelUUID, action.name());
528 if (null != serviceSpecialRecipe) {
529 // set service special recipe.
530 recipe = serviceSpecialRecipe;
534 if (recipe == null) {
537 return new RecipeLookupResult(recipe.getOrchestrationUri(), recipe.getRecipeTimeout(), recipe.getParamXsd());
541 private Response postBPELRequest(InfraActiveRequests currentActiveReq, RequestClientParameter parameter,
542 String orchestrationURI, String requestScope) throws ApiException {
543 ResponseEntity<String> response =
544 requestHandlerUtils.postRequest(currentActiveReq, parameter, orchestrationURI);
545 LOGGER.debug("BPEL response : " + response);
546 int bpelStatus = responseHandler.setStatus(response.getStatusCodeValue());
549 responseHandler.acceptedResponse(response);
550 CamundaResponse camundaResponse = responseHandler.getCamundaResponse(response);
551 String responseBody = camundaResponse.getResponse();
552 if ("Success".equalsIgnoreCase(camundaResponse.getMessage())) {
553 jsonResponse = responseBody;
555 BPMNFailureException bpmnException =
556 new BPMNFailureException.Builder(String.valueOf(bpelStatus) + responseBody, bpelStatus,
557 ErrorNumbers.SVC_DETAILED_SERVICE_ERROR).build();
558 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, bpmnException.getMessage());
561 } catch (ApiException e) {
562 requestHandlerUtils.updateStatus(currentActiveReq, Status.FAILED, e.getMessage());
565 return builder.buildResponse(HttpStatus.SC_ACCEPTED, parameter.getRequestId(), jsonResponse,
566 parameter.getApiVersion());