package org.jboss.axis.wsdl.gen;
import org.jboss.axis.utils.CLArgsParser;
import org.jboss.axis.utils.CLOption;
import org.jboss.axis.utils.CLOptionDescriptor;
import org.jboss.axis.utils.CLUtil;
import org.jboss.axis.utils.DefaultAuthenticator;
import org.jboss.axis.utils.Messages;
import java.net.Authenticator;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
public class WSDL2
{
protected static final int DEBUG_OPT = 'D';
protected static final int HELP_OPT = 'h';
protected static final int NETWORK_TIMEOUT_OPT = 'O';
protected static final int NOIMPORTS_OPT = 'n';
protected static final int VERBOSE_OPT = 'v';
protected static final int NOWRAP_OPT = 'W';
protected CLOptionDescriptor[] options = new CLOptionDescriptor[]{
new CLOptionDescriptor("help",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
HELP_OPT,
Messages.getMessage("optionHelp00")),
new CLOptionDescriptor("verbose",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
VERBOSE_OPT,
Messages.getMessage("optionVerbose00")),
new CLOptionDescriptor("noImports",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
NOIMPORTS_OPT,
Messages.getMessage("optionImport00")),
new CLOptionDescriptor("timeout",
CLOptionDescriptor.ARGUMENT_REQUIRED,
NETWORK_TIMEOUT_OPT,
Messages.getMessage("optionTimeout00")),
new CLOptionDescriptor("Debug",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
DEBUG_OPT,
Messages.getMessage("optionDebug00")),
new CLOptionDescriptor("noWrapped",
CLOptionDescriptor.ARGUMENT_DISALLOWED,
NOWRAP_OPT,
Messages.getMessage("optionNoWrap00"))
};
protected String wsdlURI = null;
protected Parser parser;
protected WSDL2()
{
parser = createParser();
}
protected Parser createParser()
{
return new Parser();
}
protected Parser getParser()
{
return parser;
}
protected void addOptions(CLOptionDescriptor[] newOptions)
{
if (newOptions != null && newOptions.length > 0)
{
CLOptionDescriptor[] allOptions = new CLOptionDescriptor[
options.length + newOptions.length];
System.arraycopy(options, 0, allOptions, 0, options.length);
System.arraycopy(newOptions, 0, allOptions, options.length, newOptions.length);
options = allOptions;
}
}
protected void removeOption(String name)
{
int foundOptionIndex = -1;
for (int i = 0; i < options.length; i++)
{
if (options[i].getName().equals(name))
{
foundOptionIndex = i;
break;
}
}
if (foundOptionIndex != -1)
{
CLOptionDescriptor[] newOptions =
new CLOptionDescriptor[options.length - 1];
System.arraycopy(options, 0, newOptions, 0, foundOptionIndex);
if (foundOptionIndex < newOptions.length)
{
System.arraycopy(options,
foundOptionIndex + 1,
newOptions,
foundOptionIndex,
newOptions.length - foundOptionIndex);
}
options = newOptions;
}
}
protected void parseOption(CLOption option)
{
switch (option.getId())
{
case CLOption.TEXT_ARGUMENT:
if (wsdlURI != null)
{
System.out.println(Messages.getMessage("w2jDuplicateWSDLURI00",
wsdlURI,
option.getArgument()));
printUsage();
}
wsdlURI = option.getArgument();
break;
case HELP_OPT:
printUsage();
break;
case NOIMPORTS_OPT:
parser.setImports(false);
break;
case NETWORK_TIMEOUT_OPT:
String timeoutValue = option.getArgument();
long timeout = Long.parseLong(timeoutValue);
if (timeout > 0)
timeout = timeout * 1000;
parser.setTimeout(timeout);
break;
case VERBOSE_OPT:
parser.setVerbose(true);
break;
case DEBUG_OPT:
parser.setDebug(true);
break;
case NOWRAP_OPT:
parser.setNowrap(true);
break;
}
}
protected void validateOptions()
{
if (wsdlURI == null)
{
System.out.println(Messages.getMessage("w2jMissingWSDLURI00"));
printUsage();
}
checkForAuthInfo(wsdlURI);
Authenticator.setDefault(new DefaultAuthenticator(parser.getUsername(), parser.getPassword()));
}
private void checkForAuthInfo(String uri)
{
URL url = null;
try
{
url = new URL(uri);
}
catch (MalformedURLException e)
{
return;
}
String userInfo = url.getUserInfo();
if (userInfo != null)
{
int i = userInfo.indexOf(':');
if (i >= 0)
{
parser.setUsername(userInfo.substring(0, i));
parser.setPassword(userInfo.substring(i + 1));
}
else
{
parser.setUsername(userInfo);
}
}
}
protected void printUsage()
{
String lSep = System.getProperty("line.separator");
StringBuffer msg = new StringBuffer();
msg.append(Messages.getMessage("usage00",
"java " + getClass().getName() + " [options] WSDL-URI"))
.append(lSep);
msg.append(Messages.getMessage("options00")).append(lSep);
msg.append(CLUtil.describeOptions(options).toString());
System.out.println(msg.toString());
System.exit(1);
}
protected void run(String[] args)
{
CLArgsParser argsParser = new CLArgsParser(args, options);
if (null != argsParser.getErrorString())
{
System.err.println(Messages.getMessage("error01", argsParser.getErrorString()));
printUsage();
}
List clOptions = argsParser.getArguments();
int size = clOptions.size();
try
{
for (int i = 0; i < size; i++)
{
parseOption((CLOption)clOptions.get(i));
}
validateOptions();
parser.run(wsdlURI);
System.exit(0);
}
catch (Throwable t)
{
t.printStackTrace();
System.exit(1);
}
}
public static void main(String[] args)
{
WSDL2 wsdl2 = new WSDL2();
wsdl2.run(args);
} }