/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package samples.userguide;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.client.Options;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.AxisFault;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPHeaderBlock;
import javax.xml.namespace.QName;
public class ServiceInvoker extends Thread {
private String invokerName = "anonymous";
private String operation = null;
private ServiceClient client = null;
private OMElement msg = null;
private long iterations = 10;
private boolean statefull = false;
private OMFactory fac = null;
private long runningTime = 0;
public ServiceInvoker(String epr, String operation) {
this.operation = operation;
Options options = new Options();
options.setTo(new EndpointReference(epr));
options.setAction(operation);
try {
ConfigurationContext configContext = ConfigurationContextFactory.
createConfigurationContextFromFileSystem("client_repo", null);
client = new ServiceClient(configContext, null);
options.setTimeOutInMilliSeconds(10000000);
client.setOptions(options);
client.engageModule("addressing");
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
fac = OMAbstractFactory.getOMFactory();
msg = fac.createOMElement("SampleMsg", null);
OMElement load = fac.createOMElement("load", null);
load.setText("1000");
msg.addChild(load);
}
public String getInvokerName() {
return invokerName;
}
public void setInvokerName(String invokerName) {
this.invokerName = invokerName;
if (statefull) {
client.getOptions().setManageSession(true);
client.getOptions().setAction("setClientName");
OMElement cName = fac.createOMElement("cName", null);
cName.setText(invokerName);
try {
OMElement response = client.sendReceive(cName);
System.out.println(response.getText());
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
}
}
public long getRunningTime() {
return runningTime;
}
public void setLoad(String load) {
OMElement loadElement = msg.getFirstChildWithName(new QName("load"));
loadElement.setText(load);
}
public void addDummyElements(long numElements) {
OMElement dummies = fac.createOMElement("Dummies", null);
msg.addChild(dummies);
for (long i = 0; i < numElements; i++) {
OMElement dummy = fac.createOMElement("Dummy", null);
dummy.setText("This is the dummy element " + i);
dummies.addChild(dummy);
}
}
public void setClientSessionID(String id) {
SOAPFactory soapFactory = OMAbstractFactory.getSOAP12Factory();
OMNamespace synNamespace = soapFactory.
createOMNamespace("http://ws.apache.org/namespaces/synapse", "syn");
SOAPHeaderBlock header = soapFactory.createSOAPHeaderBlock("ClientID", synNamespace);
header.setText(id);
client.addHeader(header);
}
public void setIterations(long i) {
iterations = i;
}
public void setStatefull(boolean state) {
this.statefull = state;
}
public void run() {
client.getOptions().setAction(operation);
try {
long t1 = System.currentTimeMillis();
for (long i=0; i < iterations; i++) {
OMElement response2 = client.sendReceive(msg);
OMElement loadElement = response2.getFirstChildWithName(new QName("load"));
System.out.println(invokerName + ": " + loadElement.toString());
}
long t2 = System.currentTimeMillis();
System.out.println("================================================================");
System.out.println(invokerName + " completed requests.");
System.out.println("================================================================");
runningTime = t2 - t1;
} catch (AxisFault axisFault) {
System.out.println(axisFault.getMessage());
}
}
}