blob: 1d85803694dccb3d8e8de611dd422be80362652d [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.xmlbeans;
import junit.framework.TestCase;
import org.apache.axis2.util.CommandLineOption;
import org.apache.axis2.util.CommandLineOptionConstants;
import org.apache.axis2.util.CommandLineOptionParser;
import org.apache.axis2.wsdl.codegen.CodeGenConfiguration;
import org.apache.axis2.wsdl.codegen.CodeGenerationEngine;
import org.apache.axis2.wsdl.codegen.CodeGenerationException;
import org.apache.axis2.wsdl.codegen.CodegenConfigLoader;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Javac;
import org.apache.tools.ant.types.Path;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;
public abstract class WSDL2JavaSuccessTestBase extends TestCase {
public static final String OUTPUT_LOCATION_BASE =
System.getProperty("basedir", ".") + "/target/out_put_classes";
public static final String OUTPUT_LOCATION_PREFIX = "/test";
protected static int folderCount = 0;
public static final String WSDL_BASE_DIR =
System.getProperty("basedir", ".") + "/test-resources/";
public static final String CLASSES_DIR =
System.getProperty("basedir", ".") + "/target/classes/";
private static final String COMPILE_TARGET_NAME = "compile";
protected String wsdlFileName;
/**
* Make the root output directory
*
* @throws Exception
*/
protected void setUp() throws Exception {
File outputFile = new File(OUTPUT_LOCATION_BASE);
if (outputFile.exists() && outputFile.isDirectory()) {
deleteDir(outputFile);
outputFile.mkdir();
} else {
outputFile.mkdirs();
}
}
/**
* Remove the root output directory
*
* @throws Exception
*/
protected void tearDown() throws Exception {
File outputFile = new File(OUTPUT_LOCATION_BASE);
if (outputFile.exists() && outputFile.isDirectory()) {
deleteDir(outputFile);
}
}
/**
* Deletes all files and subdirectories under dir. Returns true if all deletions were
* successful. If a deletion fails, the method stops attempting to delete and returns false.
*/
private boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
public void testWSDLFile() {
try {
generateAndCompile(wsdlFileName,
OUTPUT_LOCATION_BASE + OUTPUT_LOCATION_PREFIX + folderCount++);
} catch (CodeGenerationException e) {
e.printStackTrace();
fail("Exception while code generation test! " + wsdlFileName + e.getMessage());
}
}
// /**
// * Test for the sales rank and price!
// */
// public void testCodeGenerationSalesRankNPrice(){
// try {
// generateAndCompile("SalesRankNPrice.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
// } catch (CodeGenerationException e) {
// fail("Exception while code generation test!"+ e.getMessage());
// }
// }
// /**
// * Test for the dime doc
// */
// public void testCodeGenerationDimeDoc(){
//
// try {
// generateAndCompile("dime-doc.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
// } catch (CodeGenerationException e) {
// fail("Exception while code generation test!"+ e.getMessage());
// }
// }
/**
* Test for the modified ping wsdl. it will be the test for the detached schema with only an import
* statement
*/
// public void testCodeGenerationPingModified(){
//
// try {
// generateAndCompile("ping-modified.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
// } catch (CodeGenerationException e) {
// fail("Exception while code generation test!"+ e.getMessage());
// }
// }
/**
* @param wsdlName
* @param outputLocation
* @throws CodeGenerationException
*/
protected void generateAndCompile(String wsdlName, String outputLocation)
throws CodeGenerationException {
codeGenerate(WSDL_BASE_DIR + wsdlName, outputLocation);
compile(outputLocation);
}
/**
* @param wsdlFile
* @param outputLocation
* @throws CodeGenerationException
*/
private void codeGenerate(String wsdlFile, String outputLocation)
throws CodeGenerationException {
//create the option map
Map optionMap = fillOptionMap(wsdlFile, outputLocation);
CommandLineOptionParser parser =
new CommandLineOptionParser(optionMap);
CodeGenConfiguration config = new CodeGenConfiguration();
CodegenConfigLoader.loadConfig(config, parser.getAllOptions());
new CodeGenerationEngine(config).generate();
}
/** @param outputLocation */
private void compile(String outputLocation) {
String cp = null;
try {
BufferedReader br = new BufferedReader(
new FileReader(System.getProperty("basedir", ".") + "/target/cp.txt"));
cp = br.readLine();
} catch (Exception e) {
// Don't care
}
if (cp == null) {
cp = "";
}
//using the ant javac task for compilation
Javac javaCompiler = new Javac();
Project codeGenProject = new Project();
Target compileTarget = new Target();
compileTarget.setName(COMPILE_TARGET_NAME);
compileTarget.addTask(javaCompiler);
codeGenProject.addTarget(compileTarget);
codeGenProject.setSystemProperties();
javaCompiler.setProject(codeGenProject);
javaCompiler.setIncludejavaruntime(true);
javaCompiler.setIncludeantruntime(true);
/*
This harmless looking setFork is actually very important. unless the compiler is
forked it wont work!
*/
javaCompiler.setFork(true);
//Create classpath - The generated output directories also become part of the classpath
//reason for this is that some codegenerators(XMLBeans) produce compiled classes as part of
//generated artifacts
File outputLocationFile = new File(outputLocation);
Path classPath = new Path(codeGenProject, outputLocation);
classPath.addExisting(classPath.concatSystemClasspath(), false);
classPath.add(new Path(codeGenProject, cp));
javaCompiler.setClasspath(classPath);
//set sourcePath - The generated output directories also become part of the sourcepath
Path sourcePath = new Path(codeGenProject, outputLocation);
sourcePath.setLocation(outputLocationFile);
javaCompiler.setSrcdir(sourcePath);
//output the classes into the output dir as well
javaCompiler.setDestdir(outputLocationFile);
javaCompiler.setVerbose(true);
javaCompiler.execute();
}
/**
*
*/
private Map fillOptionMap(String wsdlFileName, String outputLocation) {
Map optionMap = new HashMap();
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
new String[] { wsdlFileName }));
//use default sync option - No option is given
//use default async option - No option is given
//use default language option - No option is given
//output location - code_gen_output
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
new String[] { outputLocation }));
//server side option is on
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_CODE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_CODE_OPTION,
new String[0]));
// descriptor option is on
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_SERVICE_DESCRIPTION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_SERVICE_DESCRIPTION_OPTION,
new String[0]));
// db is xmlbeans option is on
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
new String[] { TestConstants.Databinding.XML_BEANS }));
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_ALL_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_ALL_OPTION,
new String[0]));
//todo Make this work
//test case option is on
// optionMap.put(
// CommandLineOptionConstants.GENERATE_TEST_CASE_OPTION,
// new CommandLineOption(
// CommandLineOptionConstants.GENERATE_TEST_CASE_OPTION,
// new String[0]));
//databinding is default
return optionMap;
}
}