Search code examples
antwsdlgradleaxiswsdl2java

ANT Gradle - Axis WSDL 2 Java : No such property: axis for class: org.gradle.api.internal


I have the following code snap in ANT build.xml which is converting WSDL to Java. It works and uses axis-ant.jar 1.4.0

  <!-- Build generated jars -->
  <target name="axis-WSDL-2-Java" depends="init">
    <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
    <axis-wsdl2java
       output="${build.gen.src}"
       testcase="true"
       verbose="true"
       url="${build.src.wsdl.v1}/${build.ws.wsdlfile}" >
    </axis-wsdl2java>


   <!-- Compile artifacts -->
     <echo message="Compiling WS artifact source for Axis..." />
     <javac destdir="${build.gen.classes}" debug="true" >
         <src path="${build.gen.src}" />
            <classpath>
               <pathelement path="${build.lib.3rdParty}" />
               <path refid="axis.classpath" />
            </classpath>
     </javac>

    <jar .... some jar code here...
    </jar>
  </target>



Now, I converted the build script to Gradle and came up with the following Gradle code snap..

//wsdl to java
task axisWSDLTojava() << {
       println "-- Inside axisWSDLToJava"
       def flGen = new File( "$project.buildDir/thidsGen/src" )
       flGen.mkdirs()
       flGen =  new File( "$project.buildDir/thidsGen/classes" )
       flGen.mkdirs()

       ant {
            taskdef(
            resource: 'axis-tasks.properties',
            classpath: configurations.axisAnt.asPath )
            axis-wsdl2java(
              output: "$project.buildDir/thidsGen/src",
              testcase: "true",
              verbose: "true",
              url: "$projectDir/src/ws/v1/wsdl/MDSSFileInfo.wsdl")
       }
}

//compile generated src to classes
task compileJavaWsArtifacts (type: JavaCompile, dependsOn: axisWSDLTojava) << {
       println "-- Inside compileGenSrc"
       source = "$project.buildDir/thidsGen/src"
       classpath = configurations.axisAnt.asPath
       destinationDir = "$project.buildDir/thidsGen/classes"
}
// Build jar with web service artifacts
task jarWsArtifacts( type: Jar, dependsOn: compileJavaWsArtifacts ) << {
   println "-- Inside jarWsArtifacts"
   // some code here
   // some code here to create the jar etc
}



Gradle logic for calling the respective task is all set i.e. I call the above task as dependsOn in CompileJava Gradle task..

// Compile java server components - must have artifacts first
compileJava {
   dependsOn jarWsArtifacts
}

Configuration section in Gradle is defined as:

// Custom configurations
configurations {
   axisAnt
}

Dependencies section in Gradle is defined as:

// Define dependencies
dependencies {
   // Compilation
   //compile 'groupid:artifactid:x.x.x'
   //compile 'groupid:artifactid:x.x.x@yyy'
   //other bunch of dependencies... come here which are required for compile task in Gradle

   //axis-wsdl2java generates java files, which generates class files and jard into a -ws.jar file
   compile  fileTree( dir: 'build/resultantJar', include: "$ProjectName-ws-*.jar" )

   // Unit Tests
   testCompile 'xxx:yyy:x.x.x'
   testCompile 'xxx:yyy:x.x.x'
   //more artifacts for testCompile..

   // Integration tests
   // Everything from compile and testCompile targets
   integrationTestCompile configurations.compile
   integrationTestCompile configurations.testCompile

   // Output of compiling "main" files
   integrationTestCompile sourceSets.main.output

   // Additional dependencies from war and others
   integrationTestCompile 'xxx:yyy:x.x.x'
   integrationTestCompile 'xxx:yyy:x.x.x'
   //other enteries for IT test task 

   // All configuration files in conf folder in source control required for IT tests.
   integrationTestRuntime files( 'conf' )

   //Axis-ANT
   axisAnt 'axis:axis-ant:1.4.0'
   axisAnt 'othergroupid:otherartifactid:x.x.x'
   axisAnt 'othergroupid:otherartifactid:x.x.x'
   // comes here which are required for axis-wsdl2java to work
}

BUT, While running "gradle clean build", I'm getting the following error message:

:axisWSDLTojava FAILED

FAILURE: Build failed with an exception.

* Where:
Build file '/production/jenkinsAKS/workspace/DFDailyFeedSvc/build.gradle' line: 90

* What went wrong:
Execution failed for task ':axisWSDLTojava'.
> No such property: axis for class: org.gradle.api.internal.project.DefaultAntBuilder
  Possible solutions: ant

Any idea, why it's not able to see axis-wsdl2java (which I see if defined in axis-tasks.properties file within axis-ant.jar version 1.4.0 as following:)

#properties file for taskdefing the public Axis taskdefs

axis-wsdl2java=org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
axis-java2wsdl=org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask
axis-admin=org.apache.axis.tools.ant.axis.AdminClientTask

Solution

  • OK, resolved.

    Changing the following in the Gradle code did the trick. Don't know why Gradle didn't pick it without double quotes way. REASON: In Java/Groovy (Gradle uses Groovy), you can't have a function with a "-" in it's name (you can have giga_fifa but not giga-fifa). Glad, using "" resolved it.

    axis-wsdl2java( 
    

    with

    "axis-wsdl2java"(
    

    Other thing, wherever I used "$project.buildDir .. I changed that to $buildDir as ANT was complaining about project.buildDir not found or buildDir not found when it was written in $project.buildDir format. Using $buildDir resolved those issues.

    Also, compileJavaWsArtifacts was NOT seeing the generated src files!!! even though there were generated successfully after wsdl2java operation in Gradle build. So, did the shenzi using the following code:

    //compile generated src to classes
    //task compileJavaWsArtifacts (type: JavaCompile, dependsOn: axisWSDLToJava) << {
    //       source = "$buildDir/thidsGen/src"
    //       classpath = configurations.axisAnt.asPath
    //       destinationDir = "$buildDir/thidsGen/classes"
    //}
    
    //compile generated src to classes
    task compileJavaWsArtifacts (dependsOn: axisWSDLToJava) << {
       ant {
          javac( destdir: "$buildDir/thidsGen/classes", debug: 'true', includeAntRuntime: 'no', classpath: configurations.axisAnt.asPath ) {
             src( path: "$buildDir/thidsGen/src" )
          }
       }
    }