The Ant tasks are giving me trouble. The XJavaDocFilter, for example looks like a cool way to filter for just the classes you need. However, it's forcing me to understand it's inner workings. It's not as simple as it seems. It apparently considers files that are referenced by the file given in its isSelected method. In my case, I have an Address session bean that somehow indirectly references a Tester inner class in a lockking object. I extended the filter so I can add some logging to see what was going on. This is my butchered re-implementation:
public boolean isSelected(File basedir, String filename, File file)
throws BuildException
{


       if( !filename.endsWith( ".java" ) )
       {
           log(filename + " does not end with .java.");
           return false;
       }

       _xJavaDoc.reset( true );
       log("considering " + filename);
       try
       {
           //validateOptions();

_xJavaDoc.addSourceSet( new FileSourceSet( basedir, new String[]{filename} ) );

for( ClassIterator i = XCollections.classIterator( _xJavaDoc.getSourceClasses() ); i.hasNext(); )
{
XClass clazz = i.next();
Parameter[] params = getParameters();


               for( int j = 0; j < params.length; j++ )
               {
                   Parameter param = params[j];

                   if( param.getName().equals( "implements" ) )
                   {
                       String mandatoryClass = param.getValue();

if( !clazz.isA( mandatoryClass ) )
{
log(clazz + " is not a " + mandatoryClass);
return false;
}
else
log(clazz + " does implement " + mandatoryClass);
}
else if( param.getName().equals( "contains-tag" ) )
{
String mandatoryTag = param.getValue();


if( !clazz.getDoc().hasTag( mandatoryTag ) )
{
log(clazz + " does not have tag " + mandatoryTag);
return false;
}
}
}
}
}
catch( OutOfMemoryError e )
{
System.err.println( e.getMessage() );
XJavaDoc.printMemoryStatus();
System.err.println( "Try to increase heap size. Can be done by defining ANT_OPTS=-Xmx640m" );
System.err.println( "See the JDK tooldocs." );
throw new BuildException( e.getMessage(), e );
}
catch( Throwable t )
{
t.printStackTrace();
throw new BuildException( "Unexpected error", t );
}
finally
{
//XJavaDoc.printMemoryStatus();


_xJavaDoc.printLogMessages( System.out, XJavaDoc.NO_IMPORTED_PACKAGES );
_xJavaDoc.printLogMessages( System.out, XJavaDoc.ONE_OR_MORE_IMPORTED_PACKAGES );
_xJavaDoc.reset( true );
System.gc();
}
log(filename + " is selected.");
return true;
}


Here's my build.xml:
<?xml version="1.0"?>
<project default="test" basedir="." name="Test">
<description>
This is a test script for experimental use.
</description>
<!-- =================================================================== -->
<!-- Basic build targets for the project -->
<!-- =================================================================== -->
<property name="project.base" location="../../"/>


<import file="includes/main-init.xml"/>

<target name="init" depends="main-init" unless="init.already.called">
<property name="init.already.called" value="true"/>
<property name="xdoclet.base.folder" value="xdoclet-1.2"/>
<property name="xdoclet.home" location="${tools.dir}/${xdoclet.base.folder}"/>
<path id="xdoclet.jars">
<fileset dir="${xdoclet.home}" includes="*.jar"/>
</path>
<path id="ics.task.path">
<pathelement location="${ant.ext.dir}/icstasks.jar"/>
<pathelement location="${appserver.jarfile}"/>
<path refid="xdoclet.jars"/>
</path>
<taskdef resource="com/icsaward/award/ant/tasks/taskdef.properties" classpathref="ics.task.path" />
</target>


<target name="test" depends="init">
<typedef name="ejbfilter" classname="xjavadoc.ant.XJavadocFilter" classpathref="xdoclet.jars"/>
<xjavadocupdate destdir="d:/misc"
failonerror="no" deploydesc="ejb-jar.xml,jonas-ejb-jar.xml">
<fileset dir="${project.src}" includes="${neware.path}/server/sb/em/address/*.java">
<or>
<!-- <custom classname="xjavadoc.ant.XJavadocFilter" classpathref="xdoclet.jars">-->
<!-- <param name="implements" value="javax.ejb.EntityBean"/>-->
<!-- </custom>-->
<custom classname="com.icsaward.award.ant.tasks.XJavaDocSelector" classpathref="ics.task.path">
<param name="implements" value="javax.ejb.SessionBean"/>
</custom>
<custom classname="com.icsaward.award.ant.tasks.XJavaDocSelector" classpathref="ics.task.path">
<param name="implements" value="com.icsaward.award.server.sb.common.EntityManagerBean"/>
</custom>
</or>
</fileset>
</xjavadocupdate>
</target>


</project>

When it goes into the isselected method for my AddressEMBean java file it is not selected and I get the following output:

considering com\icsaward\award\server\sb\em\address\AddressEMBean.java
com.icsaward.award.server.sb.em.address.AddressEMBean does implement javax.ejb.SessionBean
com.icsaward.award.server.common.Tester is not a javax.ejb.SessionBean


The com.icsaward.award.server.common.Tester object is an inner class defined in a totally irrelevant Java file located elsewhere in my filesystem. It is not even part of the fileset that I pass to the filter. However, it is causing a rejection of the file that I do want to go through. I'll have to look at this more to see what the issue is. If anyone has any clues why it behaves this way feel free to chime in.

--
Clifton C. Craig, Software Engineer
Intelligent Computer Systems -  A Division of GBG
2101 Embassy Drive
Lancaster, PA  17603

Phone: 717-295-7977 ext. 621
Fax: 717-295-7683
[EMAIL PROTECTED]
[EMAIL PROTECTED]




-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
xdoclet-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-user

Reply via email to