blob: c43d6c7222f2a6359b4b6b190ba01d6eb829fc00 [file] [log] [blame]
/*
* 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 org.apache.axis2.jaxws.samples.client;
import org.apache.axis2.jaxws.samples.client.echo.EchoService12PortProxy;
import org.apache.axis2.jaxws.samples.client.echo.EchoServiceCallbackHandler;
import org.apache.axis2.jaxws.samples.client.echo.EchoServicePortProxy;
import org.apache.axis2.jaxws.samples.client.ping.PingService12PortProxy;
import org.apache.axis2.jaxws.samples.client.ping.PingServicePortProxy;
import org.apache.axis2.jaxws.samples.echo.EchoStringInput;
import org.apache.axis2.jaxws.samples.echo.EchoStringResponse;
import org.apache.axis2.jaxws.samples.ping.ObjectFactory;
import org.apache.axis2.jaxws.samples.ping.PingStringInput;
import org.apache.axis2.jaxws.ClientConfigurationFactory;
import org.apache.axis2.metadata.registry.MetadataFactoryRegistry;
import org.apache.axis2.AxisFault;
import org.apache.axis2.deployment.FileSystemConfigurator;
import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.axis2.context.ConfigurationContext;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import java.util.concurrent.Future;
import java.net.URL;
/**
* SampleClient
* main entry point for thinclient jar sample
* and worker class to communicate with the services
*/
public class SampleClient {
private int timeout = 240; // Error timeout in seconds
private static final int SLEEPER = 2; // Poll delay for async
private String urlHost = "localhost";
private String urlPort = "8080";
private static final String CONTEXT_BASE = "/jaxws-samples/services/";
private static final String PING_CONTEXT = CONTEXT_BASE + "PingService.PingServicePort";
private static final String ECHO_CONTEXT = CONTEXT_BASE + "EchoService.EchoServicePort";
private static final String PING_CONTEXT12 = CONTEXT_BASE + "PingService12.PingService12Port";
private static final String ECHO_CONTEXT12 = CONTEXT_BASE + "EchoService12.EchoService12Port";
private String urlSuffix = "";
private String message = "HELLO";
private String servtype = "async";
private String uriString = "http://" + urlHost + ":" + urlPort;
private Boolean wireasync = true;
private Boolean soap12 = false;
private int count = 1;
private ClientConfigurationFactory clientConfigurationFactory = null;
/**
* main()
* <p/>
* see printusage() for command-line arguments
*
* @param args
*/
public static void main(String[] args) {
SampleClient sample = new SampleClient();
sample.parseArgs(args);
sample.CallService();
}
/**
* parseArgs Read and interpret the command-line arguments
*
* @param args
*/
public void parseArgs(String[] args) {
if (args.length >= 1) {
for (int i = 0; i < args.length; i++) {
try {
if ('-' == args[i].charAt(0)) {
switch (args[i].charAt(1)) {
case '?':
printUsage(null);
System.exit(0);
break;
case 'h':
case 'H':
urlHost = args[++i];
break;
case 'p':
case 'P':
urlPort = args[++i];
break;
case 'f':
case 'F':
urlSuffix = args[++i];
break;
case 'm':
case 'M':
message = args[++i];
break;
case 's':
case 'S':
servtype = args[++i];
if ((!servtype.equalsIgnoreCase("async")) &&
(!servtype.equalsIgnoreCase("echo")) &&
(!servtype.equalsIgnoreCase("ping"))) {
System.out
.println("ERROR: Attempt to invoke a service that is not supported");
printUsage(null);
System.exit(0);
}
break;
case 't':
case 'T':
timeout = new Integer(args[++i]).intValue();
break;
case 'c':
case 'C':
count = new Integer(args[++i]).intValue();
break;
case 'w':
case 'W':
String parm = args[++i];
if (parm.equalsIgnoreCase("y")) {
wireasync = true;
} else {
wireasync = false;
}
break;
case '1':
soap12 = false;
break;
case '2':
soap12 = true;
break;
default:
printUsage(args[i]);
System.exit(0);
break;
}
}
} catch (Exception e) {
System.out.println("Invalid option format.");
printUsage(null);
System.exit(0);
}
uriString = "http://" + urlHost + ":" + urlPort;
}
}
}
/**
* printUsage Print usage help to output
*
* @param invalidOpt -
* if non-null, is the invalid parameter
*/
private void printUsage(String invalidOpt) {
if (null != invalidOpt) {
System.out.println("Invalid Option: " + invalidOpt);
}
System.out.println("Usage:");
System.out
.println(" runSampleSei -h [hostname] -p [port] -f [urlSuffix] -m [testMessage] -s [echo|ping|async] -t [timeout] -w [y|n] -c [count] -1 -2");
System.out.println("Default values:");
System.out.println(" hostname = localhost");
System.out.println(" port = 8080");
System.out.println(" testMessage = HELLO");
System.out.println(" urlSuffix = /jaxws-samples/services/EchoService.EchoServicePort");
System.out.println(" service = async");
System.out.println(" timeout = 240 (seconds)");
System.out.println(" wireasync = y (yes)");
System.out.println(" count = 1");
System.out.println(" -1 = soap 1.1 (default)");
System.out.println(" -2 = soap 1.2");
}
/**
* CallService Parms were already read. Now call the service proxy classes
*/
void CallService() {
for (int index = 0; index < count; index++) {
if (soap12) {
if (servtype.equalsIgnoreCase("echo")) {
if (0 == urlSuffix.length()) {
urlSuffix = ECHO_CONTEXT12;
}
buildEcho12(uriString + urlSuffix, null, message);
} else if (servtype.equalsIgnoreCase("async")) {
if (0 == urlSuffix.length()) {
urlSuffix = ECHO_CONTEXT12;
}
if (clientConfigurationFactory == null) {
ClientConfigurationFactory factory = initConfigurationFactory();
buildAsync12(uriString + urlSuffix, null, message, timeout, wireasync);
destroyConfigurationFactory(factory);
} else {
buildAsync12(uriString + urlSuffix, null, message, timeout, wireasync);
}
} else {
if (0 == urlSuffix.length()) {
urlSuffix = PING_CONTEXT12;
}
buildPing12(uriString + urlSuffix, null, message);
}
} else {
if (servtype.equalsIgnoreCase("echo")) {
if (0 == urlSuffix.length()) {
urlSuffix = ECHO_CONTEXT;
}
buildEcho(uriString + urlSuffix, null, message);
} else if (servtype.equalsIgnoreCase("async")) {
if (0 == urlSuffix.length()) {
urlSuffix = ECHO_CONTEXT;
}
if (clientConfigurationFactory == null) {
ClientConfigurationFactory factory = initConfigurationFactory();
buildAsync(uriString + urlSuffix, null, message, timeout, wireasync);
destroyConfigurationFactory(factory);
} else {
buildAsync(uriString + urlSuffix, null, message, timeout, wireasync);
}
} else {
if (0 == urlSuffix.length()) {
urlSuffix = PING_CONTEXT;
}
buildPing(uriString + urlSuffix, null, message);
}
}
}
}
private ClientConfigurationFactory initConfigurationFactory() {
String axis2xml = System.getProperty("org.apache.axis2.jaxws.config.path");
if (axis2xml == null) {
throw new RuntimeException("Please set org.apache.axis2.jaxws.config.path system property to a valid axis2.xml file (with addressing module enabled)");
}
ClientConfigurationFactory factory = null;
try {
FileSystemConfigurator configurator = new FileSystemConfigurator(null, axis2xml);
factory = new ClientConfigurationFactory(configurator);
MetadataFactoryRegistry.setFactory(ClientConfigurationFactory.class, factory);
} catch (AxisFault axisFault) {
throw new RuntimeException(axisFault);
}
return factory;
}
private void destroyConfigurationFactory(ClientConfigurationFactory factory) {
try {
factory.getClientConfigurationContext().terminate();
} catch (AxisFault axisFault) {
throw new RuntimeException(axisFault);
}
}
/**
* buildPing
* Call the ping service
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @return Boolean true if the ping works
*/
public boolean buildPing(String endpointURL, URL wsdlURL, String input) {
try {
PingServicePortProxy ping = new PingServicePortProxy(wsdlURL);
ping._getDescriptor().setEndpoint(endpointURL);
System.out.println(">> CLIENT: SEI Ping to " + endpointURL);
// Configure SOAPAction properties
BindingProvider bp = (BindingProvider) (ping._getDescriptor()
.getProxy());
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
endpointURL);
bp.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY,
Boolean.TRUE);
bp.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY,
"pingOperation");
// Build the input object
PingStringInput pingParm =
new ObjectFactory().createPingStringInput();
pingParm.setPingInput(input);
// Call the service
ping.pingOperation(pingParm);
System.out.println(">> CLIENT: SEI Ping SUCCESS.");
return true;
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Ping EXCEPTION.");
e.printStackTrace();
return false;
}
}
/**
* buildEcho
* Call the Echo service (Sync)
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @return String from the service
*/
public String buildEcho(String endpointURL, URL wsdlURL, String input) {
String response = "ERROR!:";
try {
EchoServicePortProxy echo = new EchoServicePortProxy(wsdlURL);
echo._getDescriptor().setEndpoint(endpointURL);
// Configure SOAPAction properties
BindingProvider bp = (BindingProvider) (echo._getDescriptor()
.getProxy());
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
endpointURL);
bp.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY,
Boolean.TRUE);
bp.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY,
"echoOperation");
// Build the input object
EchoStringInput echoParm =
new org.apache.axis2.jaxws.samples.echo.ObjectFactory().createEchoStringInput();
echoParm.setEchoInput(input);
System.out.println(">> CLIENT: SEI Echo to " + endpointURL);
// Call the service
response = echo.echoOperation(echoParm).getEchoResponse();
System.out.println(">> CLIENT: SEI Echo invocation complete.");
System.out.println(">> CLIENT: SEI Echo response is: " + response);
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Echo EXCEPTION.");
e.printStackTrace();
return response + ">>>ECHO SERVICE EXCEPTION<<< ";
}
return response;
}
/**
* buildAsync
* Call the Echo service (Async)
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @param waiting The Async timeout
* @param wireasync true to use Async on the wire
* @return String from the service
*/
public String buildAsync(String endpointURL, URL wsdlURL, String input, int waiting, Boolean wireasync) {
String response = "ERROR!:";
try {
EchoServicePortProxy echo = new EchoServicePortProxy(wsdlURL);
echo._getDescriptor().setEndpoint(endpointURL);
// Configure SOAPAction properties
BindingProvider bp = (BindingProvider) (echo._getDescriptor()
.getProxy());
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
endpointURL);
bp.getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY,
Boolean.TRUE);
bp.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY,
"echoOperation");
if (wireasync) {
bp.getRequestContext().put(org.apache.axis2.jaxws.util.Constants.USE_ASYNC_MEP,
Boolean.TRUE);
}
// Set up the callback handler and create the input object
EchoServiceCallbackHandler callbackHandler = new EchoServiceCallbackHandler();
EchoStringInput echoParm =
new org.apache.axis2.jaxws.samples.echo.ObjectFactory().createEchoStringInput();
echoParm.setEchoInput(input);
System.out.println(">> CLIENT: SEI Async to " + endpointURL);
// Call the service
Future<?> resp = echo.echoOperationAsync(echoParm, callbackHandler);
Thread.sleep(1000);
while (!resp.isDone()) {
// Check for timeout
if (waiting <= 0) {
System.out
.println(">> CLIENT: ERROR - SEI Async Timeout waiting for reply.");
return response + "Async timeout waiting for reply.";
}
System.out
.println(">> CLIENT: SEI Async invocation still not complete");
Thread.sleep(1000 * SLEEPER);
waiting -= SLEEPER;
}
// Get the response and print it, then return
EchoStringResponse esr = callbackHandler.getResponse();
System.out.println(">> CLIENT: SEI Async invocation complete.");
if (null != esr) {
response = esr.getEchoResponse();
if (null != response) {
System.out.println(">> CLIENT: SEI Async response is: " + response);
}
}
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Async EXCEPTION.");
e.printStackTrace();
return response + ">>>ASYNC SERVICE EXCEPTION<<<";
}
return response;
}
/**
* buildPing12
* Call the ping service
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @return Boolean true if the ping works
*/
public boolean buildPing12(String endpointURL, URL wsdlURL, String input) {
try {
PingService12PortProxy ping = new PingService12PortProxy(wsdlURL);
ping._getDescriptor().setEndpoint(endpointURL);
System.out.println(">> CLIENT: SEI Ping to " + endpointURL);
// Build the input object
PingStringInput pingParm =
new org.apache.axis2.jaxws.samples.ping.ObjectFactory().createPingStringInput();
pingParm.setPingInput(input);
// Call the service
ping.pingOperation(pingParm);
System.out.println(">> CLIENT: SEI Ping SUCCESS.");
return true;
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Ping EXCEPTION.");
e.printStackTrace();
return false;
}
}
/**
* buildEcho12
* Call the Echo service (Sync)
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @return String from the service
*/
public String buildEcho12(String endpointURL, URL wsdlURL, String input) {
String response = "ERROR!:";
try {
EchoService12PortProxy echo = new EchoService12PortProxy(wsdlURL);
echo._getDescriptor().setEndpoint(endpointURL);
// Build the input object
EchoStringInput echoParm =
new org.apache.axis2.jaxws.samples.echo.ObjectFactory().createEchoStringInput();
echoParm.setEchoInput(input);
System.out.println(">> CLIENT: SEI Echo to " + endpointURL);
// Call the service
response = echo.echoOperation(echoParm).getEchoResponse();
System.out.println(">> CLIENT: SEI Echo invocation complete.");
System.out.println(">> CLIENT: SEI Echo response is: " + response);
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Echo EXCEPTION.");
e.printStackTrace();
return response + ">>>ECHO SERVICE EXCEPTION<<< ";
}
return response;
}
/**
* buildAsync12
* Call the Echo service (Async)
*
* @param endpointURL The Service endpoint URL
* @param input The message string
* @param waiting The Async timeout
* @param wireasync true to use Async on the wire
* @return String from the service
*/
public String buildAsync12(String endpointURL, URL wsdlURL, String input, int waiting, Boolean wireasync) {
String response = "ERROR!:";
try {
EchoService12PortProxy echo = new EchoService12PortProxy(wsdlURL);
echo._getDescriptor().setEndpoint(endpointURL);
// Configure over-the-wire async if specified
if (wireasync) {
BindingProvider bp = (BindingProvider) (echo._getDescriptor()
.getProxy());
bp.getRequestContext().put(org.apache.axis2.jaxws.util.Constants.USE_ASYNC_MEP,
Boolean.TRUE);
}
// Set up the callback handler and create the input object
EchoServiceCallbackHandler callbackHandler = new EchoServiceCallbackHandler();
EchoStringInput echoParm =
new org.apache.axis2.jaxws.samples.echo.ObjectFactory().createEchoStringInput();
echoParm.setEchoInput(input);
System.out.println(">> CLIENT: SEI Async to " + endpointURL);
// Call the service
Future<?> resp = echo.echoOperationAsync(echoParm, callbackHandler);
Thread.sleep(1000);
while (!resp.isDone()) {
// Check for timeout
if (waiting <= 0) {
System.out
.println(">> CLIENT: ERROR - SEI Async Timeout waiting for reply.");
return response + "Async timeout waiting for reply.";
}
System.out
.println(">> CLIENT: SEI Async invocation still not complete");
Thread.sleep(1000 * SLEEPER);
waiting -= SLEEPER;
}
// Get the response and print it, then return
EchoStringResponse esr = callbackHandler.getResponse();
System.out.println(">> CLIENT: SEI Async invocation complete.");
if (null != esr) {
response = esr.getEchoResponse();
if (null != response) {
System.out.println(">> CLIENT: SEI Async response is: " + response);
}
}
} catch (Exception e) {
System.out.println(">> CLIENT: ERROR: SEI Async EXCEPTION.");
e.printStackTrace();
return response + ">>>ASYNC SERVICE EXCEPTION<<<";
}
return response;
}
public void setClientConfigurationFactory(ClientConfigurationFactory clientConfigurationFactory) {
this.clientConfigurationFactory = clientConfigurationFactory;
}
}