9aed537668c2d89d3f8ec0aeb0d0620fffa6baf2
[so.git] / common / src / main / java / org / onap / so / logging / cxf / interceptor / SOAPLoggingInInterceptor.java
1 package org.onap.so.logging.cxf.interceptor;
2
3
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.UUID;
8 import java.util.stream.Collectors;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.xml.namespace.QName;
11 import org.apache.cxf.binding.soap.SoapMessage;
12 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
13 import org.apache.cxf.interceptor.Fault;
14 import org.apache.cxf.message.Message;
15 import org.apache.cxf.phase.Phase;
16 import org.apache.cxf.service.model.MessageInfo;
17 import org.apache.cxf.service.model.OperationInfo;
18 import org.apache.cxf.transport.http.AbstractHTTPDestination;
19 import org.onap.logging.ref.slf4j.ONAPLogConstants;
20 import org.onap.so.logging.jaxrs.filter.JaxRsFilterLogging;
21 import org.onap.so.logging.jaxrs.filter.MDCSetup;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24 import org.slf4j.MDC;
25 import org.springframework.beans.factory.annotation.Autowired;
26 import org.springframework.stereotype.Component;
27
28 @Component
29 public class SOAPLoggingInInterceptor extends AbstractSoapInterceptor{
30
31     protected static Logger logger = LoggerFactory.getLogger(SOAPLoggingInInterceptor.class);
32     
33     @Autowired
34     MDCSetup mdcSetup;
35     
36     public SOAPLoggingInInterceptor() {
37         super(Phase.READ);
38     }
39
40     @Override
41     public void handleMessage(SoapMessage message) throws Fault {
42         try {
43   
44             Map<String, List<String>> headers  = (Map<String,List<String>>) message.get(Message.PROTOCOL_HEADERS);
45             HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
46             request.getRemoteAddr();
47             
48             setRequestId(headers);
49             setInvocationId(headers);
50             setServiceName(message);
51             setMDCPartnerName(headers);
52             mdcSetup.setServerFQDN();
53             mdcSetup.setClientIPAddress(request);
54             mdcSetup.setInstanceUUID();
55             mdcSetup.setEntryTimeStamp();
56             MDC.put(ONAPLogConstants.MDCs.RESPONSE_STATUS_CODE, "INPROGRESS");
57             logger.info(ONAPLogConstants.Markers.ENTRY, "Entering");
58         } catch (Exception e) {
59             logger.warn("Error in incoming SOAP Message Inteceptor", e);
60         }
61     }
62  
63     private void setServiceName(SoapMessage message) {
64         String requestURI = (String) message.get(Message.REQUEST_URI);
65         MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, requestURI);
66     }
67
68     //CXF Appears to flatten headers to lower case
69     private void setMDCPartnerName(Map<String, List<String>> headers){
70         String partnerName=getValueOrDefault(headers, ONAPLogConstants.Headers.PARTNER_NAME.toLowerCase(),"");
71         MDC.put(ONAPLogConstants.MDCs.PARTNER_NAME,partnerName);
72     }
73
74     private void setInvocationId(Map<String, List<String>> headers) {
75         String invocationId=getValueOrDefault(headers, ONAPLogConstants.Headers.INVOCATION_ID.toLowerCase(),UUID.randomUUID().toString());
76         MDC.put(ONAPLogConstants.MDCs.INVOCATION_ID, invocationId);
77     }
78
79     private void setRequestId(Map<String, List<String>> headers) {
80         String requestId=getValueOrDefault(headers, ONAPLogConstants.Headers.REQUEST_ID.toLowerCase(),UUID.randomUUID().toString());
81         MDC.put(ONAPLogConstants.MDCs.REQUEST_ID,requestId);
82     }
83
84     private String getValueOrDefault(Map<String, List<String>> headers, String headerName, String defaultValue){
85         String headerValue;
86         List<String> headerList=headers.get(headerName);
87         if(headerList != null && !headerList.isEmpty()){
88             headerValue= headerList.get(0);
89             if(headerValue == null || headerValue.isEmpty())
90                 headerValue = defaultValue;
91         }else
92             headerValue = defaultValue;
93         return headerValue;
94     }
95
96 }