You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ds...@apache.org on 2006/04/10 12:42:43 UTC
svn commit: r392916 [4/4] - in
/webservices/axis2/trunk/java/modules/xmlbeans: ./ src/ src/org/
src/org/apache/ src/org/apache/axis2/ src/org/apache/axis2/xmlbeans/
test-resources/ test/ test/org/ test/org/apache/ test/org/apache/axis2/
test/org/apache...
Added: webservices/axis2/trunk/java/modules/xmlbeans/test/org/apache/axis2/xmlbeans/WSDL2JavaTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xmlbeans/test/org/apache/axis2/xmlbeans/WSDL2JavaTest.java?rev=392916&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/xmlbeans/test/org/apache/axis2/xmlbeans/WSDL2JavaTest.java (added)
+++ webservices/axis2/trunk/java/modules/xmlbeans/test/org/apache/axis2/xmlbeans/WSDL2JavaTest.java Mon Apr 10 03:42:36 2006
@@ -0,0 +1,406 @@
+/*
+ * 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.wsdl.codegen.CodeGenerationEngine;
+import org.apache.axis2.wsdl.codegen.CodeGenerationException;
+import org.apache.axis2.wsdl.util.CommandLineOption;
+import org.apache.axis2.wsdl.util.CommandLineOptionConstants;
+import org.apache.axis2.wsdl.util.CommandLineOptionParser;
+import org.apache.tools.ant.BuildException;
+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 class WSDL2JavaTest extends TestCase{
+
+ public static final String OUTPUT_LOCATION_BASE = "./out_put_classes";
+ public static final String OUTPUT_LOCATION_PREFIX = "/test";
+ private static int folderCount = 0;
+ // public static final String OUTPUT_LOCATION_BASE = "C:\\GeneratedCode\\test4\\src";
+ 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";
+
+
+ /**
+ * 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();
+ }
+
+ /**
+ * Test for the WSAT wsdl
+ */
+ public void testCodeGenerationWSAT(){
+
+ try {
+ generateAndCompile("wsat.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ e.printStackTrace();
+ fail("Exception while code generation test!"+ e.getMessage());
+ }
+ }
+
+ /**
+ * Test for the WSDL that's missing a service
+ * Since we do noit permit the clients to be generated when
+ * service is missing, we should get an error
+ */
+ public void testCodeGenerationNoService(){
+
+ try {
+ generateAndCompile("no-service.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ fail("Undesired behavior while code generating!");
+ } catch (CodeGenerationException e) {
+ //done - we are good if we reach here
+ }
+ }
+
+ /**
+ * Test for the Headers
+ */
+ public void testCodeGenerationHeaders(){
+
+ try {
+ generateAndCompile("headers.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ fail("Exception while code generation test!"+ e.getMessage());
+ }
+ }
+
+ /**
+ * Test for the ping WSDL
+ */
+ public void testCodeGenerationPing(){
+
+ try {
+ generateAndCompile("ping.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ fail("Exception while code generation test!"+ e.getMessage());
+ }
+ }
+
+
+ /**
+ * Test for the interoptestdoclitparameters
+ */
+ public void testCodeGenerationInteropTestDocLitParams(){
+
+ try {
+ generateAndCompile("interoptestdoclitparameters.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ fail("Exception while code generation test!"+ 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 mime doc
+ */
+ public void testCodeGenerationMimeDoc(){
+
+ try {
+ generateAndCompile("mime-doc.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 wscoor.wsdl
+ */
+ public void testCodeGenerationWSCOOR(){
+
+ try {
+ generateAndCompile("interoptestdoclit.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());
+// }
+// }
+
+ /**
+ * Test for the modified ping-unboond wsdl.
+ * The binding is removed in this wsdl.Codegen should fail for this
+ * WSDL by saying
+ *
+ */
+ public void testCodeGenerationPingUnbound(){
+
+ try {
+ generateAndCompile("ping-unbound.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ fail("Undesired behavior while code generating!");
+ } catch (CodeGenerationException e) {
+ //we are good
+ }
+ }
+
+ /**
+ * Test for the simple doc lit from Axis 1
+ *
+ */
+ public void testCodeGenerationSimpleDocLiteral(){
+
+ try {
+ generateAndCompile("simple-doc-literal.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ fail("Exception while code generation test!"+ e.getMessage());
+ }
+ }
+
+ /**
+ * Test for the simple doc lit from Axis 1
+ *
+ */
+ public void testCodeGenerationComplexDocLiteral(){
+
+ try {
+ generateAndCompile("complex-doc-literal.wsdl", OUTPUT_LOCATION_BASE+OUTPUT_LOCATION_PREFIX+folderCount++);
+ } catch (CodeGenerationException e) {
+ fail("Exception while code generation test!"+ e.getMessage());
+ }
+ }
+ /**
+ * Test for the mtom echo wsdl. This wsdl contains a restriction based on xmime and a
+ * SOAP 1.2 binding
+ *
+ */
+ public void testCodeGenerationMTOMEcho(){
+
+ try {
+ generateAndCompile("mtomecho.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
+ */
+ private void generateAndCompile(String wsdlName, String outputLocation) throws CodeGenerationException {
+ codeGenerate(WSDL_BASE_DIR + wsdlName,outputLocation);
+ //todo - Still the compilation fails (the original problem of the java.home was settled by setting fork
+ //todo - to true). Now the compiler fails for some unknown reason (inside maven! works fine in the IDE though)
+
+ //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);
+ try {
+ codeGenProject.executeTarget(COMPILE_TARGET_NAME);
+ } catch (BuildException e) {
+ fail();
+ }
+
+ }
+
+ /**
+ *
+ */
+ 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;
+ }
+
+
+}