This is an automated email from the ASF dual-hosted git repository. grobmeier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-chainsaw.git
commit 2a97d2380e08b28cccb95deff49ca68dab8f08ac Author: Christian Grobmeier <[email protected]> AuthorDate: Wed Dec 20 21:41:54 2023 +0100 added spotbugs annotations, ignored a few warnings that do seem unrelated --- pom.xml | 5 ++ .../chainsaw/LogFilePatternLayoutBuilder.java | 3 + .../log4j/chainsaw/ReceiverConfigurationPanel.java | 42 +++++------ .../apache/log4j/chainsaw/helper/SwingHelper.java | 3 + .../log4j/chainsaw/prefs/SettingsManager.java | 2 + .../java/org/apache/log4j/net/JsonReceiver.java | 6 +- .../org/apache/log4j/net/XMLSocketReceiver.java | 3 + .../apache/log4j/varia/LogFilePatternReceiver.java | 3 + .../org/apache/log4j/xml/LogFileXMLReceiver.java | 83 ++++++++++++---------- 9 files changed, 83 insertions(+), 67 deletions(-) diff --git a/pom.xml b/pom.xml index 020fc39..1fc3948 100644 --- a/pom.xml +++ b/pom.xml @@ -211,6 +211,11 @@ <artifactId>commons-beanutils</artifactId> <version>1.9.4</version> </dependency> + <dependency> + <groupId>com.github.spotbugs</groupId> + <artifactId>spotbugs-annotations</artifactId> + <scope>provided</scope> + </dependency> </dependencies> <reporting> diff --git a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java index 3f35ff4..a753495 100644 --- a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java +++ b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java @@ -16,6 +16,7 @@ */ package org.apache.log4j.chainsaw; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; @@ -132,12 +133,14 @@ public class LogFilePatternLayoutBuilder { return result; } + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better private static Map<String, Map<String, String>> getXMLFileAppenderConfiguration(File file) throws IOException, ParserConfigurationException, SAXException { Map<String, Map<String, String>> result = new HashMap<>(); try (InputStream stream = file.toURI().toURL().openStream()) { InputSource src = new InputSource(stream); src.setSystemId(file.toURI().toURL().toString()); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); DocumentBuilder docBuilder = dbf.newDocumentBuilder(); // docBuilder.setErrorHandler(new SAXErrorHandler()); diff --git a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java index 5a26abc..675d419 100644 --- a/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java +++ b/src/main/java/org/apache/log4j/chainsaw/ReceiverConfigurationPanel.java @@ -16,9 +16,12 @@ */ package org.apache.log4j.chainsaw; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.log4j.chainsaw.helper.SwingHelper; import org.apache.log4j.chainsaw.prefs.SettingsManager; import org.apache.log4j.net.UDPReceiver; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.swing.*; import javax.swing.text.SimpleAttributeSet; @@ -31,12 +34,9 @@ import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.io.File; import java.net.MalformedURLException; -import java.net.URISyntaxException; import java.net.URL; import java.util.List; import java.util.Locale; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; /** @@ -185,6 +185,7 @@ class ReceiverConfigurationPanel extends JPanel { updateEnabledState(log4jConfigReceiverRadioButton); } + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better private JPanel buildDontWarnAndOKPanel() { JPanel panel = new JPanel(new GridBagLayout()); @@ -239,16 +240,19 @@ class ReceiverConfigurationPanel extends JPanel { } }); - saveButton.addActionListener(e -> { - try { - URL url = browseFile("Choose a path and file name to save", false); - if (url != null) { - File file = new File(url.toURI()); - panelModel.setSaveConfigFile(file); + + saveButton.addActionListener(new ActionListener() { + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better + public void actionPerformed(ActionEvent e) { + try { + URL url = browseFile("Choose a path and file name to save", false); + if (url != null) { + File file = new File(url.toURI()); + panelModel.setSaveConfigFile(file); + } + } catch (Exception ex) { + logger.error("Error browsing for log file", ex); } - } catch (Exception ex) { - logger.error( - "Error browsing for log file", ex); } }); return panel; @@ -776,19 +780,5 @@ class ReceiverConfigurationPanel extends JPanel { logFileFormatComboBoxModel.insertElementAt(lastLogFormat, 0); logFileFormatComboBox.setSelectedIndex(0); } - - public boolean isCancelled() { - return cancelled; - } - - public File getLog4jConfigFile() { - try { - URL newConfigurationURL = new URL(log4jConfigURLTextField.getText()); - return new File(newConfigurationURL.toURI()); - } catch (URISyntaxException | MalformedURLException e) { - e.printStackTrace(); - } - return null; - } } } diff --git a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java index c2eb239..cad537b 100644 --- a/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java +++ b/src/main/java/org/apache/log4j/chainsaw/helper/SwingHelper.java @@ -17,6 +17,8 @@ package org.apache.log4j.chainsaw.helper; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; @@ -94,6 +96,7 @@ public final class SwingHelper { return result; } + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better public static File promptForFile(Container parent, String defaultPath, String title, boolean loadDialog) { if (SwingHelper.isMacOSX()) { //use filedialog on mac diff --git a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java index 4532693..99e826b 100644 --- a/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java +++ b/src/main/java/org/apache/log4j/chainsaw/prefs/SettingsManager.java @@ -16,6 +16,7 @@ */ package org.apache.log4j.chainsaw.prefs; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.configuration2.AbstractConfiguration; import org.apache.commons.configuration2.CombinedConfiguration; import org.apache.commons.configuration2.PropertiesConfiguration; @@ -141,6 +142,7 @@ public final class SettingsManager { return combinedConfig; } + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better public AbstractConfiguration getSettingsForReceiverTab(String identifier) { if (tabSettings.containsKey(identifier)) { return tabSettings.get(identifier).tabSettings; diff --git a/src/main/java/org/apache/log4j/net/JsonReceiver.java b/src/main/java/org/apache/log4j/net/JsonReceiver.java index 360b901..04c2a4a 100644 --- a/src/main/java/org/apache/log4j/net/JsonReceiver.java +++ b/src/main/java/org/apache/log4j/net/JsonReceiver.java @@ -22,6 +22,8 @@ import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Iterator; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton; import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEventBuilder; import org.apache.logging.log4j.LogManager; @@ -47,9 +49,6 @@ public class JsonReceiver extends ChainsawReceiverSkeleton implements Runnable, */ public static final String ZONE = "_log4j_json_tcpaccept_receiver.local."; - public JsonReceiver() { - } - @Override public void shutdown() { // mark this as no longer running @@ -105,6 +104,7 @@ public class JsonReceiver extends ChainsawReceiverSkeleton implements Runnable, } @Override + @SuppressFBWarnings public void run() { /** * Ensure we start fresh. diff --git a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java index ca4c382..2637377 100644 --- a/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java +++ b/src/main/java/org/apache/log4j/net/XMLSocketReceiver.java @@ -22,6 +22,8 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.List; import java.util.Vector; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.log4j.chainsaw.receiver.ChainsawReceiverSkeleton; import org.apache.log4j.chainsaw.logevents.ChainsawLoggingEvent; import org.apache.log4j.spi.Decoder; @@ -161,6 +163,7 @@ public class XMLSocketReceiver extends ChainsawReceiverSkeleton implements Runna /** * Loop, accepting new socket connections. */ + @SuppressFBWarnings // TODO: this hsould be a secure socket? public void run() { /** * Ensure we start fresh. diff --git a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java index d384072..9f0f5f3 100644 --- a/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java +++ b/src/main/java/org/apache/log4j/varia/LogFilePatternReceiver.java @@ -18,6 +18,8 @@ package org.apache.log4j.varia; import java.nio.charset.StandardCharsets; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.log4j.helpers.Constants; import org.apache.log4j.rule.ExpressionRule; import org.apache.log4j.rule.Rule; @@ -1039,6 +1041,7 @@ public class LogFilePatternReceiver extends ChainsawReceiverSkeleton { logger.info("activateOptions"); active = true; Runnable runnable = new Runnable() { + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better public void run() { initialize(); while (reader == null) { diff --git a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java index e9f917a..ccff7e1 100644 --- a/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java +++ b/src/main/java/org/apache/log4j/xml/LogFileXMLReceiver.java @@ -17,6 +17,7 @@ package org.apache.log4j.xml; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.log4j.helpers.Constants; import org.apache.log4j.rule.ExpressionRule; import org.apache.log4j.rule.Rule; @@ -242,47 +243,53 @@ public class LogFileXMLReceiver extends ChainsawReceiverSkeleton { @Override public void start() { - Runnable runnable = () -> { - try { - URL url = new URL(fileURL); - host = url.getHost(); - if (host != null && host.isEmpty()) { - host = FILE_KEY; - } - path = url.getPath(); - } catch (MalformedURLException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } + Runnable runnable = new Runnable() { + @Override + @SuppressFBWarnings // TODO: loading files like this is dangerous - at least in web. see if we can do better + public void run() { + { + try { + URL url = new URL(fileURL); + host = url.getHost(); + if (host != null && host.isEmpty()) { + host = FILE_KEY; + } + path = url.getPath(); + } catch (MalformedURLException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } - try { - if (filterExpression != null) { - expressionRule = ExpressionRule.getRule(filterExpression); - } - } catch (Exception e) { - logger.warn("Invalid filter expression: " + filterExpression, e); - } + try { + if (filterExpression != null) { + expressionRule = ExpressionRule.getRule(filterExpression); + } + } catch (Exception e) { + logger.warn("Invalid filter expression: " + filterExpression, e); + } - Class c; - try { - c = Class.forName(decoder); - Object o = c.newInstance(); - if (o instanceof Decoder) { - decoderInstance = (Decoder) o; - } - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + Class c; + try { + c = Class.forName(decoder); + Object o = c.newInstance(); + if (o instanceof Decoder) { + decoderInstance = (Decoder) o; + } + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } - try { - reader = new InputStreamReader(new URL(getFileURL()).openStream()); - process(reader); - } catch (FileNotFoundException fnfe) { - logger.info("file not available"); - } catch (IOException ioe) { - logger.warn("unable to load file", ioe); - return; + try { + reader = new InputStreamReader(new URL(getFileURL()).openStream()); + process(reader); + } catch (FileNotFoundException fnfe) { + logger.info("file not available"); + } catch (IOException ioe) { + logger.warn("unable to load file", ioe); + return; + } + } } }; if (useCurrentThread) {
