[I've lost the original email containing this thread but I found it in the MARC archives and pasted it below the line of equal signs....]

Matt,

You are absolutely right, it was NOT _remotely_ obvious that BCEL has to be present in order for LoadProperties to work. If you hadn't posted that fact, I would never have found that in the manual, for several reasons: 1. LoadProperties is a core task so I would have assumed that it wouldn't need extra jars. It's my understanding that core tasks, by definition, are ones that don't need extra jars to work. Apparently, this is not true; even a core task may need extra jars in somes cases. 2. The article on LoadProperties doesn't mention the need for BCEL to be present. 3. The article on FilterChains doesn't mention the need for BCEL to be present.

Even if I had looked at the optional jars page, I might have missed it because I would have been looking for filterchains or loadproperties in the second column of the table, not specifically "ClassConstants filter reader".

So thank you VERY much for pointing that out. As soon as I installed BCEL, I found that my task executed without the IOExceptions.

Unfortunately, I still have one problem that may keep this from being the solution to my problem after all: the ClassConstants filter reader apparently only gets information about _String_ constants (it only returned values for the Strings in my .class file but no other types) but the constant I am trying to read is defined as follows:

public static final EmploymentHistoryFormats DESIRED_EMPLOYMENT_HISTORY_FORMAT = EmploymentHistoryFormats.LIST_FORMAT;

EmploymentHistoryFormats is an enum, not a String.

Is there any way to coax this filter to tell me that the current value of DESIRED_EMPLOYMENT_HISTORY_FORMAT is LIST_FORMAT? That's all I really want to know to get my build.xml working 100%.

If not, is there any other way to get this information?

--
Rhino

=================================================================
I thought the manual was wrong at first too, but using
a class file is correct.  What is not as obvious is
that you need BCEL to make it work.  This is
documented in install.html#librarydependencies from
the manual.

HTH,
Matt

--- Rhino <[EMAIL PROTECTED]> wrote:

The classcontents filterreader might very well be
exactly what I want - if I
could understand how to use it!

I've just tried several experiments and nothing
works for me; nothing at
all.

I must be misunderstanding some of the concepts. For
instance, it _looks_ as
if I should be able to read a file, grab all the
constants from it, and turn
them into properties. But I can't make out if I'm
supposed to reading a
class file or a source file: it _looks_ as if I
should be reading a class
file, which seems counterintuitive to me.
Nevertheless, I've tried pointing
the task at both a real .class file and at a real
Java source file in turn
but I inevitably get "Unable to load file:
java.io.IOException" regardless
of which I use. Here is my task:

<loadproperties srcfile="ResumeConstants.java">

<filterchain>

<classconstants/>

</filterchain>

</loadproperties>



(Replacing the srcfile value with
"ResumeConstants.class" made no difference
at all. Both the source and the class file are in
the same directory as the
Ant script itself, just to keep things nice and
simple.)

Here is the stackTrace:

BUILD FAILED


E:\eclipse\3.1.1\eclipse\workspace\Resume_JDK_1.5.0\xml\filter.xml:34:

Unable to load file: java.io.IOException

at

org.apache.tools.ant.taskdefs.LoadProperties.execute(LoadProperties.java:227)

at

org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)

at org.apache.tools.ant.Task.perform(Task.java:364)

at
org.apache.tools.ant.Target.execute(Target.java:341)

at

org.apache.tools.ant.Target.performTasks(Target.java:369)

at

org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)

at

org.apache.tools.ant.Project.executeTarget(Project.java:1185)

at

org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)

at

org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDe \
faultExecutor.java:32)

at

org.apache.tools.ant.Project.executeTargets(Project.java:1068)

at

org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:42 \
3)

at

org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:1 \
37)

Caused by: java.io.IOException

at

org.apache.tools.ant.filters.ClassConstants.read(ClassConstants.java:136)

at

org.apache.tools.ant.filters.BaseFilterReader.read(BaseFilterReader.java:86)

at java.io.Reader.read(Unknown Source)

at

org.apache.tools.ant.util.FileUtils.readFully(FileUtils.java:1107)

at

org.apache.tools.ant.filters.util.ChainReaderHelper.readFully(ChainReaderHelper.java:2 \
31)

at

org.apache.tools.ant.taskdefs.LoadProperties.execute(LoadProperties.java:204)

... 11 more

--- Nested Exception ---

java.io.IOException

at

org.apache.tools.ant.filters.ClassConstants.read(ClassConstants.java:136)

at

org.apache.tools.ant.filters.BaseFilterReader.read(BaseFilterReader.java:86)

at java.io.Reader.read(Unknown Source)

at

org.apache.tools.ant.util.FileUtils.readFully(FileUtils.java:1107)

at

org.apache.tools.ant.filters.util.ChainReaderHelper.readFully(ChainReaderHelper.java:2 \
31)

at

org.apache.tools.ant.taskdefs.LoadProperties.execute(LoadProperties.java:204)

at

org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)

at org.apache.tools.ant.Task.perform(Task.java:364)

at
org.apache.tools.ant.Target.execute(Target.java:341)

at

org.apache.tools.ant.Target.performTasks(Target.java:369)

at

org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)

at

org.apache.tools.ant.Project.executeTarget(Project.java:1185)

at

org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)

at

org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDe \
faultExecutor.java:32)

at

org.apache.tools.ant.Project.executeTargets(Project.java:1068)

at

org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:42 \
3)

at

org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:1 \
37)



What am I doing wrong? By the way, I've tried this
task both ways, with the
convenience method and the "long way" but all
approaches fail on
java.io.IOException.

Also, to accomplish what I want to do, am I correct
in assuming that I will
need to put two or three filters in sequence in the
task? From what I see in
the manual, I think I need to have everything within
a LoadProperties task,
then use a ConstantChain to pull out all of the
constants, then use a
LineContains to find the line containing my
constant,
DESIRED_EMPLOYMENT_HISTORY_FORMAT, then store that
constant and its value as
a property so that I end up with a property named
DESIRED_EMPLOYMENT_HISTORY_FORMAT with a value of
PARAGRAPH_FORMAT or
LIST_FORMAT. Is that more-or-less correct?

If someone could please help me get started, I would
really appreciate it. I
think I'm doing what the manual says but nothing
seems to work. What's the
trick?

By the way, assuming this does what I want, thank
you for pointing this
technique out to me. I'd seen the term FilterChain
before but had never
looked at the article to see what they did.

--

Rhino





--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.375 / Virus Database: 267.15.5/256 - Release Date: 10/02/2006


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to