Author: sebb
Date: Mon Jun 29 01:55:03 2009
New Revision: 789187

URL: http://svn.apache.org/viewvc?rev=789187&view=rev
Log:
Bug 47338 - XPath Extractor forces retrieval of document DTD

Modified:
    jakarta/jmeter/trunk/docs/images/screenshots/xpath_assertion.png
    jakarta/jmeter/trunk/docs/images/screenshots/xpath_extractor.png
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/XPathAssertion.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XMLConfPanel.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XPathPanel.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
    
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/gui/XPathExtractorGui.java
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pl.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pt_BR.properties
    
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_tr.properties
    jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java
    jakarta/jmeter/trunk/xdocs/changes.xml
    jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_assertion.png
    jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_extractor.png
    jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jakarta/jmeter/trunk/docs/images/screenshots/xpath_assertion.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/xpath_assertion.png?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/docs/images/screenshots/xpath_extractor.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/docs/images/screenshots/xpath_extractor.png?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/XPathAssertion.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/XPathAssertion.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/XPathAssertion.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/XPathAssertion.java
 Mon Jun 29 01:55:03 2009
@@ -60,6 +60,7 @@
     private static final String QUIET_KEY         = "XPath.quiet"; // 
$NON-NLS-1$
     private static final String REPORT_ERRORS_KEY = "XPath.report_errors"; // 
$NON-NLS-1$
     private static final String SHOW_WARNINGS_KEY = "XPath.show_warnings"; // 
$NON-NLS-1$
+    private static final String DOWNLOAD_DTDS     = "XPath.download_dtds"; // 
$NON-NLS-1$
     //- JMX file attributes
 
     public static final String DEFAULT_XPATH = "/";
@@ -91,7 +92,8 @@
         
         try {
             doc = XPathUtil.makeDocument(new 
ByteArrayInputStream(responseData), isValidating(),
-                    isWhitespace(), isNamespace(), isTolerant(), isQuiet(), 
showWarnings() , reportErrors(), isXML);
+                    isWhitespace(), isNamespace(), isTolerant(), isQuiet(), 
showWarnings() , reportErrors(), isXML
+                    , isDownloadDTDs());
         } catch (SAXException e) {
             log.debug("Caught sax exception: " + e);
             result.setError(true);
@@ -298,4 +300,13 @@
     public boolean isQuiet() {
         return getPropertyAsBoolean(QUIET_KEY, true);
     }
+
+    public void setDownloadDTDs(boolean val) {
+        setProperty(DOWNLOAD_DTDS, val, false);
+    }
+    
+    public boolean isDownloadDTDs() {
+        return getPropertyAsBoolean(DOWNLOAD_DTDS, false);
+    }
+
 }

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XMLConfPanel.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XMLConfPanel.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XMLConfPanel.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XMLConfPanel.java
 Mon Jun 29 01:55:03 2009
@@ -27,6 +27,7 @@
 import javax.swing.JPanel;
 
 import org.apache.jmeter.assertions.XPathAssertion;
+import org.apache.jmeter.extractor.XPathExtractor;
 import org.apache.jmeter.util.JMeterUtils;
 
 public class XMLConfPanel extends JPanel {
@@ -37,6 +38,8 @@
     private JCheckBox reportErrors; // Report Tidy errors as Assertion failure?
     
     private JCheckBox showWarnings; // Show Tidy warnings ?
+    
+    private JCheckBox downloadDTDs; // Should we download external DTDs?
 
     /**
      * 
@@ -46,125 +49,62 @@
         init();
     }
 
-    /**
-     * @param isDoubleBuffered
-     */
-    public XMLConfPanel(boolean isDoubleBuffered) {
-        super(isDoubleBuffered);
-        init();
-    }
-
     private void init() {
-        Box tidyOptions = Box.createHorizontalBox();
-        tidyOptions.setBorder(BorderFactory.createEtchedBorder());
-        tidyOptions.add(getTolerant());
         quiet = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_quiet"),true);//$NON-NLS-1$
         reportErrors = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_report_errors"),true);//$NON-NLS-1$
         showWarnings = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_show_warnings"),true);//$NON-NLS-1$
+        namespace = new 
JCheckBox(JMeterUtils.getResString("xml_namespace_button")); //$NON-NLS-1$
+        whitespace = new 
JCheckBox(JMeterUtils.getResString("xml_whitespace_button")); //$NON-NLS-1$
+        validate = new 
JCheckBox(JMeterUtils.getResString("xml_validate_button")); //$NON-NLS-1$
+        validate.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent e) {
+                tolerant();
+            }            
+        });
+        tolerant = new 
JCheckBox(JMeterUtils.getResString("xml_tolerant_button")); //$NON-NLS-1$
+        downloadDTDs = new 
JCheckBox(JMeterUtils.getResString("xml_download_dtds")); //$NON-NLS-1$
+        Box tidyOptions = Box.createHorizontalBox();
+        tidyOptions.setBorder(BorderFactory.createEtchedBorder());
+        tidyOptions.add(tolerant);
         tidyOptions.add(quiet);
         tidyOptions.add(reportErrors);
         tidyOptions.add(showWarnings);
-        add(tidyOptions);
-        add(getNamespace());
-        add(getValidate());
-        add(getWhitespace());
+        
+        Box untidyOptions = Box.createHorizontalBox();
+        untidyOptions.setBorder(BorderFactory.createEtchedBorder());
+        untidyOptions.add(namespace);
+        untidyOptions.add(validate);
+        untidyOptions.add(whitespace);
+        untidyOptions.add(downloadDTDs);
+        
+        Box options = Box.createVerticalBox();
+        options.add(tidyOptions);
+        options.add(untidyOptions);
+        add(options);
         setDefaultValues();
     }
 
     public void setDefaultValues() {
-        setWhitespace(false);
-        setValidate(false);
-        setTolerant(false);
-        setNamespace(false);
+        whitespace.setSelected(false);
+        validate.setSelected(false);
+        tolerant.setSelected(false);
+        namespace.setSelected(false);
         quiet.setSelected(true);
         reportErrors.setSelected(false);
         showWarnings.setSelected(false);
+        downloadDTDs.setSelected(false);
         tolerant();
     }
 
-    /**
-     * @return Returns the namespace.
-     */
-    private JCheckBox getNamespace() {
-        if (namespace == null) {
-            namespace = new 
JCheckBox(JMeterUtils.getResString("xml_namespace_button")); //$NON-NLS-1$
-        }
-        return namespace;
-    }
-
-    /**
-     * @return Returns the tolerant.
-     */
-    private JCheckBox getTolerant() {
-        if (tolerant == null) {
-            tolerant = new 
JCheckBox(JMeterUtils.getResString("xml_tolerant_button")); //$NON-NLS-1$
-            tolerant.addActionListener(new ActionListener() {
-
-                public void actionPerformed(ActionEvent e) {
-                    tolerant();
-                }
-            });
-        }
-        return tolerant;
-    }
-
-    /**
-     * @return Returns the validate.
-     */
-    private JCheckBox getValidate() {
-        if (validate == null) {
-            validate = new 
JCheckBox(JMeterUtils.getResString("xml_validate_button")); //$NON-NLS-1$
-        }
-        return validate;
-    }
-
-    /**
-     * @return Returns the whitespace.
-     */
-    private JCheckBox getWhitespace() {
-        if (whitespace == null) {
-            whitespace = new 
JCheckBox(JMeterUtils.getResString("xml_whitespace_button")); //$NON-NLS-1$
-        }
-        return whitespace;
-    }
-
-    private boolean isNamespace() {
-        return getNamespace().isSelected();
-    }
-
-    private void setNamespace(boolean namespace) {
-        getNamespace().setSelected(namespace);
-    }
-
-    private boolean isTolerant() {
-        return getTolerant().isSelected();
-    }
-
-    private void setTolerant(boolean tolerant) {
-        getTolerant().setSelected(tolerant);
-    }
-
-    private boolean isWhitespace() {
-        return getWhitespace().isSelected();
-    }
-
-    private void setWhitespace(boolean whitespace) {
-        getWhitespace().setSelected(whitespace);
-    }
-
-    private boolean isValidate() {
-        return getValidate().isSelected();
-    }
-
-    private void setValidate(boolean validating) {
-        getValidate().setSelected(validating);
-    }
-
+    // Process tolerant settings
     private void tolerant() {
-        final boolean isTolerant = isTolerant();
-        getValidate().setEnabled(!isTolerant);
-        getWhitespace().setEnabled(!isTolerant);
-        getNamespace().setEnabled(!isTolerant);
+        final boolean isTolerant = tolerant.isSelected();
+        // Non-Tidy options
+        validate.setEnabled(!isTolerant);
+        whitespace.setEnabled(!isTolerant);
+        namespace.setEnabled(!isTolerant);
+        downloadDTDs.setEnabled(!isTolerant);
+        // Tidy options
         quiet.setEnabled(isTolerant);
         reportErrors.setEnabled(isTolerant);
         showWarnings.setEnabled(isTolerant);
@@ -172,24 +112,51 @@
 
     // Called by XPathAssertionGui
     public void modifyTestElement(XPathAssertion assertion) {
-        assertion.setValidating(isValidate());
-        assertion.setWhitespace(isWhitespace());
-        assertion.setTolerant(isTolerant());
-        assertion.setNamespace(isNamespace());
+        assertion.setValidating(validate.isSelected());
+        assertion.setWhitespace(whitespace.isSelected());
+        assertion.setTolerant(tolerant.isSelected());
+        assertion.setNamespace(namespace.isSelected());
+        assertion.setShowWarnings(showWarnings.isSelected());
+        assertion.setReportErrors(reportErrors.isSelected());
+        assertion.setQuiet(quiet.isSelected());
+        assertion.setDownloadDTDs(downloadDTDs.isSelected());
+    }
+
+    // Called by XPathExtractorGui
+    public void modifyTestElement(XPathExtractor assertion) {
+        assertion.setValidating(validate.isSelected());
+        assertion.setWhitespace(whitespace.isSelected());
+        assertion.setTolerant(tolerant.isSelected());
+        assertion.setNameSpace(namespace.isSelected());
         assertion.setShowWarnings(showWarnings.isSelected());
         assertion.setReportErrors(reportErrors.isSelected());
-        assertion.setQuiet(quiet.isSelected());     
+        assertion.setQuiet(quiet.isSelected());
+        assertion.setDownloadDTDs(downloadDTDs.isSelected());
     }
 
     // Called by XPathAssertionGui
     public void configure(XPathAssertion assertion) {
-        setWhitespace(assertion.isWhitespace());
-        setValidate(assertion.isValidating());
-        setTolerant(assertion.isTolerant());
-        setNamespace(assertion.isNamespace());
+        whitespace.setSelected(assertion.isWhitespace());
+        validate.setSelected(assertion.isValidating());
+        tolerant.setSelected(assertion.isTolerant());
+        namespace.setSelected(assertion.isNamespace());
+        quiet.setSelected(assertion.isQuiet());
+        showWarnings.setSelected(assertion.showWarnings());
+        reportErrors.setSelected(assertion.reportErrors());
+        downloadDTDs.setSelected(assertion.isDownloadDTDs());
+        tolerant();
+    }
+
+    // Called by XPathExtractorGui
+    public void configure(XPathExtractor assertion) {
+        whitespace.setSelected(assertion.isWhitespace());
+        validate.setSelected(assertion.isValidating());
+        tolerant.setSelected(assertion.isTolerant());
+        namespace.setSelected(assertion.useNameSpace());
         quiet.setSelected(assertion.isQuiet());
         showWarnings.setSelected(assertion.showWarnings());
         reportErrors.setSelected(assertion.reportErrors());
+        downloadDTDs.setSelected(assertion.isDownloadDTDs());
         tolerant();
     }
 }

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XPathPanel.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XPathPanel.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XPathPanel.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/assertions/gui/XPathPanel.java
 Mon Jun 29 01:55:03 2009
@@ -18,7 +18,6 @@
 
 package org.apache.jmeter.assertions.gui;
 
-import java.awt.LayoutManager;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
@@ -42,6 +41,7 @@
 public class XPathPanel extends JPanel {
     private static final Logger log = LoggingManager.getLoggerForClass();
 
+    // Lazily constructed. Does not matter if it is constructed more than once.
     private static Document testDoc;
 
     private JCheckBox negated;
@@ -58,31 +58,6 @@
         init();
     }
 
-    /**
-     * @param isDoubleBuffered
-     */
-    public XPathPanel(boolean isDoubleBuffered) {
-        super(isDoubleBuffered);
-        init();
-    }
-
-    /**
-     * @param layout
-     */
-    public XPathPanel(LayoutManager layout) {
-        super(layout);
-        init();
-    }
-
-    /**
-     * @param layout
-     * @param isDoubleBuffered
-     */
-    public XPathPanel(LayoutManager layout, boolean isDoubleBuffered) {
-        super(layout, isDoubleBuffered);
-        init();
-    }
-
     private void init() {
         Box hbox = Box.createHorizontalBox();
         hbox.add(Box.createHorizontalGlue());
@@ -194,8 +169,8 @@
     }
 
     /**
-     * Test weather an XPath is valid. It seems the Xalan has no easy way to
-     * check, so this creates a test document, then tries to evaluate the 
xpath.
+     * Test whether an XPath is valid. It seems the Xalan has no easy way to
+     * check, so this creates a dummy test document, then tries to evaluate 
the xpath against it.
      * 
      * @param xpathString
      *            XPath String to validate
@@ -208,7 +183,7 @@
         boolean success = true;
         try {
             if (testDoc == null) {
-                testDoc = XPathUtil.makeDocumentBuilder(false, false, 
false).newDocument();
+                testDoc = XPathUtil.makeDocumentBuilder(false, false, false, 
false).newDocument();
                 Element el = testDoc.createElement("root"); //$NON-NLS-1$
                 testDoc.appendChild(el);
 
@@ -218,8 +193,8 @@
                 // because eval will throw an exception
                 // if xpath is invalid, but whatever, better
                 // safe
-                log.warn("xpath eval was null ");
                 ret = "xpath eval was null";
+                log.warn(ret+" "+xpathString);
                 success = false;
             }
 

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/XPathExtractor.java
 Mon Jun 29 01:55:03 2009
@@ -80,6 +80,9 @@
     private static final String QUIET           = "XPathExtractor.quiet"; // 
$NON-NLS-1$
     private static final String REPORT_ERRORS   = 
"XPathExtractor.report_errors"; // $NON-NLS-1$
     private static final String SHOW_WARNINGS   = 
"XPathExtractor.show_warnings"; // $NON-NLS-1$
+    private static final String DOWNLOAD_DTDS   = 
"XPathExtractor.download_dtds"; // $NON-NLS-1$
+    private static final String WHITESPACE      = "XPathExtractor.whitespace"; 
// $NON-NLS-1$
+    private static final String VALIDATE        = "XPathExtractor.validate"; 
// $NON-NLS-1$
     //- JMX file attributes
 
 
@@ -107,9 +110,9 @@
         }catch(IOException e){// e.g. DTD not reachable
             final String errorMessage = "IOException on ("+getXPathQuery()+")";
             log.error(errorMessage,e);
-            AssertionResult ass = new AssertionResult("IOException"); // 
$NON-NLS-1$
-            ass.setFailure(true);
-            ass.setFailureMessage(e.getLocalizedMessage());
+            AssertionResult ass = new AssertionResult(getName());
+            ass.setError(true);
+            ass.setFailureMessage(new StringBuffer("IOException: 
").append(e.getLocalizedMessage()).toString());
             previousResult.addAssertionResult(ass);
             previousResult.setSuccessful(false);
         } catch (ParserConfigurationException e) {// Should not happen
@@ -222,7 +225,8 @@
       ByteArrayInputStream in = new ByteArrayInputStream(utf8data);
       boolean isXML = JOrphanUtils.isXML(utf8data);
       // this method assumes UTF-8 input data
-      return 
XPathUtil.makeDocument(in,false,false,useNameSpace(),isTolerant(),isQuiet(),showWarnings(),reportErrors(),isXML);
+      return 
XPathUtil.makeDocument(in,false,false,useNameSpace(),isTolerant(),isQuiet(),showWarnings(),reportErrors()
+              ,isXML, isDownloadDTDs());
     }
 
     /**
@@ -274,4 +278,28 @@
             vars.remove(concat(refName, "2"));
         }
     }
+
+    public void setWhitespace(boolean selected) {
+        setProperty(WHITESPACE, selected, false);        
+    }
+
+    public boolean isWhitespace() {
+        return getPropertyAsBoolean(WHITESPACE, false);
+    }
+
+    public void setValidating(boolean selected) {
+        setProperty(VALIDATE, selected);
+    }
+
+    public boolean isValidating() {
+        return getPropertyAsBoolean(VALIDATE, false);
+    }
+
+    public void setDownloadDTDs(boolean selected) {
+        setProperty(DOWNLOAD_DTDS, selected, false);
+    }
+
+    public boolean isDownloadDTDs() {
+        return getPropertyAsBoolean(DOWNLOAD_DTDS, false);
+    }
 }

Modified: 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/gui/XPathExtractorGui.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/gui/XPathExtractorGui.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/gui/XPathExtractorGui.java
 (original)
+++ 
jakarta/jmeter/trunk/src/components/org/apache/jmeter/extractor/gui/XPathExtractorGui.java
 Mon Jun 29 01:55:03 2009
@@ -21,15 +21,13 @@
 import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.util.List;
 
 import javax.swing.BorderFactory;
 import javax.swing.Box;
-import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 
+import org.apache.jmeter.assertions.gui.XMLConfPanel;
 import org.apache.jmeter.extractor.XPathExtractor;
 import org.apache.jmeter.processor.gui.AbstractPostProcessorGui;
 import org.apache.jmeter.testelement.TestElement;
@@ -39,8 +37,6 @@
  * GUI for XPathExtractor class.
  */
  /* This file is inspired by RegexExtractor.
- * author <a href="mailto:hpal...@gitus.cz";>Henryk Paluch</a>
- *            of <a href="http://www.gitus.com";>Gitus a.s.</a>
  * See Bugzilla: 37183
  */
 public class XPathExtractorGui extends AbstractPostProcessorGui {
@@ -51,19 +47,8 @@
 
     private JLabeledTextField refNameField;
 
-    private JCheckBox tolerant; // Should Tidy be run?
-
-    private JCheckBox quiet; // Should Tidy be quiet?
-
-    private JCheckBox reportErrors; // Report Tidy errors as Assertion failure?
-
-    private JCheckBox showWarnings; // Show Tidy warnings ?
-
-    private JCheckBox nameSpace; // Should parser be namespace aware?
-
-    // We could perhaps add validate/whitespace options, but they're probably 
not necessary for
-    // the XPathExtractor
-
+    private XMLConfPanel xml;
+    
     public String getLabelResource() {
         return "xpath_extractor_title"; //$NON-NLS-1$
     }
@@ -79,12 +64,7 @@
         xpathQueryField.setText(xpe.getXPathQuery());
         defaultField.setText(xpe.getDefaultValue());
         refNameField.setText(xpe.getRefName());
-        tolerant.setSelected(xpe.isTolerant());
-        quiet.setSelected(xpe.isQuiet());
-        showWarnings.setSelected(xpe.showWarnings());
-        reportErrors.setSelected(xpe.reportErrors());
-        nameSpace.setSelected(xpe.useNameSpace());
-        setTidyOptions(tolerant.isSelected());
+        xml.configure(xpe);
     }
 
 
@@ -94,9 +74,6 @@
         return extractor;
     }
 
-    /* (non-Javadoc)
-     * @see 
org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(org.apache.jmeter.testelement.TestElement)
-     */
     public void modifyTestElement(TestElement extractor) {
         super.configureTestElement(extractor);
         if ( extractor instanceof XPathExtractor){
@@ -104,11 +81,7 @@
             xpath.setDefaultValue(defaultField.getText());
             xpath.setRefName(refNameField.getText());
             xpath.setXPathQuery(xpathQueryField.getText());
-            xpath.setTolerant(tolerant.isSelected());
-            xpath.setNameSpace(nameSpace.isSelected());
-            xpath.setShowWarnings(showWarnings.isSelected());
-            xpath.setReportErrors(reportErrors.isSelected());
-            xpath.setQuiet(quiet.isSelected());
+            xml.modifyTestElement(xpath);
         }
     }
 
@@ -121,18 +94,7 @@
         xpathQueryField.setText(""); // $NON-NLS-1$
         defaultField.setText(""); // $NON-NLS-1$
         refNameField.setText(""); // $NON-NLS-1$
-        tolerant.setSelected(false);
-        nameSpace.setSelected(true);
-        quiet.setSelected(true);
-        reportErrors.setSelected(false);
-        showWarnings.setSelected(false);
-    }
-
-    private void setTidyOptions(boolean tidySelected){
-        quiet.setEnabled(tidySelected);
-        reportErrors.setEnabled(tidySelected);
-        showWarnings.setEnabled(tidySelected);
-        nameSpace.setEnabled(!tidySelected);
+        xml.setDefaultValues();
     }
 
     private void init() {
@@ -141,30 +103,10 @@
 
         Box box = Box.createVerticalBox();
         box.add(makeTitlePanel());
-        Box options = Box.createHorizontalBox();
-        tolerant = new 
JCheckBox(JMeterUtils.getResString("xpath_extractor_tolerant"));//$NON-NLS-1$
-        quiet = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_quiet"),true);//$NON-NLS-1$
-        reportErrors = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_report_errors"),true);//$NON-NLS-1$
-        showWarnings = new 
JCheckBox(JMeterUtils.getResString("xpath_tidy_show_warnings"),true);//$NON-NLS-1$
-        nameSpace = new 
JCheckBox(JMeterUtils.getResString("xpath_extractor_namespace"),true);//$NON-NLS-1$
-
-        tolerant.addActionListener(
-            new ActionListener(){
-                public void actionPerformed(ActionEvent e) {
-                    setTidyOptions(tolerant.isSelected());
-        }});
-
-        setTidyOptions(tolerant.isSelected());
-
-        Box tidyOptions = Box.createHorizontalBox();
-        tidyOptions.add(tolerant);
-        tidyOptions.add(quiet);
-        tidyOptions.add(reportErrors);
-        tidyOptions.add(showWarnings);
-        tidyOptions.setBorder(BorderFactory.createEtchedBorder());
-        options.add(tidyOptions);
-        options.add(nameSpace);
-        box.add(options);
+        xml = new XMLConfPanel();
+        
xml.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),
 JMeterUtils
+                .getResString("xpath_assertion_option"))); //$NON-NLS-1$
+        box.add(xml);
         add(box, BorderLayout.NORTH);
         add(makeParameterPanel(), BorderLayout.CENTER);
     }

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
(original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties 
Mon Jun 29 01:55:03 2009
@@ -921,8 +921,9 @@
 wsdl_url=WSDL URL
 wsdl_url_error=The WSDL was emtpy.
 xml_assertion_title=XML Assertion
+xml_download_dtds=Fetch external DTDs
 xml_namespace_button=Use Namespaces
-xml_tolerant_button=Tolerant XML/HTML Parser
+xml_tolerant_button=Use Tidy (tolerant parser)
 xml_validate_button=Validate XML
 xml_whitespace_button=Ignore Whitespace
 xmlschema_assertion_label=File Name:
@@ -941,10 +942,8 @@
 xpath_assertion_validation=Validate the XML against the DTD
 xpath_assertion_whitespace=Ignore whitespace
 xpath_expression=XPath expression to match against
-xpath_extractor_namespace=Use Namespaces?
 xpath_extractor_query=XPath query:
 xpath_extractor_title=XPath Extractor
-xpath_extractor_tolerant=Use Tidy ?
 xpath_file_file_name=XML file to get values from 
 xpath_tidy_quiet=Quiet
 xpath_tidy_report_errors=Report errors

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
 Mon Jun 29 01:55:03 2009
@@ -786,10 +786,8 @@
 xpath_assertion_valid=Expression XPath valide
 xpath_assertion_validation=Valider le code XML \u00E0 travers le fichier DTD
 xpath_assertion_whitespace=Ignorer les espaces
-xpath_extractor_namespace=Utiliser les espaces de noms ?
 xpath_extractor_query=Requ\u00EAte XPath \:
 xpath_extractor_title=Extracteur XPath
-xpath_extractor_tolerant=Utiliser Tidy ?
 xpath_tidy_quiet=Silencieux
 xpath_tidy_report_errors=Rapporter les erreurs
 xpath_tidy_show_warnings=Afficher les alertes

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pl.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pl.properties?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pl.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pl.properties
 Mon Jun 29 01:55:03 2009
@@ -894,10 +894,8 @@
 xpath_assertion_validation=Validate the XML against the DTD
 xpath_assertion_whitespace=Ignore whitespace
 xpath_expression=XPath expression to match against
-xpath_extractor_namespace=Use Namespaces?
 xpath_extractor_query=XPath query:
 xpath_extractor_title=XPath Extractor
-xpath_extractor_tolerant=Use Tidy ?
 xpath_file_file_name=XML file to get values from
 xpath_tidy_quiet=Quiet
 xpath_tidy_report_errors=Report errors

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pt_BR.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pt_BR.properties?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pt_BR.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_pt_BR.properties
 Mon Jun 29 01:55:03 2009
@@ -940,10 +940,8 @@
 xpath_assertion_validation=Validar XML de acordo com DTD
 xpath_assertion_whitespace=Ignorar espa\u00E7os em branco
 xpath_expression=Express\u00F5es XPath que ser\u00E3o combinadas
-xpath_extractor_namespace=Usar espa\u00E7o de nomes (Namespaces)?
 xpath_extractor_query=Consulta XPath
 xpath_extractor_title=Extractor XPath
-xpath_extractor_tolerant=Usar Tidy?
 xpath_file_file_name=Arquivo XML de onde os valores ser\u00E3o extra\u00EDdos
 xpath_tidy_quiet=Quieto
 xpath_tidy_report_errors=Reportar erros

Modified: 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_tr.properties
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_tr.properties?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_tr.properties
 (original)
+++ 
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_tr.properties
 Mon Jun 29 01:55:03 2009
@@ -875,10 +875,8 @@
 xpath_assertion_validation=XML'i DTD'ye g\u00F6re kontrol et
 xpath_assertion_whitespace=G\u00F6r\u00FCnmeyen Karakterleri Yoksay
 xpath_expression=Kar\u015F\u0131la\u015Ft\u0131r\u0131lacak XPath ifadesi
-xpath_extractor_namespace=Namespace kullan?
 xpath_extractor_query=XPath sorgusu\:
 xpath_extractor_title=XPath \u00C7\u0131kar\u0131c\u0131
-xpath_extractor_tolerant=D\u00FCzenli kullan ?
 xpath_file_file_name=De\u011Ferlerin okunaca\u011F\u0131 XML dosyas\u0131
 xpath_tidy_quiet=Sessiz
 xpath_tidy_report_errors=Hatalar\u0131 raporla

Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java 
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/util/XPathUtil.java Mon Jun 
29 01:55:03 2009
@@ -18,6 +18,7 @@
 
 package org.apache.jmeter.util;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
@@ -31,7 +32,9 @@
 import org.apache.log.Logger;
 import org.w3c.dom.Document;
 import org.w3c.tidy.Tidy;
+import org.xml.sax.EntityResolver;
 import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
@@ -45,6 +48,7 @@
         super();
     }
 
+    //@GuardedBy("this")
     private static DocumentBuilderFactory documentBuilderFactory;
 
     /**
@@ -77,71 +81,29 @@
      * @param validate should the parser validate documents?
      * @param whitespace should the parser eliminate whitespace in element 
content?
      * @param namespace should the parser be namespace aware?
+     * @param downloadDTDs if true, parser should attempt to resolve external 
entities
      * @return document builder
      * @throws ParserConfigurationException
      */
-    public static synchronized DocumentBuilder makeDocumentBuilder(boolean 
validate, boolean whitespace, boolean namespace)
+    public static DocumentBuilder makeDocumentBuilder(boolean validate, 
boolean whitespace, boolean namespace, boolean downloadDTDs)
             throws ParserConfigurationException {
-        // N.B. the factory is re-usable, but not necessarily thread-safe, so
-        // the method is synchronized to protect the creation of the builder
         DocumentBuilder builder = makeDocumentBuilderFactory(validate, 
whitespace, namespace).newDocumentBuilder();
         builder.setErrorHandler(new MyErrorHandler(validate, false));
+        if (!downloadDTDs){
+            EntityResolver er = new EntityResolver(){
+                public InputSource resolveEntity(String publicId, String 
systemId)
+                        throws SAXException, IOException {
+                    return new InputSource(new ByteArrayInputStream(new 
byte[]{}));
+                }
+            };
+            builder.setEntityResolver(er);
+        }
         return builder;
     }
 
     /**
      * Utility function to get new Document
      *
-     * @param stream
-     *            Document Input stream
-     * @param validate
-     *            Validate Document (not Tidy)
-     * @param whitespace
-     *            Element Whitespace (not Tidy)
-     * @param namespace
-     *            Is Namespace aware.
-     * @param tolerant
-     *            Is tolerant - i.e. use the Tidy parser
-     *
-     * @return document
-     * @throws ParserConfigurationException
-     * @throws IOException
-     * @throws SAXException
-     * @throws TidyException
-     */
-    public static Document makeDocument(InputStream stream, boolean validate, 
boolean whitespace, boolean namespace,
-            boolean tolerant) throws ParserConfigurationException, 
SAXException, IOException, TidyException {
-        return makeDocument(stream, validate, whitespace, namespace, tolerant, 
true, false, false, false);
-
-    }
-
-    /**
-     * Utility function to get new Document
-     *
-     * @param stream - Document Input stream
-     * @param validate - Validate Document (not Tidy)
-     * @param whitespace - Element Whitespace (not Tidy)
-     * @param namespace - Is Namespace aware. (not Tidy)
-     * @param tolerant - Is tolerant - i.e. use the Tidy parser
-     * @param quiet - set Tidy quiet
-     * @param showWarnings - set Tidy warnings
-     * @param report_errors - throw TidyException if Tidy detects an error
-     * @return document
-     * @throws ParserConfigurationException
-     * @throws SAXException
-     * @throws IOException
-     * @throws TidyException
-     */
-    public static Document makeDocument(InputStream stream, boolean validate, 
boolean whitespace, boolean namespace,
-            boolean tolerant, boolean quiet, boolean showWarnings, boolean 
report_errors)
-            throws ParserConfigurationException, SAXException, IOException, 
TidyException {
-                return makeDocument(stream, validate, whitespace, namespace,
-                        tolerant, quiet, showWarnings, report_errors, false);
-            }
-
-    /**
-     * Utility function to get new Document
-     *
      * @param stream - Document Input stream
      * @param validate - Validate Document (not Tidy)
      * @param whitespace - Element Whitespace (not Tidy)
@@ -151,6 +113,7 @@
      * @param showWarnings - set Tidy warnings
      * @param report_errors - throw TidyException if Tidy detects an error
      * @param isXml - is document already XML (Tidy only)
+     * @param downloadDTDs - if true, try to download external DTDs
      * @return document
      * @throws ParserConfigurationException
      * @throws SAXException
@@ -158,13 +121,13 @@
      * @throws TidyException
      */
     public static Document makeDocument(InputStream stream, boolean validate, 
boolean whitespace, boolean namespace,
-            boolean tolerant, boolean quiet, boolean showWarnings, boolean 
report_errors, boolean isXml)
+            boolean tolerant, boolean quiet, boolean showWarnings, boolean 
report_errors, boolean isXml, boolean downloadDTDs)
             throws ParserConfigurationException, SAXException, IOException, 
TidyException {
         Document doc;
         if (tolerant) {
             doc = tidyDoc(stream, quiet, showWarnings, report_errors, isXml);
         } else {
-            doc = makeDocumentBuilder(validate, whitespace, 
namespace).parse(stream);
+            doc = makeDocumentBuilder(validate, whitespace, namespace, 
downloadDTDs).parse(stream);
         }
         return doc;
     }

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Mon Jun 29 01:55:03 2009
@@ -60,6 +60,7 @@
 <h2>Incompatible changes</h2>
 
 <p>
+The XPath Assertion and XPath Extractor elements no longer fetch external DTDs 
by default; this can be changed in the GUI.
 </p>
 
 <h2>Bug fixes</h2>
@@ -119,6 +120,7 @@
 
 <h3>Assertions, Config, Pre- &amp; Post-Processors</h3>
 <ul>
+<li>Bug 47338 - XPath Extractor forces retrieval of document DTD</li>
 </ul>
 
 <h3>Functions</h3>

Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_assertion.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_assertion.png?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_extractor.png
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/xpath_extractor.png?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
Binary files - no diff available.

Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: 
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=789187&r1=789186&r2=789187&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Mon Jun 29 
01:55:03 2009
@@ -3326,14 +3326,15 @@
 
 <properties>
 <property name="Name"          required="No">Descriptive name for this element 
that is shown in the tree.</property>
-<property name="Tolerant Parser"       required="Yes">Be tolerant of XML/HTML 
errors (i.e. use Tidy)</property>
-<property name="Quiet" required="If tolerant is selected">Sets the Tidy Quiet 
flag</property>
-<property name="Report Errors" required="If tolerant is selected">If a Tidy 
error occurs, then set the Assertion accordingly</property>
-<property name="Show warnings" required="If tolerant is selected">Sets the 
Tidy showWarnings option</property>
-<property name="Use Namespaces"        required="No">Should namespaces be 
honoured?</property>
-<property name="Validate XML"  required="No">Check the document against its 
schema.</property>
-<property name="XPath Assertion"               required="Yes">XPath to match 
in the document.</property>
-<property name="Ignore Whitespace"     required="No">Ignore Element 
Whitespace.</property>
+<property name="Use Tidy (tolerant parser)"    required="Yes">Use Tidy, i.e. 
be tolerant of XML/HTML errors</property>
+<property name="Quiet" required="If Tidy is selected">Sets the Tidy Quiet 
flag</property>
+<property name="Report Errors" required="If Tidy is selected">If a Tidy error 
occurs, then set the Assertion accordingly</property>
+<property name="Show warnings" required="If Tidy is selected">Sets the Tidy 
showWarnings option</property>
+<property name="Use Namespaces"        required="If Tidy is not 
selected">Should namespaces be honoured?</property>
+<property name="Validate XML"  required="If Tidy is not selected">Check the 
document against its schema.</property>
+<property name="Ignore Whitespace"  required="If Tidy is not selected">Ignore 
Element Whitespace.</property>
+<property name="Fetch External DTDs"  required="If Tidy is not selected">If 
selected, external DTDs are fetched.</property>
+<property name="XPath Assertion"       required="Yes">XPath to match in the 
document.</property>
 <property name="True if nothing matches"       required="No">True if a XPath 
expression is not matched</property>
 </properties>
 <note>
@@ -3915,16 +3916,16 @@
    </description>
    <properties>
         <property name="Name" required="No">Descriptive name for this element 
that is shown in the tree.</property>
-          <property name="Use Tidy" required="Yes">If checked use Tidy to 
parse HTML response into XHTML.
+          <property name="Use Tidy (tolerant parser)" required="Yes">If 
checked use Tidy to parse HTML response into XHTML.
           <ul>
                   <li>"Use Tidy" should be checked on for HTML response. Such 
response is converted to valid XHTML (XML compatible HTML) using Tidy</li>
                   <li>"Use Tidy" should be unchecked for both XHTML or XML 
response (for example RSS)</li>
           </ul>
           </property>
-        <property name="Quiet" required="If Tidy is selected">Sets the Tidy 
Quiet flag</property>
-        <property name="Report Errors" required="If Tidy is selected">If a 
Tidy error occurs, then add an Assertion showing the details</property>
-        <property name="Show warnings" required="If Tidy is selected">Sets the 
Tidy showWarnings option</property>
-        <property name="Use Namespace?" required="Yes">
+<property name="Quiet"  required="If Tidy is selected">Sets the Tidy Quiet 
flag</property>
+<property name="Report Errors"  required="If Tidy is selected">If a Tidy error 
occurs, then set the Assertion accordingly</property>
+<property name="Show warnings"  required="If Tidy is selected">Sets the Tidy 
showWarnings option</property>
+<property name="Use Namespaces" required="If Tidy is not selected">
         If checked, then the XML parser will use namespace resolution.
         Note that currently only namespaces declared on the root element will 
be recognised.
         A later version of JMeter may support user-definition of additional 
workspace names.
@@ -3939,8 +3940,11 @@
         where "uri-for-namespace" is the uri for the "mynamespace" namespace.
         
         (not applicable if Tidy is selected)
-        </property>
-        <property name="Reference Name" required="Yes">The name of the JMeter 
variable in which to store the result.</property>
+</property>
+    <property name="Validate XML"   required="If Tidy is not selected">Check 
the document against its schema.</property>
+    <property name="Ignore Whitespace"  required="If Tidy is not 
selected">Ignore Element Whitespace.</property>
+    <property name="Fetch External DTDs"  required="If Tidy is not 
selected">If selected, external DTDs are fetched.</property>
+    <property name="Reference Name" required="Yes">The name of the JMeter 
variable in which to store the result.</property>
        <property name="XPath Query" required="Yes">Element query in XPath 
language. Can return more than one match. </property>
        <property name="Default Value" required="">Default value returned when 
no match found</property>
    </properties>



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org

Reply via email to