You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2017/02/17 02:07:01 UTC

[2/2] cxf git commit: Revert some of the changes to logging feature and fix the issues using existing concepts

Revert some of the changes to logging feature and fix the issues using existing concepts

# Conflicts:
#	rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java
#	rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java
#	rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/8c1459e3
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/8c1459e3
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/8c1459e3

Branch: refs/heads/3.1.x-fixes
Commit: 8c1459e3399647467ae01f9f2d04b9a9e8853ea0
Parents: 868f248
Author: Daniel Kulp <dk...@apache.org>
Authored: Thu Feb 16 16:24:05 2017 -0500
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Feb 16 17:12:21 2017 -0500

----------------------------------------------------------------------
 .../apache/cxf/ext/logging/LoggingFeature.java  |   6 -
 .../cxf/ext/logging/LoggingInInterceptor.java   | 172 ++++++-------------
 .../org/apache/cxf/ext/logging/WireTapIn.java   |  10 +-
 .../java/org/apache/cxf/jaxws/ServiceImpl.java  |   3 +-
 .../ws/addr_fromjava/WSAFromJavaTest.java       |   4 +-
 5 files changed, 67 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/8c1459e3/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java
----------------------------------------------------------------------
diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java
index 1e34887..6d383ee 100644
--- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java
+++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java
@@ -49,21 +49,17 @@ public class LoggingFeature extends AbstractFeature {
     private LogEventSender sender;
     private LoggingInInterceptor in;
     private LoggingOutInterceptor out;
-    private WireTapIn wireTapIn;
     private PrettyLoggingFilter prettyFilter;
 
     public LoggingFeature() {
         this.sender = new Slf4jEventSender();
         prettyFilter = new PrettyLoggingFilter(sender);
-        wireTapIn = new WireTapIn();
         in = new LoggingInInterceptor(prettyFilter);
         out = new LoggingOutInterceptor(prettyFilter);
     }
     
     @Override
     protected void initializeProvider(InterceptorProvider provider, Bus bus) {
-        
-        provider.getInInterceptors().add(wireTapIn);
         provider.getInInterceptors().add(in);
         provider.getInFaultInterceptors().add(in);
 
@@ -74,13 +70,11 @@ public class LoggingFeature extends AbstractFeature {
     public void setLimit(int limit) {
         in.setLimit(limit);
         out.setLimit(limit);
-        wireTapIn.setLimit(limit);
     }
     
     public void setInMemThreshold(long inMemThreshold) {
         in.setInMemThreshold(inMemThreshold);
         out.setInMemThreshold(inMemThreshold);
-        wireTapIn.setThreshold(inMemThreshold);
     }
     
     public void setSender(LogEventSender sender) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/8c1459e3/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java
----------------------------------------------------------------------
diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java
index 0643bc2..da2afa1 100644
--- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java
+++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingInInterceptor.java
@@ -18,25 +18,22 @@
  */
 package org.apache.cxf.ext.logging;
 
-import java.io.InputStream;
+import java.io.IOException;
 import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.SequenceInputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.ext.logging.event.DefaultLogEventMapper;
-import org.apache.cxf.ext.logging.event.EventType;
 import org.apache.cxf.ext.logging.event.LogEvent;
 import org.apache.cxf.ext.logging.event.LogEventSender;
 import org.apache.cxf.ext.logging.event.PrintWriterEventSender;
 import org.apache.cxf.ext.logging.slf4j.Slf4jEventSender;
-import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.io.CachedOutputStream;
 import org.apache.cxf.io.CachedWriter;
-import org.apache.cxf.io.DelegatingInputStream;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
@@ -47,144 +44,85 @@ import org.apache.cxf.phase.PhaseInterceptor;
  */
 @NoJSR250Annotations
 public class LoggingInInterceptor extends AbstractLoggingInterceptor {
-    class SendLogEventInterceptor extends AbstractPhaseInterceptor<Message> {
-        SendLogEventInterceptor() {
-            super(Phase.PRE_INVOKE);
+    class LoggingInFaultInterceptor extends AbstractPhaseInterceptor<Message> {
+        LoggingInFaultInterceptor() {
+            super(Phase.RECEIVE);
         }
         @Override
         public void handleMessage(Message message) throws Fault {
-            LogEvent event = message.get(LogEvent.class);
-            if (event != null) {
-                DefaultLogEventMapper mapper = new DefaultLogEventMapper();
-                mapper.setEpInfo(message, event);
-                event.setType(mapper.getEventType(message));
-                message.remove(LogEvent.class);
-                sender.send(event);
-            }
-        }  
+        }
+        @Override
+        public void handleFault(Message message) throws Fault {
+            LoggingInInterceptor.this.handleMessage(message);
+        }
     }
     
+    
     public LoggingInInterceptor() {
         this(new Slf4jEventSender());
     }
+    public LoggingInInterceptor(LogEventSender sender) {
+        super(Phase.PRE_INVOKE, sender);
+    }
     public LoggingInInterceptor(PrintWriter writer) {
         this(new PrintWriterEventSender(writer));
     }
-    public LoggingInInterceptor(LogEventSender sender) {
-        super(Phase.RECEIVE, sender);
-    }
     public Collection<PhaseInterceptor<? extends Message>> getAdditionalInterceptors() {
-        PhaseInterceptor<Message> intc = new SendLogEventInterceptor();
-        java.util.Set<PhaseInterceptor<? extends Message>> ret = new java.util.HashSet<>();
-        ret.add(intc);
+        Collection<PhaseInterceptor<? extends Message>> ret = new ArrayList<>();
+        ret.add(new WireTapIn(limit, threshold));
+        ret.add(new LoggingInFaultInterceptor());
         return ret;
     }
-    
-    
-    public void handleFault(Message message) {
-        LogEvent event = message.get(LogEvent.class);
-        if (event != null) {
-            DefaultLogEventMapper mapper = new DefaultLogEventMapper();
-            mapper.setEpInfo(message, event);
-            event.setType(EventType.FAULT_IN);
-            message.remove(LogEvent.class);
-            sender.send(event);
-        }
-    }
+
     public void handleMessage(Message message) throws Fault {
-        LogEvent event = message.get(LogEvent.class);
-        if (event == null) {
-            createExchangeId(message);
-            event = new DefaultLogEventMapper().map(message);
-            if (shouldLogContent(event)) {
-                addContent(message, event);
-            } else {
-                event.setPayload(AbstractLoggingInterceptor.CONTENT_SUPPRESSED);
-            }
-            // at this point, we have the payload.  However, we may not have the endpoint yet. Delay sending 
-            // the event till a little bit later 
-            message.put(LogEvent.class, event);
+        createExchangeId(message);
+        final LogEvent event = new DefaultLogEventMapper().map(message);
+        if (shouldLogContent(event)) {
+            addContent(message, event);
+        } else {
+            event.setPayload(AbstractLoggingInterceptor.CONTENT_SUPPRESSED);
         }
+        sender.send(event);
     }
 
     private void addContent(Message message, final LogEvent event) {
-        InputStream is = message.getContent(InputStream.class);
-        if (is != null) {
-            logInputStream(message, is, event);
-        } else {
-            Reader reader = message.getContent(Reader.class);
-            if (reader != null) {
-                logReader(message, reader, event);
-            }
-        }
-    }
-    
-    protected void logInputStream(Message message, InputStream is, LogEvent event) {
-        CachedOutputStream bos = new CachedOutputStream();
-        if (threshold > 0) {
-            bos.setThreshold(threshold);
-        }
-        String encoding = event.getEncoding();
         try {
-            // use the appropriate input stream and restore it later
-            InputStream bis = is instanceof DelegatingInputStream 
-                ? ((DelegatingInputStream)is).getInputStream() : is;
-            
-
-            //only copy up to the limit since that's all we need to log
-            //we can stream the rest
-            IOUtils.copyAtLeast(bis, bos, limit == -1 ? Integer.MAX_VALUE : limit);
-            bos.flush();
-            bis = new SequenceInputStream(bos.getInputStream(), bis);
-            
-            // restore the delegating input stream or the input stream
-            if (is instanceof DelegatingInputStream) {
-                ((DelegatingInputStream)is).setInputStream(bis);
-            } else {
-                message.setContent(InputStream.class, bis);
-            }
-
-            if (bos.getTempFile() != null) {
-                //large thing on disk...
-                event.setFullContentFile(bos.getTempFile());
-            }
-            if (bos.size() > limit && limit != -1) {
-                event.setTruncated(true);
-            }
-            
-            StringBuilder builder = new StringBuilder(limit);
-            if (StringUtils.isEmpty(encoding)) {
-                bos.writeCacheTo(builder, limit);
+            CachedOutputStream cos = message.getContent(CachedOutputStream.class);
+            if (cos != null) {
+                handleOutputStream(event, message, cos);
             } else {
-                bos.writeCacheTo(builder, encoding, limit);
+                CachedWriter writer = message.getContent(CachedWriter.class);
+                if (writer != null) {
+                    handleWriter(event, writer);
+                }
             }
-            bos.close();
-            event.setPayload(builder.toString());
-        } catch (Exception e) {
+        } catch (IOException e) {
             throw new Fault(e);
         }
     }
 
-    protected void logReader(Message message, Reader reader, LogEvent event) {
-        try {
-            CachedWriter writer = new CachedWriter();
-            IOUtils.copyAndCloseInput(reader, writer);
-            message.setContent(Reader.class, writer.getReader());
-            
-            if (writer.getTempFile() != null) {
-                //large thing on disk...
-                event.setFullContentFile(writer.getTempFile());
-            }
-            if (writer.size() > limit && limit != -1) {
-                event.setTruncated(true);
-            }
-            int max = writer.size() > limit ? (int)limit : (int)writer.size();
-            StringBuilder b = new StringBuilder(max);
-            writer.writeCacheTo(b);
-            event.setPayload(b.toString());            
-        } catch (Exception e) {
-            throw new Fault(e);
+    private void handleOutputStream(final LogEvent event, Message message, CachedOutputStream cos) throws IOException {
+        String encoding = (String)message.get(Message.ENCODING);
+        if (StringUtils.isEmpty(encoding)) {
+            encoding = StandardCharsets.UTF_8.name();
         }
+        StringBuilder payload = new StringBuilder();
+        cos.writeCacheTo(payload, encoding, limit);
+        cos.close();
+        event.setPayload(payload.toString());
+        boolean isTruncated = cos.size() > limit && limit != -1;
+        event.setTruncated(isTruncated);
+        event.setFullContentFile(cos.getTempFile());
+    }
+
+    private void handleWriter(final LogEvent event, CachedWriter writer) throws IOException {
+        boolean isTruncated = writer.size() > limit && limit != -1;
+        StringBuilder payload = new StringBuilder();
+        writer.writeCacheTo(payload, limit);
+        event.setPayload(payload.toString());
+        event.setTruncated(isTruncated);
+        event.setFullContentFile(writer.getTempFile());
     }
 
+
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/8c1459e3/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/WireTapIn.java
----------------------------------------------------------------------
diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/WireTapIn.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/WireTapIn.java
index e6b8508..5e117a2 100644
--- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/WireTapIn.java
+++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/WireTapIn.java
@@ -33,6 +33,8 @@ import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
 
 public class WireTapIn extends AbstractPhaseInterceptor<Message> {
+    private static final String WIRE_TAP_STARTED = WireTapIn.class.getName() + ".Started";
+    
     private long threshold = -1;
     private int limit = AbstractLoggingInterceptor.DEFAULT_LIMIT;
 
@@ -42,12 +44,18 @@ public class WireTapIn extends AbstractPhaseInterceptor<Message> {
      *
      * @param logMessageContent the log message content
      */
-    public WireTapIn() {
+    public WireTapIn(int limit, long threshold) {
         super(Phase.RECEIVE);
+        this.limit = limit;
+        this.threshold = threshold;
     }
 
     @Override
     public void handleMessage(final Message message) throws Fault {
+        if (message.containsKey(WIRE_TAP_STARTED)) {
+            return;
+        }
+        message.put(WIRE_TAP_STARTED, Boolean.TRUE);
         try {
             InputStream is = message.getContent(InputStream.class);
             if (is != null) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/8c1459e3/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
index df22406..10a2a4b 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
@@ -129,8 +129,7 @@ public class ServiceImpl extends ServiceDelegate {
             initialize(b, url, f);
         }
     }
-    
-    void initialize(Bus b, URL url, WebServiceFeature ... f) {
+    final void initialize(Bus b, URL url, WebServiceFeature ... f) {
         if (b == null) {
             b = BusFactory.getThreadDefaultBus(true);
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/8c1459e3/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
----------------------------------------------------------------------
diff --git a/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java b/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
index 23e9978..cf54e1c 100644
--- a/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
+++ b/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
@@ -131,8 +131,8 @@ public class WSAFromJavaTest extends AbstractWSATestBase {
             assert false;
         }
 
-        assertTrue(output.toString().indexOf("http://cxf.apache.org/input") != -1);
-        assertTrue(input.toString().indexOf("http://cxf.apache.org/fault3") != -1);
+        assertTrue(output.toString(), output.toString().indexOf("http://cxf.apache.org/input") != -1);
+        assertTrue(input.toString(), input.toString().indexOf("http://cxf.apache.org/fault3") != -1);
     }
 
     @Test