1 package org.onap.so.logging.cxf.interceptor;
4 import java.util.Collections;
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;
25 import org.springframework.beans.factory.annotation.Autowired;
26 import org.springframework.stereotype.Component;
29 public class SOAPLoggingInInterceptor extends AbstractSoapInterceptor{
31 protected static Logger logger = LoggerFactory.getLogger(SOAPLoggingInInterceptor.class);
36 public SOAPLoggingInInterceptor() {
41 public void handleMessage(SoapMessage message) throws Fault {
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();
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);
63 private void setServiceName(SoapMessage message) {
64 String requestURI = (String) message.get(Message.REQUEST_URI);
65 MDC.put(ONAPLogConstants.MDCs.SERVICE_NAME, requestURI);
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);
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);
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);
84 private String getValueOrDefault(Map<String, List<String>> headers, String headerName, String defaultValue){
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;
92 headerValue = defaultValue;