Author: milamber Date: Sun Sep 18 02:46:02 2011 New Revision: 1172170 URL: http://svn.apache.org/viewvc?rev=1172170&view=rev Log: WebService(SOAP) Request - Re-organize GUI for better design and user-friendly
Modified: 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/protocol/http/org/apache/jmeter/protocol/http/control/gui/WebServiceSamplerGui.java jakarta/jmeter/trunk/xdocs/changes.xml jakarta/jmeter/trunk/xdocs/images/screenshots/webservice_sampler.png jakarta/jmeter/trunk/xdocs/usermanual/build-ws-test-plan.xml jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml 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=1172170&r1=1172169&r2=1172170&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 Sun Sep 18 02:46:02 2011 @@ -268,7 +268,7 @@ generator_cnf_msg=Could not find the gen generator_illegal_msg=Could not access the generator class due to IllegalAccessException. generator_instantiate_msg=Could not create an instance of the generator parser. Please make sure the generator implements Generator interface. get_xml_from_file=File with SOAP XML Data (overrides above text) -get_xml_from_random=Message Folder +get_xml_from_random=Message(s) Folder graph_choose_graphs=Graphs to Display graph_full_results_title=Graph Full Results graph_results_average=Average @@ -1038,7 +1038,10 @@ web_testing_title=HTTP Request web_server_timeout_connect=Connect: web_server_timeout_response=Response: web_server_timeout_title=Timeouts (milliseconds) +webservice_configuration_wizard=WSDL helper +webservice_get_xml_from_random_title=Use random messages SOAP webservice_methods=Web Methods +webservice_message_soap=WebService message webservice_proxy_host=Proxy Host webservice_proxy_note=If Use HTTP Proxy is checked, but no host or port are provided, the sampler webservice_proxy_note2=will look at command line options. If no proxy host or port are provided by 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=1172170&r1=1172169&r2=1172170&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 Sun Sep 18 02:46:02 2011 @@ -237,7 +237,7 @@ generator_cnf_msg=N'a pas p\u00FB trouve generator_illegal_msg=N'a pas p\u00FB acc\u00E9der \u00E0 la classes g\u00E9n\u00E9ratrice \u00E0 cause d'une IllegalAccessException. generator_instantiate_msg=N'a pas p\u00FB cr\u00E9er une instance du parseur g\u00E9n\u00E9rateur. Assurez-vous que le g\u00E9n\u00E9rateur impl\u00E9mente l'interface Generator. get_xml_from_file=Fichier avec les donn\u00E9es XML SOAP (remplace le texte ci-dessus) -get_xml_from_random=R\u00E9pertoire de fichier(s) message SOAP \: +get_xml_from_random=R\u00E9pertoire contenant les fichier(s) \: graph_choose_graphs=Graphique \u00E0 afficher graph_full_results_title=Graphique de r\u00E9sultats complets graph_results_average=Moyenne @@ -943,7 +943,10 @@ web_testing_concurrent_download=Utiliser web_testing_embedded_url_pattern=Les URL \u00E0 inclure doivent correspondre \u00E0 \: web_testing_retrieve_images=R\u00E9cup\u00E9rer les ressources incluses web_testing_title=Requ\u00EAte HTTP -webservice_methods=M\u00E9thode WebService \: +webservice_configuration_wizard=Assistant de configuration WSDL +webservice_get_xml_from_random_title=Utiliser al\u00E9atoirement des messages SOAP +webservice_methods=M\u00E9thode(s) WebService \: +webservice_message_soap=Message WebService webservice_proxy_host=H\u00F4te proxy webservice_proxy_note=Si 'utiliser un proxy HTTP' est coch\u00E9e, mais qu'aucun h\u00F4te ou port est fournit, l'\u00E9chantillon webservice_proxy_note2=regardera les options de ligne de commandes. Si aucun h\u00F4te ou port du proxy sont fournit @@ -951,7 +954,7 @@ webservice_proxy_note3=non plus, il \u00 webservice_proxy_port=Port proxy webservice_sampler_title=Requ\u00EAte WebService (SOAP) webservice_soap_action=Action SOAP \: -webservice_timeout=D\u00E9lai \: +webservice_timeout=D\u00E9lai expiration \: webservice_use_proxy=Utiliser un proxy HTTP while_controller_label=Condition (fonction ou variable) \: while_controller_title=Contr\u00F4leur Tant Que Modified: jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/WebServiceSamplerGui.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/WebServiceSamplerGui.java?rev=1172170&r1=1172169&r2=1172170&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/WebServiceSamplerGui.java (original) +++ jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/gui/WebServiceSamplerGui.java Sun Sep 18 02:46:02 2011 @@ -20,29 +20,36 @@ package org.apache.jmeter.protocol.http. import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.event.ActionEvent; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; -import javax.swing.JOptionPane; import javax.swing.JLabel; +import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import org.apache.commons.lang.ArrayUtils; +import org.apache.jmeter.gui.util.FilePanel; +import org.apache.jmeter.gui.util.HorizontalPanel; +import org.apache.jmeter.protocol.http.control.AuthManager; import org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase; import org.apache.jmeter.protocol.http.sampler.WebServiceSampler; +import org.apache.jmeter.protocol.http.util.WSDLHelper; import org.apache.jmeter.samplers.gui.AbstractSamplerGui; import org.apache.jmeter.testelement.TestElement; import org.apache.jmeter.util.JMeterUtils; -import org.apache.jmeter.gui.util.FilePanel; import org.apache.jorphan.gui.JLabeledChoice; -import org.apache.jorphan.gui.JLabeledTextArea; import org.apache.jorphan.gui.JLabeledTextField; import org.apache.jorphan.gui.layout.VerticalLayout; -import org.apache.jmeter.protocol.http.util.WSDLHelper; -import org.apache.jmeter.protocol.http.control.AuthManager; /** * This is the GUI for the webservice samplers. It extends AbstractSamplerGui @@ -58,15 +65,15 @@ public class WebServiceSamplerGui extend private final JLabeledTextField domain = new JLabeledTextField(JMeterUtils.getResString("web_server_domain")); // $NON-NLS-1$ - private final JLabeledTextField protocol = new JLabeledTextField(JMeterUtils.getResString("protocol")); // $NON-NLS-1$ + private final JLabeledTextField protocol = new JLabeledTextField(JMeterUtils.getResString("protocol"), 4); // $NON-NLS-1$ - private final JLabeledTextField port = new JLabeledTextField(JMeterUtils.getResString("web_server_port")); // $NON-NLS-1$ + private final JLabeledTextField port = new JLabeledTextField(JMeterUtils.getResString("web_server_port"), 4); // $NON-NLS-1$ private final JLabeledTextField path = new JLabeledTextField(JMeterUtils.getResString("path")); // $NON-NLS-1$ private final JLabeledTextField soapAction = new JLabeledTextField(JMeterUtils.getResString("webservice_soap_action")); // $NON-NLS-1$ - private final JLabeledTextArea soapXml = new JLabeledTextArea(JMeterUtils.getResString("soap_data_title")); // $NON-NLS-1$ + private JTextArea soapXml; private final JLabeledTextField wsdlField = new JLabeledTextField(JMeterUtils.getResString("wsdl_url")); // $NON-NLS-1$ @@ -82,7 +89,7 @@ public class WebServiceSamplerGui extend private final JLabeledTextField randomXmlFile = new JLabeledTextField(JMeterUtils.getResString("get_xml_from_random")); // $NON-NLS-1$ - private final JLabeledTextField connectTimeout = new JLabeledTextField(JMeterUtils.getResString("webservice_timeout")); // $NON-NLS-1$ + private final JLabeledTextField connectTimeout = new JLabeledTextField(JMeterUtils.getResString("webservice_timeout"), 4); // $NON-NLS-1$ /** * checkbox for memory cache. @@ -102,12 +109,12 @@ public class WebServiceSamplerGui extend /** * text field for the proxy host */ - private JLabeledTextField proxyHost = new JLabeledTextField(JMeterUtils.getResString("webservice_proxy_host")); // $NON-NLS-1$ + private JTextField proxyHost; /** * text field for the proxy port */ - private JLabeledTextField proxyPort = new JLabeledTextField(JMeterUtils.getResString("webservice_proxy_port")); // $NON-NLS-1$ + private JTextField proxyPort; /** * Text note about read response and its usage. @@ -205,53 +212,150 @@ public class WebServiceSamplerGui extend // MAIN PANEL JPanel mainPanel = new JPanel(); - Border margin = new EmptyBorder(10, 10, 5, 10); - mainPanel.setBorder(margin); - mainPanel.setLayout(new VerticalLayout(5, VerticalLayout.BOTH)); + mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); + + mainPanel.add(createTopPanel(), BorderLayout.NORTH); + mainPanel.add(createMessagePanel(), BorderLayout.CENTER); + mainPanel.add(createBottomPanel(), BorderLayout.SOUTH); + this.add(mainPanel); + } + + private final JPanel createTopPanel() { + JPanel topPanel = new JPanel(); + topPanel.setLayout(new VerticalLayout(5, VerticalLayout.BOTH)); + + JPanel wsdlHelper = new JPanel(); + wsdlHelper.setLayout(new BoxLayout(wsdlHelper, BoxLayout.Y_AXIS)); + wsdlHelper.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), + JMeterUtils.getResString("webservice_configuration_wizard"))); // $NON-NLS-1$ // Button for browsing webservice wsdl JPanel wsdlEntry = new JPanel(); - mainPanel.add(wsdlEntry); + wsdlEntry.setLayout(new BoxLayout(wsdlEntry, BoxLayout.X_AXIS)); + Border margin = new EmptyBorder(0, 5, 0, 5); + wsdlEntry.setBorder(margin); + wsdlHelper.add(wsdlEntry); wsdlEntry.add(wsdlField); wsdlEntry.add(wsdlButton); wsdlButton.addActionListener(this); // Web Methods JPanel listPanel = new JPanel(); + listPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel selectLabel = new JLabel(JMeterUtils.getResString("webservice_methods")); // $NON-NLS-1$ wsdlMethods = new JLabeledChoice(); - mainPanel.add(listPanel); + wsdlHelper.add(listPanel); listPanel.add(selectLabel); listPanel.add(wsdlMethods); listPanel.add(selectButton); selectButton.addActionListener(this); - mainPanel.add(protocol); - mainPanel.add(domain); - mainPanel.add(port); - mainPanel.add(path); - mainPanel.add(connectTimeout); - mainPanel.add(soapAction); - // OPTIONAL TASKS - // we create a preferred size for the soap text area - // the width is the same as the soap file browser - Dimension pref = new Dimension(400, 200); - soapXml.setPreferredSize(pref); - mainPanel.add(soapXml); - mainPanel.add(soapXmlFile); - mainPanel.add(randomXmlFile); - mainPanel.add(memCache); - mainPanel.add(readResponse); + topPanel.add(wsdlHelper); + + JPanel urlPane = new JPanel(); + urlPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + urlPane.add(protocol); + urlPane.add(Box.createRigidArea(new Dimension(5,0))); + urlPane.add(domain); + urlPane.add(Box.createRigidArea(new Dimension(5,0))); + urlPane.add(port); + urlPane.add(Box.createRigidArea(new Dimension(5,0))); + urlPane.add(connectTimeout); + topPanel.add(urlPane); + + topPanel.add(path); + topPanel.add(soapAction); + return topPanel; + } + + private final JPanel createMessagePanel() { + JPanel msgPanel = new JPanel(); + msgPanel.setLayout(new BorderLayout(5, 0)); + msgPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), + JMeterUtils.getResString("webservice_message_soap"))); // $NON-NLS-1$ + + JPanel soapXmlPane = new JPanel(); + soapXmlPane.setLayout(new BorderLayout(5, 0)); + soapXmlPane.setBorder(BorderFactory.createTitledBorder( + JMeterUtils.getResString("soap_data_title"))); // $NON-NLS-1$ + soapXmlPane.setPreferredSize(new Dimension(4, 4)); // Permit dynamic resize of TextArea + soapXml = new JTextArea(); + soapXml.setLineWrap(true); + soapXml.setWrapStyleWord(true); + soapXml.setTabSize(4); // improve xml display + soapXmlPane.add(new JScrollPane(soapXml), BorderLayout.CENTER); + msgPanel.add(soapXmlPane, BorderLayout.CENTER); + + JPanel southPane = new JPanel(); + southPane.setLayout(new BoxLayout(southPane, BoxLayout.Y_AXIS)); + southPane.add(soapXmlFile); + JPanel randomXmlPane = new JPanel(); + randomXmlPane.setLayout(new BorderLayout(5, 0)); + randomXmlPane.setBorder(BorderFactory.createTitledBorder( + JMeterUtils.getResString("webservice_get_xml_from_random_title"))); // $NON-NLS-1$ + randomXmlPane.add(randomXmlFile, BorderLayout.CENTER); + southPane.add(randomXmlPane); + msgPanel.add(southPane, BorderLayout.SOUTH); + return msgPanel; + } + + private final JPanel createBottomPanel() { + JPanel optionPane = new JPanel(); + optionPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), + JMeterUtils.getResString("option"))); // $NON-NLS-1$ + optionPane.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + JPanel ckboxPane = new HorizontalPanel(); + ckboxPane.add(memCache, BorderLayout.WEST); + ckboxPane.add(readResponse, BorderLayout.CENTER); readResponse.setToolTipText(readToolTip); + optionPane.add(ckboxPane); // add the proxy elements - mainPanel.add(useProxy); + optionPane.add(getProxyServerPanel()); + return optionPane; + + } + /** + * Create a panel containing the proxy server details + * + * @return the panel + */ + private final JPanel getProxyServerPanel(){ + JPanel proxyServer = new JPanel(); + proxyServer.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); + proxyServer.add(useProxy); useProxy.addActionListener(this); useProxy.setToolTipText(proxyToolTip); - mainPanel.add(proxyHost); - mainPanel.add(proxyPort); + proxyServer.add(Box.createRigidArea(new Dimension(5,0))); + proxyServer.add(getProxyHostPanel()); + proxyServer.add(Box.createRigidArea(new Dimension(5,0))); + proxyServer.add(getProxyPortPanel()); + return proxyServer; + } + + private JPanel getProxyHostPanel() { + proxyHost = new JTextField(12); + + JLabel label = new JLabel(JMeterUtils.getResString("web_server_domain")); // $NON-NLS-1$ + label.setLabelFor(proxyHost); + + JPanel panel = new JPanel(new BorderLayout(5, 0)); + panel.add(label, BorderLayout.WEST); + panel.add(proxyHost, BorderLayout.CENTER); + return panel; + } + + private JPanel getProxyPortPanel() { + proxyPort = new JTextField(4); + + JLabel label = new JLabel(JMeterUtils.getResString("web_server_port")); // $NON-NLS-1$ + label.setLabelFor(proxyPort); + + JPanel panel = new JPanel(new BorderLayout(5, 0)); + panel.add(label, BorderLayout.WEST); + panel.add(proxyPort, BorderLayout.CENTER); - this.add(mainPanel); + return panel; } /** @@ -272,6 +376,7 @@ public class WebServiceSamplerGui extend path.setText(sampler.getPath()); soapAction.setText(sampler.getSoapAction()); soapXml.setText(sampler.getXmlData()); + soapXml.setCaretPosition(0); // go to 1st line soapXmlFile.setFilename(sampler.getXmlFile()); randomXmlFile.setText(sampler.getXmlPathLoc()); connectTimeout.setText(sampler.getTimeout()); Modified: jakarta/jmeter/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1172170&r1=1172169&r2=1172170&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/changes.xml (original) +++ jakarta/jmeter/trunk/xdocs/changes.xml Sun Sep 18 02:46:02 2011 @@ -39,6 +39,7 @@ Earlier changes are detailed in the <a h <li>HttpClient4 sampler now re-uses connections properly (previously it would use one per sample, which could quickly cause resource exhaustion).</li> <li>Various fixes to JMS samplers</li> <li>Functions are no longer spuriously invoked when used with a Configuration element</li> +<li>WebService sampler GUI has been re-organize for better design and user-friendly. Some improments on WSDL configuration assistant</li> </ul> @@ -138,6 +139,7 @@ This can be overridden by setting the JM <ul> <li>Beanshell Sampler now supports Interruptible interface</li> <li>Bug 51605 - WebService(SOAP) Request - WebMethod field value changes surreptitiously for all the requests when a value is selected in a request</li> +<li>WebService(SOAP) Request - Re-organize GUI for better design and user-friendly</li> </ul> <h3>Controllers</h3> Modified: jakarta/jmeter/trunk/xdocs/images/screenshots/webservice_sampler.png URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/images/screenshots/webservice_sampler.png?rev=1172170&r1=1172169&r2=1172170&view=diff ============================================================================== Binary files - no diff available. Modified: jakarta/jmeter/trunk/xdocs/usermanual/build-ws-test-plan.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/build-ws-test-plan.xml?rev=1172170&r1=1172169&r2=1172170&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/build-ws-test-plan.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/build-ws-test-plan.xml Sun Sep 18 02:46:02 2011 @@ -36,7 +36,7 @@ Also, you will tell the users to run the requests is (5 users) x (1 requests) x (repeat 2 times) = 10 HTTP requests. To construct the Test Plan, you will use the following elements: <a href="test_plan.html#thread_group">Thread Group</a>, -<complink name="WebService(SOAP) Request (Beta Code)"/>, and +<complink name="WebService(SOAP) Request"/>, and <complink name="Graph Results"/>.</p> <p>If the sampler appears to be getting an error from the webservice, double check the @@ -115,13 +115,12 @@ get a better idea of the differences.</p <note>JMeter sends requests in the order that they appear in the tree.</note> -<p>Start by adding the sampler <complink name="WebService(SOAP) Request (Beta Code)"/> -to the Jakarta Users element (Add --> Sampler --> WebService(SOAP) Request - (Beta Code) ). +<p>Start by adding the sampler <complink name="WebService(SOAP) Request"/> +to the Jakarta Users element (Add --> Sampler --> WebService(SOAP) Request). Then, select the webservice Request element in the tree and edit the following properties (see Figure §-num;.5): <ol> -<li>Change the Name field to "WebService(SOAP) Request (Beta Code)".</li> +<li>Change the Name field to "WebService(SOAP) Request".</li> <li>Enter the WSDL URL and click "Load WSDL".</li> </ol> </p> Modified: jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1172170&r1=1172169&r2=1172170&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/component_reference.xml Sun Sep 18 02:46:02 2011 @@ -555,7 +555,7 @@ Or set Content-Length to -1 to force chu </component> -<component name="WebService(SOAP) Request" index="§-num;.1.6" width="460" height="781" screenshot="webservice_sampler.png"> +<component name="WebService(SOAP) Request" index="§-num;.1.6" screenshot="webservice_sampler.png"> <description><p>This sampler has been tested with IIS Webservice running .NET 1.0 and .NET 1.1. It has been tested with SUN JWSDP, IBM webservices, Axis and gSoap toolkit for C/C++. The sampler uses Apache SOAP driver to serialize the message and set the header @@ -612,18 +612,20 @@ If this is zero, then the request is mar <property name="Protocol" required="Yes">HTTP or HTTPS are acceptable protocol.</property> <property name="Server Name or IP" required="Yes">The hostname or IP address.</property> <property name="Port Number" required="Yes">Port Number.</property> + <property name="Timeout" required="No">Connection timeout.</property> <property name="Path" required="Yes">Path for the webservice.</property> <property name="SOAPAction" required="Yes">The SOAPAction defined in the webservice description or WSDL.</property> <property name="Soap/XML-RPC Data" required="Yes">The Soap XML message</property> <property name="Soap file" required="No">File containing soap message</property> - <property name="Message Folder" required="No">Folder containing soap files</property> + <property name="Message(s) Folder" required="No">Folder containing soap files. Files are choose randomly during test.</property> <property name="Memory cache" required="Yes"> When using external files, setting this causes the file to be processed once and caches the result. This may use a lot of memory if there are many different large files. </property> + <property name="Read SOAP Response" required="No">Read the SOAP reponse (consumes performance). Permit to have assertions or post-processors</property> <property name="Use HTTP Proxy" required="No">Check box if http proxy should be used</property> - <property name="Proxy Host" required="No">Proxy hostname</property> - <property name="Proxy Port" required="No">Proxy host port</property> + <property name="Server Name or IP" required="No">Proxy hostname</property> + <property name="Port Number" required="No">Proxy host port</property> </properties> </component> --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@jakarta.apache.org For additional commands, e-mail: notifications-h...@jakarta.apache.org