summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cds-ui/client/src/app/common/core/store/models/resources.model.ts1
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts21
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html3
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts18
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts4
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts6
-rw-r--r--cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts30
-rw-r--r--cds-ui/server/src/controllers/blueprint-rest.controller.ts107
-rw-r--r--cds-ui/server/src/datasources/blueprint.datasource-template.ts19
-rw-r--r--cds-ui/server/src/services/blueprint.service.ts1
-rw-r--r--docs/microservices/controllerBlueprintStudioProcessorMS.rst23
-rw-r--r--docs/microservices/enrichment.rst6
-rw-r--r--docs/microservices/flexibleplugin.rst (renamed from docs/flexibleplugin.rst)0
-rw-r--r--docs/microservices/media/dyanmicapi.jpg (renamed from docs/media/dyanmicapi.JPG)bin72238 -> 72238 bytes
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt4
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt21
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt11
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt10
-rw-r--r--ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zipbin20700 -> 0 bytes
-rwxr-xr-xms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zipbin0 -> 9781 bytes
20 files changed, 170 insertions, 115 deletions
diff --git a/cds-ui/client/src/app/common/core/store/models/resources.model.ts b/cds-ui/client/src/app/common/core/store/models/resources.model.ts
index 019c2684a..e89094bb1 100644
--- a/cds-ui/client/src/app/common/core/store/models/resources.model.ts
+++ b/cds-ui/client/src/app/common/core/store/models/resources.model.ts
@@ -27,4 +27,5 @@ export interface IResources {
updated_bt:string;
property: IPropertyData;
sources: ISourcesData;
+ definition?: any;
} \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts
index fdb261d52..dd17a30d2 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/search-template/search-template.service.ts
@@ -1,3 +1,24 @@
+/*
+============LICENSE_START==========================================
+===================================================================
+Copyright (C) 2019 IBM Intellectual Property. All rights reserved.
+===================================================================
+
+Unless otherwise specified, all software contained herein is licensed
+under the Apache License, Version 2.0 (the License);
+you may not use this software 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============================================
+*/
+
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html
index 97c65b220..46e1ea7da 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html
+++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.html
@@ -34,9 +34,6 @@ limitations under the License.
<ng-template matStepLabel>Browse CBA Template file</ng-template>
<div class="matStepContent">
<app-search-template [optionSelected]="templateOption" (cbaFile)="fileChange($event)"></app-search-template>
- <!-- <div>
- <button mat-button matStepperNext class="matStepNextBtn">Upload</button>
- </div>-->
</div>
</mat-step>
<mat-step [stepControl]="step3FormGroup">
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts
index 561f15a5d..9188b43b8 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/select-template/select-template.component.ts
@@ -19,8 +19,6 @@ limitations under the License.
============LICENSE_END============================================
*/
import { Component, OnInit } from '@angular/core';
-import { Observable } from 'rxjs';
-import { Store } from '@ngrx/store';
import { IBlueprint } from 'src/app/common/core/store/models/blueprint.model';
import { IBlueprintState } from 'src/app/common/core/store/models/blueprintState.model';
import { IMetaData } from 'src/app/common/core/store/models/metadata.model';
@@ -40,8 +38,7 @@ export class SelectTemplateComponent implements OnInit {
importModel: IImportModel;
templateOption: any;
- constructor(private store: Store<IBlueprintState>) {
- // this.importModel.file = '';
+ constructor() {
}
ngOnInit() {
@@ -51,23 +48,14 @@ export class SelectTemplateComponent implements OnInit {
this.templateOption = option;
console.log(this.templateOption);
}
-
+
fileChange(topologyTemp: ITopologyTemplate) {
this.topologyTemplate = topologyTemp;
console.log(topologyTemp);
}
metaDataDetail(data: IMetaData) {
-
+
this.metaData = data;
console.log("parent" + this.metaData.author_email);
}
- upload() {
-
- }
-
- // saveBlueprintModel(){
- // this.blueprint.toplogyTemplates=this.topologyTemplate;
- // this.blueprint.metadata= this.metaData;
- // // this.store.dispatch(new CreateBlueprint(this.blueprint));
- // }
}
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts
index 2da1287ba..aa8a1064d 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.component.ts
@@ -47,6 +47,7 @@ export class ResourceEditComponent implements OnInit {
viewText: string = "Open in Editor Mode";
@ViewChild(JsonEditorComponent) editor: JsonEditorComponent;
options = new JsonEditorOptions();
+ sourcesList = [];
constructor(private store: Store<IAppState>, private resourceEditService: ResourceEditService, private alertService: NotificationHandlerService) {
this.rdState = this.store.select('resources');
@@ -60,6 +61,9 @@ export class ResourceEditComponent implements OnInit {
resourcesdata => {
var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess };
this.resources=resourcesState.resources;
+ if(resourcesdata.resources.definition && resourcesdata.resources.definition.sources) {
+ this.sourcesList = resourcesdata.resources.definition.sources;
+ }
})
}
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
index 417f6edb3..ed1ef6f37 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/resource-edit.service.ts
@@ -38,12 +38,10 @@ export class ResourceEditService {
}
getSources() {
- // to do
- return this.api.get('ResourceDictionaryURLs.getSources');
+ return this.api.get(ResourceDictionaryURLs.getSources);
}
getModelType(name) {
- // to do
- return this.api.get("ResourceDictionaryURLs.getModelType + '/' + name");
+ return this.api.get(ResourceDictionaryURLs.getModelType + '/' + name);
}
} \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts
index c4ad83d67..42f990a24 100644
--- a/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts
+++ b/cds-ui/client/src/app/feature-modules/resource-definition/resource-edit/sources-template/sources-template.component.ts
@@ -20,7 +20,7 @@
* ============LICENSE_END=========================================================
*/
-import { Component, OnInit, ViewChild, EventEmitter, Output } from '@angular/core';
+import { Component, OnInit, ViewChild, EventEmitter, Output, Input } from '@angular/core';
import { CdkDragDrop, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
import { IResources } from 'src/app/common/core/store/models/resources.model';
import { IResourcesState } from 'src/app/common/core/store/models/resourcesState.model';
@@ -62,9 +62,17 @@ export class SourcesTemplateComponent implements OnInit {
resourcesdata => {
var resourcesState: IResourcesState = { resources: resourcesdata.resources, isLoadSuccess: resourcesdata.isLoadSuccess, isSaveSuccess: resourcesdata.isSaveSuccess, isUpdateSuccess: resourcesdata.isUpdateSuccess };
this.resources=resourcesState.resources;
- this.sources = resourcesState.resources.sources;
+ // this.sources = resourcesState.resources.sources;
+ if(resourcesState.resources.definition && resourcesState.resources.definition.sources) {
+ this.sources = resourcesState.resources.definition.sources;
+ }
for (let key in this.sources) {
- this.sourcesOptions.push(key);
+ // this.sourcesOptions.push(key);
+ let source = {
+ name : key,
+ data: this.sources[key]
+ }
+ this.sourcesOptions.push(source);
}
})
}
@@ -136,5 +144,19 @@ export class SourcesTemplateComponent implements OnInit {
event.previousIndex,
event.currentIndex);
}
- }
+ }
+
+ getResources() {
+ this.apiService.getSources()
+ .subscribe(data=>{
+ console.log(data);
+ for (let key in data[0]) {
+ let sourceObj = { name: key, value: data[0][key] }
+ this.option.push(sourceObj);
+ }
+ // this.sourcesOptions = data;
+ }, error=>{
+ console.log(error);
+ })
+ }
}
diff --git a/cds-ui/server/src/controllers/blueprint-rest.controller.ts b/cds-ui/server/src/controllers/blueprint-rest.controller.ts
index 52e77ee7b..14aba5617 100644
--- a/cds-ui/server/src/controllers/blueprint-rest.controller.ts
+++ b/cds-ui/server/src/controllers/blueprint-rest.controller.ts
@@ -42,20 +42,20 @@ import {
Response,
RestBindings,
} from '@loopback/rest';
-import {Blueprint} from '../models';
+import { Blueprint } from '../models';
import { inject } from '@loopback/core';
import { BlueprintService } from '../services';
import * as fs from 'fs';
import * as multiparty from 'multiparty';
import * as request_lib from 'request';
-import {controllerApiConfig, processorApiConfig, appConfig} from '../config/app-config';
-import {bluePrintManagementServiceGrpcClient} from '../clients/blueprint-management-service-grpc-client';
+import { controllerApiConfig, processorApiConfig, appConfig } from '../config/app-config';
+import { bluePrintManagementServiceGrpcClient } from '../clients/blueprint-management-service-grpc-client';
export class BlueprintRestController {
constructor(
- @inject('services.BlueprintService')
+ @inject('services.BlueprintService')
public bpservice: BlueprintService,
- ) {}
+ ) { }
@get('/blueprints', {
responses: {
@@ -69,6 +69,17 @@ export class BlueprintRestController {
return await this.bpservice.getAllblueprints();
}
+ @get('/searchByTags/{tags}', {
+ responses: {
+ '200': {
+ content: { 'application/json': {} },
+ },
+ },
+ })
+ async getByTags(@param.path.string('tags') tags: string) {
+ return await this.bpservice.getByTags(tags);
+ }
+
@post('/create-blueprint')
async upload(
@requestBody({
@@ -78,21 +89,21 @@ export class BlueprintRestController {
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ this.uploadFileToBlueprintController(file, "/blueprint-model/", response).then(resp => {
resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
+ }, err => {
+ reject(err);
+ });
+ }, err => {
reject(err);
});
});
@@ -107,21 +118,21 @@ export class BlueprintRestController {
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ this.uploadFileToBlueprintController(file, "/blueprint-model/publish/", response).then(resp => {
resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
+ }, err => {
+ reject(err);
+ });
+ }, err => {
reject(err);
});
});
@@ -136,21 +147,21 @@ export class BlueprintRestController {
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp=>{
- resolve(resp);
- }, err=>{
- reject(err);
- });
- }, err=>{
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ this.uploadFileToBlueprintController(file, "/blueprint-model/enrich/", response).then(resp => {
+ resolve(resp);
+ }, err => {
+ reject(err);
+ });
+ }, err => {
reject(err);
});
});
@@ -159,21 +170,21 @@ export class BlueprintRestController {
@get('/download-blueprint/{name}/{version}')
async download(
@param.path.string('name') name: string,
- @param.path.string('version') version:string,
+ @param.path.string('version') version: string,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/"+name+"/version/"+version, response);
+ return this.downloadFileFromBlueprintController("/blueprint-model/download/by-name/" + name + "/version/" + version, response);
}
- async getFileFromMultiPartForm(request: Request): Promise<multiparty.File>{
+ async getFileFromMultiPartForm(request: Request): Promise<multiparty.File> {
return new Promise((resolve, reject) => {
let form = new multiparty.Form();
form.parse(request, (err: any, fields: any, files: { [x: string]: any[]; }) => {
if (err) reject(err);
let file = files['file'][0]; // get the file from the returned files object
- if(!file){
+ if (!file) {
reject('File was not found in form data.');
- }else{
+ } else {
resolve(file);
}
});
@@ -189,34 +200,34 @@ export class BlueprintRestController {
'multipart/form-data': {
// Skip body parsing
'x-parser': 'stream',
- schema: {type: 'object'},
+ schema: { type: 'object' },
},
},
})
request: Request,
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise<Response> {
- return new Promise((resolve, reject) => {
- this.getFileFromMultiPartForm(request).then(file=>{
- if(appConfig.action.deployBlueprint.grpcEnabled)
- return this.uploadFileToBlueprintProcessorGrpc(file, response);
- else
+ return new Promise((resolve, reject) => {
+ this.getFileFromMultiPartForm(request).then(file => {
+ if (appConfig.action.deployBlueprint.grpcEnabled)
+ return this.uploadFileToBlueprintProcessorGrpc(file, response);
+ else
return this.uploadFileToBlueprintProcessor(file, "/execution-service/upload/", response);
- }, err=>{
+ }, err => {
reject(err);
});
});
}
- async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response>{
+ async uploadFileToBlueprintController(file: multiparty.File, uri: string, response: Response): Promise<Response> {
return this.uploadFileToBlueprintService(file, controllerApiConfig.http.url + uri, controllerApiConfig.http.authToken, response);
}
- async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response>{
+ async uploadFileToBlueprintProcessor(file: multiparty.File, uri: string, response: Response): Promise<Response> {
return this.uploadFileToBlueprintService(file, processorApiConfig.http.url + uri, processorApiConfig.http.authToken, response);
}
- async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response>{
+ async uploadFileToBlueprintService(file: multiparty.File, url: string, authToken: string, response: Response): Promise<Response> {
let options = {
url: url,
headers: {
@@ -238,7 +249,7 @@ export class BlueprintRestController {
fs.unlink(file.path, (err: any) => {
if (err) {
console.error(err);
- }
+ }
});
}
@@ -280,10 +291,10 @@ export class BlueprintRestController {
async uploadFileToBlueprintProcessorGrpc(file: multiparty.File, response: Response): Promise<Response> {
return new Promise<Response>((resolve, reject) => {
- bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output=>{
+ bluePrintManagementServiceGrpcClient.uploadBlueprint(file.path).then(output => {
response.send(output.status.message);
resolve(response);
- }, err=>{
+ }, err => {
response.status(500).send(err);
resolve(response);
});
diff --git a/cds-ui/server/src/datasources/blueprint.datasource-template.ts b/cds-ui/server/src/datasources/blueprint.datasource-template.ts
index 35edf33e3..1188d9bcf 100644
--- a/cds-ui/server/src/datasources/blueprint.datasource-template.ts
+++ b/cds-ui/server/src/datasources/blueprint.datasource-template.ts
@@ -21,5 +21,22 @@ export default {
"getAllblueprints": []
}
- }]
+ },
+ {
+ "template": {
+ "method": "GET",
+ "url": controllerApiConfig.http.url + "/blueprint-model/search/{tags}",
+ "headers": {
+ "accepts": "application/json",
+ "content-type": "application/json",
+ "authorization": controllerApiConfig.http.authToken
+ },
+ "responsePath": "$.*"
+ },
+ "functions": {
+ "getByTags": ["tags"]
+
+ }
+ },
+]
}; \ No newline at end of file
diff --git a/cds-ui/server/src/services/blueprint.service.ts b/cds-ui/server/src/services/blueprint.service.ts
index 970b2afda..0545faca8 100644
--- a/cds-ui/server/src/services/blueprint.service.ts
+++ b/cds-ui/server/src/services/blueprint.service.ts
@@ -4,6 +4,7 @@ import {BlueprintDataSource} from '../datasources';
export interface BlueprintService {
getAllblueprints(): Promise<any>;
+ getByTags(tags: string): Promise<JSON>;
}
export class BlueprintServiceProvider implements Provider<BlueprintService> {
diff --git a/docs/microservices/controllerBlueprintStudioProcessorMS.rst b/docs/microservices/controllerBlueprintStudioProcessorMS.rst
index 683b6943d..9dcd31187 100644
--- a/docs/microservices/controllerBlueprintStudioProcessorMS.rst
+++ b/docs/microservices/controllerBlueprintStudioProcessorMS.rst
@@ -9,31 +9,12 @@ The Controller Blueprint Archive is the overall service design, fully model-driv
The CBA is .zip file which is saved in Controller Blueprint Database.
-Dynamic API:
-------------
-
-The nature of the API request and response is meant to be model driven and dynamic. They both share the same definition.
-
-The actionName, under the actionIdentifiers refers to the name of a Workflow (see workflow)
-
-The content of the payload is what is fully dynamic / model driven.
-
-The first top level element will always be either $actionName-request for a request or $actionName-response for a response.
-
-Then the content within this element is fully based on the workflow input and output.
+Controller Blueprint Microservices:
+-----------------------------------
.. toctree::
:maxdepth: 1
dynamicapi
-
-Enrichment:
------------
-
-Helps to generate complete valid CBA file.
-
-.. toctree::
- :maxdepth: 1
-
enrichment
\ No newline at end of file
diff --git a/docs/microservices/enrichment.rst b/docs/microservices/enrichment.rst
index 55984d77c..1f94556e3 100644
--- a/docs/microservices/enrichment.rst
+++ b/docs/microservices/enrichment.rst
@@ -12,12 +12,14 @@ Once the base CBA zip file is done, the enrichment process will complete the des
The following shows 2 ways to run CBA enrichment
-*REST API request
+REST API request:
+----------------
|image0|
-*CDS UI
+CDS UI:
+------
|image1|
diff --git a/docs/flexibleplugin.rst b/docs/microservices/flexibleplugin.rst
index 5c83ac9b7..5c83ac9b7 100644
--- a/docs/flexibleplugin.rst
+++ b/docs/microservices/flexibleplugin.rst
diff --git a/docs/media/dyanmicapi.JPG b/docs/microservices/media/dyanmicapi.jpg
index 3e00da3e8..3e00da3e8 100644
--- a/docs/media/dyanmicapi.JPG
+++ b/docs/microservices/media/dyanmicapi.jpg
Binary files differ
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
index 5a4f3dea4..347e5eac4 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/ExecutionServiceHandler.kt
@@ -118,7 +118,7 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
return output
} catch (e: Exception) {
log.error("fail processing request id $requestId", e)
- return response(executionServiceInput, e.localizedMessage, true)
+ return response(executionServiceInput, e.localizedMessage ?: e.message ?: e.toString(), true)
}
}
@@ -156,4 +156,4 @@ class ExecutionServiceHandler(private val bluePrintPathConfiguration: BluePrintP
return executionServiceOutput
}
-} \ No newline at end of file
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt
index a04a79921..17e157d15 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingConfig.kt
@@ -1,5 +1,7 @@
package org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api
+import com.fasterxml.jackson.databind.DeserializationFeature
+import com.fasterxml.jackson.databind.ObjectMapper
import org.apache.kafka.clients.CommonClientConfigs
import org.apache.kafka.clients.consumer.ConsumerConfig
import org.apache.kafka.common.serialization.StringDeserializer
@@ -7,10 +9,10 @@ import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInpu
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
-import org.springframework.kafka.annotation.EnableKafka
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory
import org.springframework.kafka.core.ConsumerFactory
import org.springframework.kafka.core.DefaultKafkaConsumerFactory
+import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer2
import org.springframework.kafka.support.serializer.JsonDeserializer
@Configuration
@@ -26,11 +28,20 @@ open class MessagingConfig {
val configProperties = hashMapOf<String, Any>()
configProperties[CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG] = bootstrapServers
configProperties[ConsumerConfig.GROUP_ID_CONFIG] = groupId
- configProperties[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java.name
- configProperties[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = JsonDeserializer::class.java.name
- configProperties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest")
+ configProperties[ConsumerConfig.AUTO_OFFSET_RESET_CONFIG] = "latest"
+ configProperties[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java
+ configProperties[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = ErrorHandlingDeserializer2::class.java
+ configProperties[ErrorHandlingDeserializer2.VALUE_DESERIALIZER_CLASS] = JsonDeserializer::class.java.name
- return DefaultKafkaConsumerFactory(configProperties, StringDeserializer(), JsonDeserializer(ExecutionServiceInput::class.java))
+ val deserializer = JsonDeserializer<ExecutionServiceInput>()
+ deserializer.setRemoveTypeHeaders(true)
+ deserializer.addTrustedPackages("*")
+
+ val jsonDeserializer = JsonDeserializer(ExecutionServiceInput::class.java,
+ ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false))
+
+ return DefaultKafkaConsumerFactory(configProperties, StringDeserializer(),
+ ErrorHandlingDeserializer2<ExecutionServiceInput>(jsonDeserializer))
}
/**
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt
index 1d219a83e..54cc0c129 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/MessagingController.kt
@@ -18,6 +18,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.selfservice.api
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import org.apache.commons.lang3.builder.ToStringBuilder
+import org.apache.kafka.clients.consumer.ConsumerRecord
import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput
import org.onap.ccsdk.cds.blueprintsprocessor.message.service.BluePrintMessageLibPropertyService
import org.slf4j.LoggerFactory
@@ -39,17 +40,15 @@ open class MessagingController(private val propertyService: BluePrintMessageLibP
}
@KafkaListener(topics = ["\${blueprintsprocessor.messageclient.self-service-api.consumerTopic}"])
- open fun receive(input: ExecutionServiceInput) {
-
- log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(input))
+ open fun receive(record: ConsumerRecord<String, ExecutionServiceInput>) {
runBlocking {
- log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(input))
+ log.info("Successfully received a message: {}", ToStringBuilder.reflectionToString(record.value()))
// Process the message.
async {
- processMessage(input)
- }
+ processMessage(record.value())
+ }.await()
}
}
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt
index f7459f522..602033ad9 100644
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/selfservice/api/messaginglib/MessagingControllerTest.kt
@@ -90,7 +90,7 @@ class MessagingControllerTest {
@Autowired
lateinit var webTestClient: WebTestClient
- var receivedEvent: String? = null
+ var event: ExecutionServiceInput? = null
@Before
fun setup() {
@@ -142,11 +142,13 @@ class MessagingControllerTest {
log.info("test-sender sent message='{}'", ToStringBuilder.reflectionToString(input))
Thread.sleep(1000)
+
+ assertNotNull(event)
}
@KafkaListener(topicPartitions = [TopicPartition(topic = "\${blueprintsprocessor.messageclient.self-service-api.topic}", partitionOffsets = [PartitionOffset(partition = "0", initialOffset = "0")])])
- fun receivedEventFromBluePrintProducer(event: ExecutionServiceInput) {
- assertNotNull(event)
+ fun receivedEventFromBluePrintProducer(receivedEvent: ExecutionServiceInput) {
+ event = receivedEvent
}
private fun uploadBluePrint() {
@@ -172,7 +174,7 @@ class MessagingControllerTest {
}
private fun loadCbaArchive():File {
- return Paths.get("./src/test/resources/cba-for-kafka-integration.zip").toFile()
+ return Paths.get("./src/test/resources/cba-for-kafka-integration_enriched.zip").toFile()
}
@Configuration
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip
deleted file mode 100644
index 23070380c..000000000
--- a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration.zip
+++ /dev/null
Binary files differ
diff --git a/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip
new file mode 100755
index 000000000..9581191d7
--- /dev/null
+++ b/ms/blueprintsprocessor/modules/inbounds/selfservice-api/src/test/resources/cba-for-kafka-integration_enriched.zip
Binary files differ