blob: 2cc2ecd13eb7133a57e3069d0dd91d8d06b9c2d5 [file] [log] [blame]
package org.apache.axis2.schema.compile;
import junit.framework.TestCase;
import org.apache.axis2.schema.CompilerOptions;
import org.apache.axis2.schema.SchemaCompiler;
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
/*
* 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.
*/
/* Maven is a little dumb when it comes to executing test cases. It tries to run everything
that ends with 'test' even if the class is abstract or non junit!!!!!
Rather than putting an explicit exclude, this is a cheaper way out
*/
public abstract class AbstractSchemaCompilerTester extends TestCase {
//this should be an xsd name in the test-resource directory
protected String fileName = "";
protected XmlSchema currentSchema;
protected File outputFolder = null;
private static String TEMP_OUT_FOLDER="temp_compile";
protected void setUp() throws Exception {
//load the current Schema through a file
//first read the file into a DOM
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
Document doc = builder.parse(new File(fileName));
//now read it to a schema
XmlSchemaCollection schemaCol = getSchemaReader();
currentSchema = schemaCol.read(doc,null);
outputFolder = new File(TEMP_OUT_FOLDER);
if (outputFolder.exists()){
if (outputFolder.isFile()){
outputFolder.delete();
outputFolder.mkdirs();
}
}else{
outputFolder.mkdirs();
}
}
protected XmlSchemaCollection getSchemaReader(){
return new XmlSchemaCollection();
}
public void testSchema() throws Exception{
CompilerOptions compilerOptions = new CompilerOptions();
compilerOptions.setOutputLocation(outputFolder);
compilerOptions.setWrapClasses(false);
compilerOptions.setWriteOutput(true);
SchemaCompiler compiler = new SchemaCompiler(compilerOptions);
compiler.compile(currentSchema);
}
protected void tearDown() throws Exception {
deleteDir(outputFolder);
}
/**
* 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();
}
}