Hi. My IDE generates an Ant script with the run-deploy and run-undeploy targets. They internally use the standard <get> task, but they don't check the outcome and sometimes return false positive.
The build is customizable by editing the file build.xml that includes this generated project file. I want to replace <get> with a macro that additionally greps the http response body for the success message. The main problem is: when the macro tries to call the real <get>, it either fails with a stack overflow or with the message: "antcall task calling its own parent target". I thought I could fix it with name spaces, but it was too complex for me. My current workaround is to re-import org.apache.tools.ant.taskdefs.Get with a different task name. There are some other issues with overriding <get> with a macrodef: the generated script calls get either with or without a password, but a macro cannot pass unknown attributes to the wrapped tasks. On the other hand, <presetdef> can pass them, but it won't let me add the additional checker task. Macro attributes with default values don't work for the the "password" property of <get>, because null and empty string treated differently. There's no way to avoid calling the property setter, if the property has a default value in the macro instance. My workaround is to have two <real-get> elements in the custom script: with and without the password. This leads to another problem: to invoke one of the <real-get> tasks conditionally I have to use <antcall> and because of that I can't support the optional children elements of <get>. <?xml version="1.0" encoding="utf-8"?> <project default="build" > <taskdef name="real-get" classname="org.apache.tools.ant.taskdefs.Get" /> <macrodef name="get"> <attribute name="src"/> <attribute name="dest"/> <attribute name="username" default="NOT-SET" /> <attribute name="password" default="NOT-SET" /> <sequential> <condition property="mymacro.no.creds"> <and> <equals arg1="@{username}" arg2="NOT-SET"/> <equals arg1="@{password}" arg2="NOT-SET"/> </and> </condition> <property name="mymacro.src" value="@{src}"/> <property name="mymacro.dest" value="@{dest}"/> <property name="mymacro.username" value="@{username}"/> <property name="mymacro.password" value="@{password}"/> <antcall target="-get-without-creds"/> <antcall target="-get-with-creds"/> <!-- TODO: check download result and optionally fail --> <echo message="some additional check"/> </sequential> </macrodef> <target name="-get-without-creds" if="mymacro.no.creds"> <real-get src="${mymacro.src}" dest="${mymacro.dest}" /> </target> <target name="-get-with-creds" unless="mymacro.no.creds"> <real-get src="${mymacro.src}" dest="${mymacro.dest}" username="${mymacro.username}" password="${mymacro.password}" /> </target> <target name="build"> <get src="http://www.calife.com/HTML/test.php" dest="out.html"/> </target> </project> --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional commands, e-mail: user-h...@ant.apache.org