blob: cacd908eee9f0740c1b97eaca0bee197ddf3f158 [file] [log] [blame]
/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed 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.CodeGenerationEngine;
import org.apache.axis2.wsdl.codegen.CodeGenerationException;
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.File;
import java.util.HashMap;
import java.util.Map;
public abstract class WSDL2JavaSuccessTestBase extends TestCase{
public static final String OUTPUT_LOCATION_BASE = "./out_put_classes";
public static final String OUTPUT_LOCATION_PREFIX = "/test";
protected static int folderCount = 0;
public static final String WSDL_BASE_DIR = "test-resources/";
public static final String CLASSES_DIR = "/target/classes/";
private String[] moduleNames={"xml","common","core"};
private static final String MODULE_PATH_PREFIX = "../modules/";
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.mkdir();
}
}
/**
* 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);
new CodeGenerationEngine(parser).generate();
}
/**
*
* @param outputLocation
*/
private void compile(String outputLocation){
//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);
for (int i = 0; i < moduleNames.length; i++) {
classPath.add(new Path(codeGenProject,MODULE_PATH_PREFIX +moduleNames[i]+CLASSES_DIR));
}
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;
}
}