84605ff53838bd0dcd9d9e1533938777222ad582
[appc.git] / appc-dispatcher / appc-request-handler / appc-request-handler-core / src / main / java / org / onap / appc / requesthandler / conv / Converter.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * ================================================================================
9  * Modifications Copyright (C) 2018 Orange
10  * =============================================================================
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  * 
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  * 
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  * 
23  * ============LICENSE_END=========================================================
24  */
25
26 package org.onap.appc.requesthandler.conv;
27
28 import com.att.aft.dme2.internal.apache.commons.lang3.StringUtils;
29 import com.att.eelf.configuration.EELFLogger;
30 import com.att.eelf.configuration.EELFManager;
31
32 import com.fasterxml.jackson.annotation.JsonIgnore;
33 import com.fasterxml.jackson.annotation.JsonInclude;
34 import com.fasterxml.jackson.annotation.JsonProperty;
35 import com.fasterxml.jackson.annotation.JsonValue;
36 import com.fasterxml.jackson.core.JsonProcessingException;
37 import com.fasterxml.jackson.databind.MapperFeature;
38 import com.fasterxml.jackson.databind.ObjectMapper;
39 import com.fasterxml.jackson.databind.ObjectWriter;
40 import com.fasterxml.jackson.databind.SerializationFeature;
41 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.*;
42 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;
43 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeaderBuilder;
44 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags;
45 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.FlagsBuilder;
46 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.Status;
47 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.status.StatusBuilder;
48 import org.opendaylight.yangtools.concepts.Builder;
49 import org.opendaylight.yangtools.yang.binding.DataContainer;
50 import org.onap.appc.domainmodel.lcm.ResponseContext;
51 import org.onap.appc.domainmodel.lcm.VNFOperation;
52 import org.onap.appc.requesthandler.impl.AbstractRequestHandlerImpl;
53 import org.onap.appc.requesthandler.impl.DmaapOutgoingMessage;
54
55 import java.text.ParseException;
56 import java.text.SimpleDateFormat;
57 import java.util.Date;
58 import java.util.TimeZone;
59
60
61 public class Converter {
62     private static final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
63     private final static String DMaaP_ROOT_VALUE = "output";
64     private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT);
65     private final static EELFLogger logger = EELFManager.getInstance().getLogger(Converter.class);
66     static {
67         isoFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
68     }
69
70     public static Builder<?> convAsyncResponseToBuilder(VNFOperation vnfOperation, String rpcName, ResponseContext response) {
71         Builder<?> outObj = null;
72         if(response == null){
73             throw new IllegalArgumentException("empty asyncResponse");
74         }
75         if(vnfOperation == null){
76             throw new IllegalArgumentException("empty asyncResponse.action");
77         }
78         logger.debug("Entered Converter.convAsyncResponseToBuilder()");
79         Action action = Action.valueOf(vnfOperation.name());
80         CommonHeader commonHeader = convAsyncResponseTorev160108CommonHeader(response);
81         Status status = convAsyncResponseTorev160108Status(response);
82         Payload payload = convAsyncResponseTorev160108Payload(response);
83         logger.debug("Extracted action, status, payload ");
84         switch (action){
85             case Rollback:
86                 outObj = new RollbackOutputBuilder();
87                 ((RollbackOutputBuilder)outObj).setCommonHeader(commonHeader);
88                 ((RollbackOutputBuilder)outObj).setStatus(status);
89                 return outObj;
90             case Snapshot:
91                 outObj = new SnapshotOutputBuilder();
92                 ((SnapshotOutputBuilder)outObj).setCommonHeader(commonHeader);
93                 ((SnapshotOutputBuilder)outObj).setStatus(status);
94                 try {
95                     ((SnapshotOutputBuilder) outObj).setSnapshotId(response.getAdditionalContext().get("output.snapshot-id"));
96                 } catch (NullPointerException ignored) {
97                     // in case of negative response, snapshotID does not populated, so just ignore NPL
98                 }
99                 return outObj;
100             case Audit:
101                 outObj = new AuditOutputBuilder();
102                 ((AuditOutputBuilder)outObj).setCommonHeader(commonHeader);
103                 ((AuditOutputBuilder)outObj).setStatus(status);
104                 ((AuditOutputBuilder)outObj).setPayload(payload);
105                 return outObj;
106             case HealthCheck:
107                 outObj = new HealthCheckOutputBuilder();
108                 ((HealthCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
109                 ((HealthCheckOutputBuilder)outObj).setStatus(status);
110                 ((HealthCheckOutputBuilder)outObj).setPayload(payload);
111                 logger.debug("In HealthCheck case- created outObj, returning");
112                 return outObj;
113             case LiveUpgrade:
114                 outObj = new LiveUpgradeOutputBuilder();
115                 ((LiveUpgradeOutputBuilder)outObj).setCommonHeader(commonHeader);
116                 ((LiveUpgradeOutputBuilder)outObj).setStatus(status);
117                 return outObj;
118             case Lock:
119                 outObj = new LockOutputBuilder();
120                 ((LockOutputBuilder)outObj).setCommonHeader(commonHeader);
121                 ((LockOutputBuilder)outObj).setStatus(status);
122                 return outObj;
123             case Configure:
124                 outObj = new ConfigureOutputBuilder();
125                 ((ConfigureOutputBuilder)outObj).setCommonHeader(commonHeader);
126                 ((ConfigureOutputBuilder)outObj).setStatus(status);
127                 ((ConfigureOutputBuilder)outObj).setPayload(payload);
128                 return outObj;
129             case ConfigModify:
130                 outObj = new ConfigModifyOutputBuilder();
131                 ((ConfigModifyOutputBuilder)outObj).setCommonHeader(commonHeader);
132                 ((ConfigModifyOutputBuilder)outObj).setStatus(status);
133                 ((ConfigModifyOutputBuilder)outObj).setPayload(payload);
134                 return outObj;
135             case ConfigScaleOut:
136                 outObj = new ConfigScaleOutOutputBuilder();
137                 ((ConfigScaleOutOutputBuilder)outObj).setCommonHeader(commonHeader);
138                 ((ConfigScaleOutOutputBuilder)outObj).setStatus(status);
139                 ((ConfigScaleOutOutputBuilder)outObj).setPayload(payload);
140                 return outObj;
141             case ConfigRestore:
142                 outObj = new ConfigRestoreOutputBuilder();
143                 ((ConfigRestoreOutputBuilder)outObj).setCommonHeader(commonHeader);
144                 ((ConfigRestoreOutputBuilder)outObj).setStatus(status);
145                 ((ConfigRestoreOutputBuilder)outObj).setPayload(payload);
146                 return outObj;
147             case SoftwareUpload:
148                 outObj = new SoftwareUploadOutputBuilder();
149                 ((SoftwareUploadOutputBuilder)outObj).setCommonHeader(commonHeader);
150                 ((SoftwareUploadOutputBuilder)outObj).setStatus(status);
151                 return outObj;
152             case Stop:
153                 outObj = new StopOutputBuilder();
154                 ((StopOutputBuilder)outObj).setCommonHeader(commonHeader);
155                 ((StopOutputBuilder)outObj).setStatus(status);
156                 return outObj;
157             case Sync:
158                 outObj = new SyncOutputBuilder();
159                 ((SyncOutputBuilder)outObj).setCommonHeader(commonHeader);
160                 ((SyncOutputBuilder)outObj).setStatus(status);
161                 ((SyncOutputBuilder)outObj).setPayload(payload);
162                 return outObj;
163             case Terminate:
164                 outObj = new TerminateOutputBuilder();
165                 ((TerminateOutputBuilder)outObj).setCommonHeader(commonHeader);
166                 ((TerminateOutputBuilder)outObj).setStatus(status);
167                 return outObj;
168             case Test:
169                 outObj = new TestOutputBuilder();
170                 ((TestOutputBuilder)outObj).setCommonHeader(commonHeader);
171                 ((TestOutputBuilder)outObj).setStatus(status);
172                 return outObj;
173             case Unlock:
174                 outObj = new UnlockOutputBuilder();
175                 ((UnlockOutputBuilder)outObj).setCommonHeader(commonHeader);
176                 ((UnlockOutputBuilder)outObj).setStatus(status);
177                 return outObj;
178             case Restart:
179                 outObj = new RestartOutputBuilder();
180                 ((RestartOutputBuilder)outObj).setCommonHeader(commonHeader);
181                 ((RestartOutputBuilder)outObj).setStatus(status);
182                 return outObj;
183             case Rebuild:
184                 outObj = new RebuildOutputBuilder();
185                 ((RebuildOutputBuilder)outObj).setCommonHeader(commonHeader);
186                 ((RebuildOutputBuilder)outObj).setStatus(status);
187                 return outObj;
188             case Reboot:
189                 outObj = new RebootOutputBuilder();
190                 ((RebootOutputBuilder)outObj).setCommonHeader(commonHeader);
191                 ((RebootOutputBuilder)outObj).setStatus(status);
192                 return outObj;
193             case Migrate:
194                 outObj = new MigrateOutputBuilder();
195                 ((MigrateOutputBuilder)outObj).setCommonHeader(commonHeader);
196                 ((MigrateOutputBuilder)outObj).setStatus(status);
197                 return outObj;
198             case Evacuate:
199                 outObj = new EvacuateOutputBuilder();
200                 ((EvacuateOutputBuilder)outObj).setCommonHeader(commonHeader);
201                 ((EvacuateOutputBuilder)outObj).setStatus(status);
202                 return outObj;
203             case ConfigBackup:
204                 outObj = new ConfigBackupOutputBuilder();
205                 ((ConfigBackupOutputBuilder)outObj).setCommonHeader(commonHeader);
206                 ((ConfigBackupOutputBuilder)outObj).setStatus(status);
207                 ((ConfigBackupOutputBuilder)outObj).setPayload(payload);
208                 return outObj;
209             case ConfigBackupDelete:
210                 outObj = new ConfigBackupDeleteOutputBuilder();
211                 ((ConfigBackupDeleteOutputBuilder)outObj).setCommonHeader(commonHeader);
212                 ((ConfigBackupDeleteOutputBuilder)outObj).setStatus(status);
213                 ((ConfigBackupDeleteOutputBuilder)outObj).setPayload(payload);
214                 return outObj;
215             case ConfigExport:
216                 outObj = new ConfigExportOutputBuilder();
217                 ((ConfigExportOutputBuilder)outObj).setCommonHeader(commonHeader);
218                 ((ConfigExportOutputBuilder)outObj).setStatus(status);
219                 return outObj;
220             case Start:
221                 outObj = new StartOutputBuilder();
222                 ((StartOutputBuilder)outObj).setCommonHeader(commonHeader);
223                 ((StartOutputBuilder)outObj).setStatus(status);
224                 return outObj;
225             case StopApplication:
226                 outObj = new StopApplicationOutputBuilder();
227                 ((StopApplicationOutputBuilder)outObj).setCommonHeader(commonHeader);
228                 ((StopApplicationOutputBuilder)outObj).setStatus(status);
229                 return outObj;
230             case StartApplication:
231                 outObj = new StartApplicationOutputBuilder();
232                 ((StartApplicationOutputBuilder)outObj).setCommonHeader(commonHeader);
233                 ((StartApplicationOutputBuilder)outObj).setStatus(status);
234                 return outObj;
235     case QuiesceTraffic:
236                 outObj = new QuiesceTrafficOutputBuilder();
237                 ((QuiesceTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
238                 ((QuiesceTrafficOutputBuilder)outObj).setStatus(status);
239                 return outObj;
240             case ResumeTraffic:
241                 outObj = new ResumeTrafficOutputBuilder();
242                 ((ResumeTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
243                 ((ResumeTrafficOutputBuilder)outObj).setStatus(status);
244                 return outObj;
245             case UpgradeSoftware:
246                 outObj = new UpgradeSoftwareOutputBuilder();
247                 ((UpgradeSoftwareOutputBuilder)outObj).setCommonHeader(commonHeader);
248                 ((UpgradeSoftwareOutputBuilder)outObj).setStatus(status);
249                 return outObj;
250             case UpgradePostCheck:
251                 outObj = new UpgradePostCheckOutputBuilder();
252                 ((UpgradePostCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
253                 ((UpgradePostCheckOutputBuilder)outObj).setStatus(status);
254                 ((UpgradePostCheckOutputBuilder)outObj).setPayload(payload);
255                 return outObj;
256             case UpgradeBackup:
257                 outObj = new UpgradeBackupOutputBuilder();
258                 ((UpgradeBackupOutputBuilder)outObj).setCommonHeader(commonHeader);
259                 ((UpgradeBackupOutputBuilder)outObj).setStatus(status);
260                 return outObj;
261             case UpgradeBackout:
262                 outObj = new UpgradeBackoutOutputBuilder();
263                 ((UpgradeBackoutOutputBuilder)outObj).setCommonHeader(commonHeader);
264                 ((UpgradeBackoutOutputBuilder)outObj).setStatus(status);
265                 return outObj;
266             case UpgradePreCheck:
267                 outObj = new UpgradePreCheckOutputBuilder();
268                 ((UpgradePreCheckOutputBuilder)outObj).setCommonHeader(commonHeader);
269                 ((UpgradePreCheckOutputBuilder)outObj).setStatus(status);
270                 ((UpgradePreCheckOutputBuilder)outObj).setPayload(payload);
271                 return outObj;
272             case AttachVolume:
273                 outObj = new AttachVolumeOutputBuilder();
274                 ((AttachVolumeOutputBuilder)outObj).setCommonHeader(commonHeader);
275                 ((AttachVolumeOutputBuilder)outObj).setStatus(status);
276                 return outObj;  
277             case DetachVolume:
278                 outObj = new DetachVolumeOutputBuilder();
279                 ((DetachVolumeOutputBuilder)outObj).setCommonHeader(commonHeader);
280                 ((DetachVolumeOutputBuilder)outObj).setStatus(status);
281                 return outObj;
282             case DistributeTraffic:
283                 outObj = new DistributeTrafficOutputBuilder();
284                 ((DistributeTrafficOutputBuilder)outObj).setCommonHeader(commonHeader);
285                 ((DistributeTrafficOutputBuilder)outObj).setStatus(status);
286                 return outObj;
287             default:
288                 throw new IllegalArgumentException(action+" action is not supported");
289         }
290     }
291
292     public static Payload convAsyncResponseTorev160108Payload(ResponseContext inObj)  {
293         logger.debug("Entering convAsyncResponseTorev160108Payload" );
294         Payload payload = null;
295         if(inObj.getPayload() != null) {
296             payload = new Payload(inObj.getPayload());
297         }
298         logger.debug("Exiting convAsyncResponseTorev160108Payload" );
299         return payload;
300     }
301
302     public static String convPayloadObjectToJsonString(Object inObj) throws ParseException {
303         String payloadAsString = null;
304         if(inObj != null) {
305
306                 if(inObj instanceof String){
307                     payloadAsString = (String)inObj;
308                 }else {
309                     try {
310                         ObjectMapper objectMapper = new ObjectMapper();
311                         payloadAsString = objectMapper.writeValueAsString(inObj);
312                     } catch (JsonProcessingException e) {
313                         String errMsg = "Error serialize payload json to string";
314                         throw new ParseException(errMsg + "-" + e.toString(), 0);
315                     }
316                 }
317         }
318         return payloadAsString;
319     }
320
321     public static Status convAsyncResponseTorev160108Status(ResponseContext inObj) {
322         logger.debug("Entering convAsyncResponseTorev160108Status");
323         StatusBuilder statusBuilder = new StatusBuilder();
324         statusBuilder.setCode(inObj.getStatus().getCode());
325         statusBuilder.setMessage(inObj.getStatus().getMessage());
326         logger.debug("Exiting convAsyncResponseTorev160108Status");
327         return statusBuilder.build();
328     }
329
330     public static CommonHeader convAsyncResponseTorev160108CommonHeader(ResponseContext inObj) {
331         logger.debug("Entered into convAsyncResponseTorev160108CommonHeader");
332         CommonHeader outObj = null;
333         if(inObj == null){
334             throw new IllegalArgumentException("empty asyncResponse");
335         }
336
337         CommonHeaderBuilder commonHeaderBuilder = new CommonHeaderBuilder();
338         org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags commonHeaderFlags;
339         if(inObj.getCommonHeader().getFlags() != null){
340             commonHeaderFlags = Converter.convFlagsMapTorev160108Flags(inObj.getCommonHeader().getFlags());
341             commonHeaderBuilder.setFlags(commonHeaderFlags);
342         }
343
344         logger.debug("Before setApiVer");
345         commonHeaderBuilder.setApiVer(inObj.getCommonHeader().getApiVer());
346         commonHeaderBuilder.setRequestId(inObj.getCommonHeader().getRequestId());
347         if(inObj.getCommonHeader().getSubRequestId() != null){
348             commonHeaderBuilder.setSubRequestId(inObj.getCommonHeader().getSubRequestId());
349         }
350         logger.debug("Before getOriginatorId");
351         if(inObj.getCommonHeader().getOriginatorId() != null){
352             commonHeaderBuilder.setOriginatorId(inObj.getCommonHeader().getOriginatorId());
353         }
354         logger.debug("Before getTimeStamp");
355         if(inObj.getCommonHeader().getTimeStamp() != null){
356             String zuluTimestampStr = Converter.convDateToZuluString(inObj.getCommonHeader().getTimeStamp());
357             logger.debug("After invoking convDateToZuluString()");
358             ZULU zuluTimestamp = new ZULU(zuluTimestampStr);
359             logger.debug("After ZULU()");
360             commonHeaderBuilder.setTimestamp(zuluTimestamp);
361         }
362         outObj = commonHeaderBuilder.build();
363         logger.debug("Exiting from convAsyncResponseTorev160108CommonHeader: Returning outObj::"+outObj.toString());
364         return outObj;
365
366     }
367
368     public static String convDateToZuluString(Date timeStamp) {
369         return isoFormatter.format(timeStamp);
370     }
371
372     public static org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags
373     convFlagsMapTorev160108Flags(org.onap.appc.domainmodel.lcm.Flags flags) {
374         Flags rev160108flags;
375         boolean anyFlag = false;
376         FlagsBuilder flagsBuilder = new FlagsBuilder();
377         /*
378          * TODO: The below flags are related to APP-C request and should not be sent back - uncomment when response flags are introduced.
379          */
380         /*
381         if(flags.containsKey(FORCE_FLAG)){
382             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Force force =
383                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Force.valueOf(flags.get(FORCE_FLAG).toString());
384             flagsBuilder.setForce(force);
385             anyFlag = true;
386         }
387         if(flags.containsKey(MODE_FLAG)){
388             org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Mode mode =
389                     org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.common.header.Flags.Mode.valueOf(flags.get(MODE_FLAG).toString());
390             flagsBuilder.setMode(mode);
391             anyFlag = true;
392         }
393         if(flags.containsKey(TTL_FLAG)){
394             flagsBuilder.setTtl(Integer.valueOf(flags.get(TTL_FLAG).toString()));
395             anyFlag = true;
396         }
397         if(anyFlag){
398             rev160108flags = flagsBuilder.build();
399         }
400          */
401
402         rev160108flags = flagsBuilder.build();
403         return rev160108flags;
404     }
405
406     public static String convAsyncResponseToJsonStringBody(VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse) throws JsonProcessingException {
407         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
408         Object message = builder.build();
409         ObjectMapper objectMapper = new ObjectMapper();
410         objectMapper.addMixInAnnotations(message.getClass(), MixInFlagsMessage.class);
411         objectMapper.addMixInAnnotations(CommonHeader.class, MixInCommonHeader.class);
412         objectMapper.addMixInAnnotations(Flags.class, MixIn.class);
413         objectMapper.addMixInAnnotations(Status.class, MixIn.class);
414         objectMapper.addMixInAnnotations(Payload.class, MixIn.class);
415         objectMapper.addMixInAnnotations(ZULU.class, MixIn.class);
416
417 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY,true)
418         ObjectWriter writer = objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL).configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY,true)
419                 .writer(SerializationFeature.WRAP_ROOT_VALUE).withRootName(DMaaP_ROOT_VALUE).withoutFeatures(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
420         return writer.writeValueAsString(message);
421     }
422
423     public static String convAsyncResponseToDmaapOutgoingMessageJsonString(VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse) throws JsonProcessingException {
424         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
425         DmaapOutgoingMessage dmaapOutgoingMessage = convAsyncResponseToDmaapOutgoingMessage(vnfOperation, rpcName, asyncResponse);
426         ObjectMapper objectMapper = new ObjectMapper();
427         objectMapper.addMixInAnnotations(dmaapOutgoingMessage.getBody().getOutput().getClass(), MixInFlagsMessage.class);
428         objectMapper.addMixInAnnotations(CommonHeader.class, MixInCommonHeader.class);
429         objectMapper.addMixInAnnotations(Flags.class, MixIn.class);
430         objectMapper.addMixInAnnotations(Status.class, MixIn.class);
431         objectMapper.addMixInAnnotations(Payload.class, MixIn.class);
432         objectMapper.addMixInAnnotations(ZULU.class, MixIn.class);
433
434 //                .configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY,true)
435         ObjectWriter writer = objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL).configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY,true).writer();
436         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessageJsonString()");
437         return writer.writeValueAsString(dmaapOutgoingMessage);
438     }
439
440     public static DmaapOutgoingMessage convAsyncResponseToDmaapOutgoingMessage(VNFOperation vnfOperation, String rpcName, ResponseContext asyncResponse) throws JsonProcessingException {
441         logger.debug("Entered Converter.convAsyncResponseToDmaapOutgoingMessage()");
442         DmaapOutgoingMessage outObj = new DmaapOutgoingMessage();
443         String correlationID = getCorrelationID(asyncResponse);
444         outObj.setCorrelationID(correlationID);
445         outObj.setType("response");
446         outObj.setRpcName(rpcName);
447         logger.debug("In onverter.convAsyncResponseToDmaapOutgoingMessage() before invoking convAsyncResponseToBuilder");
448         Builder<?> builder = Converter.convAsyncResponseToBuilder(vnfOperation, rpcName, asyncResponse);
449         Object messageBody = builder.build();
450         DmaapOutgoingMessage.Body body = new DmaapOutgoingMessage.Body(messageBody);
451         outObj.setBody(body);
452         logger.debug("Exiting Converter.convAsyncResponseToDmaapOutgoingMessage():messageBody is :::"+body.toString());
453         return outObj;
454     }
455
456     private static String getCorrelationID(ResponseContext context) {
457         return context.getCommonHeader().getRequestId()
458                 + (context.getCommonHeader().getSubRequestId() == null ?
459                     "":"-" + context.getCommonHeader().getSubRequestId());
460     }
461
462     abstract class MixIn {
463         @JsonIgnore
464         abstract Class<? extends DataContainer> getImplementedInterface(); // to be removed during serialization
465
466         @JsonValue
467         abstract java.lang.String getValue();
468     }
469     abstract class MixInCommonHeader extends MixIn {
470         @JsonProperty("api-ver")
471         abstract java.lang.String getApiVer();
472         @JsonProperty("originator-id")
473         abstract java.lang.String getOriginatorId();
474         @JsonProperty("request-id")
475         abstract java.lang.String getRequestId();
476         @JsonProperty("sub-request-id")
477         abstract java.lang.String getSubRequestId();
478
479     }
480     abstract class MixInFlagsMessage extends MixIn {
481         @JsonProperty("common-header")
482         abstract  CommonHeader getCommonHeader();
483     }
484 }