package org.jboss.ws.bench; import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import javax.xml.namespace.QName; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; import org.jboss.test.ws.jaxws.benchmark.test.basic.Endpoint; import org.jboss.wsf.stack.cxf.client.ProviderImpl; import org.jboss.wsf.test.JBossWSTestHelper; public class JAXWSBenchmark extends AbstractJavaSamplerClient { private final String endpointURL = "http://" + JBossWSTestHelper.getServerHost() + ":" + JBossWSTestHelper.getServerPort() + "/jaxws-benchmark-basic/EndpointService/EndpointImpl"; private final String targetNS = "http://basic.test.benchmark.jaxws.ws.test.jboss.org/"; private Endpoint ep; @Override public void setupTest(JavaSamplerContext context) { super.setupTest(context); try { this.ep = prepare(); } catch (Exception e) { throw new RuntimeException(e); } } @Override public void teardownTest(JavaSamplerContext context) { super.teardownTest(context); this.ep = null; } @Override public SampleResult runTest(JavaSamplerContext ctx) { final SampleResult sampleResult = new SampleResult(); sampleResult.sampleStart(); try { performIteration(ep); sampleResult.setSuccessful(true); } catch (Exception e) { sampleResult.setSuccessful(false); sampleResult.setResponseMessage("Exception: " + e); StringWriter stringWriter = new StringWriter(); e.printStackTrace(new PrintWriter(stringWriter)); sampleResult.setResponseData(stringWriter.toString(), "UTF-8"); sampleResult.setDataType(SampleResult.TEXT); } finally { sampleResult.sampleEnd(); } return sampleResult; } public Endpoint prepare() throws Exception { URL wsdlURL = new URL(endpointURL + "?wsdl"); QName serviceName = new QName(targetNS, "EndpointService"); //explicitly use JBossWS-CXF JAXWS SPI Provider impl as jmeter uses a flat classpath approach //and it's not possible to configure the jar order ProviderImpl p = new ProviderImpl(); return p.createServiceDelegate(wsdlURL, serviceName, null).getPort(Endpoint.class); // Service service = Service.create(wsdlURL, serviceName); // return service.getPort(Endpoint.class); } public void performIteration(Object port) throws Exception { for (int i = 0; i < 100; i++) { String par = "Hello" + Math.random(); String ret = ((Endpoint)port).echo(par); if (!(par.equals(ret))) { throw new Exception("Unexpected result: " + ret); } } } }