[jdom-interest] How to specify a basedir from the Transformer

Ken Roberts ken at 9ci.com
Thu Dec 30 09:24:25 PST 2004


Patrick,

My comment was intended to answer the question you asked:

"So there is no way to pass in a system property to set this up?"


Since there is no system property for that (According to Per) then you
could build in your own functionality by using the system property as I
described it, and then do your internal references from there using that
as a base.  In other words you could wrap the transformer with a package
that gives the illusion of a base directory.

This is a hack, not an elegant solution to the problem.  However, in an
environment where the people maintaining the environment rely on
environment variables to define such things, it is entirely appropriate.

The reason I used JBoss as an example in my original response is because
it turned out exactly that way for us.  Our clients seemed to be
comfortable with the idea of environment variables, so we referenced our
external directories for attachments and such by using a variable of our
choosing, the same way you should define ${JAVA_HOME} and such.  In
order for our applications to get that property, it had to be passed
into the JVM from the command line.  Here's the basic steps:

     1. Set the system environment variable MY_HOME to whatever you
        like.
     2. In the application server, if it's Java based, alter the script
        that runs the java command by adding -DMY_HOME=%MY_HOME% (for a
        MS operating system) or -DMY_HOME=$MY_HOME (for unix shell).
     3. In the server-side application, use
        System.getProperty("MY_HOME") to get the value of the variable.
     4. If it's a directory, perform whatever tests to assure that it
        exists and is writable.
     5. If you need to pass it to an applet, you can add it to a session
        or encode it as a parameter in the html.




On Thu, 2004-12-30 at 03:50, patrick at openbase.com wrote:

> Ken, Per
> 
> To be fair with the 2 of you :) I would be interested to know what  
> system property needs to be added to specify the base dir to use for  
> the Transformer to resolve the external file. What reasons should I  
> pursue to know whether I should create a custom URIResolver vs setting  
> up a system property?
> 
> Thanks
> 
> 
> 
> On 30 déc. 04, at 01:28, Ken Roberts wrote:
> 
> >  On Wed, 2004-12-29 at 18:08, Per Norrman wrote:
> > Ken Roberts wrote:
> > > On Wed, 2004-12-29 at 17:27, Per Norrman wrote:
> > >
> > >>/Ken Roberts wrote:
> > >>> Passing in a system property to a JVM is done by specifying
> > >>> -Dvariable=value, no spaces on the command line.
> > >>>
> > >>> Doing this inside JBoss means editing your run.bat file or your  
> > run.sh
> > >>> file, or (if redhat) the jboss_init_redhat.sh file.
> > >>>
> > >><irony>
> > >>   Thank you very much for that timely and accurate piece of  
> > information.
> > >></irony>
> > >>
> > >>Serioulsy, next time, please read the entire thread before jumping  
> > in ...
> > >>
> > >>/pmn/
> > >>
> > >
> > > Per,
> > >
> > > Sorry if my solution seems old-school, but I had read the entire  
> > thread.
> > >
> > > You answered the direct question of telling that the underlying
> > > transformer has no such setting.  I tried to answer the next  
> > question by
> > > indirection.
> >
> > Aha, so you *anticipated* that the next question would be "Now that I  
> > have the
> > URIResolver, and knowing that this specific URIResolver uses a system  
> > property
> > to resolve relative urls, what can I possibly to do get that darn  
> > system
> > property set?", and answered that question before it was posed.
> >
> > If that's the case, your'e too quick for the rest of us.
> >
> >  No, I went down the other path from the one you suggested, which is  
> > to set a system property based on an environment variable.  I did it  
> > to offer a different solution to the same problem, since a URIResolver  
> > didn't exactly fit the needs I had when I implemented my solution.
> >
> >
> > There are all sorts of ways to define a base directory,
> > > and the one I have used in the past is what I described because it  
> > fit
> > > more easily with our needs.  Your solution would take 10 minutes
> >
> > Actually, I said 10 *lines* of code.
> >
> >  As opposed to:
> >
> >  File myBaseDir = new File(System.getProperty("mybasedir"));
> >
> >
> > Let's not continue this off-topic thread ...
> >
> >  Sure.  We can stop as soon as you stop flaming me.  I have in no way  
> > earned this treatment, and as a matter of fact I have a few months to  
> > spend on this if you like.  Sarcasm and bitterness has no place on a  
> > forum such as this.  We're not in a contest to see who's the brightest  
> > programmer, we're offering solutions to problems that people might  
> > have.
> >
> >  Whether my solution was in style or not, it did satisfy a certain  
> > category of business needs.  Generally it's considered a good idea to  
> > look at multiple solutions before making a design decision, and you  
> > offered one solution.  I offered another.
> >
> >
> > > code, you said, and mine took maybe 5.  Which is correct depends a  
> > lot
> > > on your application needs.
> > >
> > > The interesting bit is that your solution and mine would both be  
> > placed
> > > in just about the same place in whatever code one would write.   
> > Since it
> > > can't be done (by your statement) internally to the XSL parser, it  
> > would
> > > have to be done in the wrapping code, no matter what the solution.
> > >
> > > Passing an environment variable is quaint and maybe not very elegant,
> > > but it does work.  I shared it because the original poster asked
> > > specifically about passing system properties.  Since the JVM used to
> > > pass the environment of the operating system in but no longer does, I
> > > thought my contribution was pertinent.
> > >
> > >>/> On Wed, 2004-12-29 at 16:38, Per Norrman wrote:
> > >>>
> > >>>>/Patrick JUSSEAU wrote:
> > >>>>> Hi,
> > >>>>>
> > >>>>> So there is no way to pass in a system property to set this up?
> > >>>>>
> > >>>>Not that I'm aware of, no.
> > >>>>
> > >>>>> I guess the other solution would be to put all the files I need  
> > in the
> > >>>>> same directory but I would rather have the option to set the  
> > base dir
> > >>>>> of the external file that is referenced from the document()  
> > method.
> > >>>>
> > >>>>But that is exactly what you would/could do with an URIResolver.  
> > It is less
> > >>>>that 10 lines of code to have a URIResolver resolve a relative url  
> > using a
> > >>>>system property as the base uri.
> > >>>>
> > >>>>/pmn
> > >>>>
> > >>>>
> > >>>>>
> > >>>>> Patrick
> > >>>>>
> > >>>>> On 29 Dec 2004, at 19:51, Per Norrman wrote:
> > >>>>>
> > >>>>>> Hi,
> > >>>>>>
> > >>>>>> I believe you can use the Transformer#setURIResolver method.
> > >>>>>>
> > >>>>>> /pmn
> > >>>>>>
> > >>>>>>
> > >>>>>> patrick at openbase.com wrote:
> > >>>>>>
> > >>>>>>> Hi,
> > >>>>>>> I am using JDOM to perform an XSL transformation. The problem  
> > I have
> > >>>>>>> is that my XSL Document refers to an external file using the
> > >>>>>>> document(URL) method. I don't want to use an absolute URL.  
> > What I
> > >>>>>>> would like to do is tell JDOM  (the Transformer) what the  
> > basedir is
> > >>>>>>> (/Users/aUser) so that in my XSL file I could use:
> > >>>>>>> ...
> > >>>>>>> <xsl:variable name="lookupParam"  
> > select="document('aFile.xml')"/>
> > >>>>>>> ...
> > >>>>>>> and aFile.xml would abvioulsy be in /Users/aUser
> > >>>>>>> Here is the code I am using
> > >>>>>>> Document p_sourceDocument = ....
> > >>>>>>> Document p_xslDocument = ....
> > >>>>>>> // Create a JDOMSource from the source JDOM Document
> > >>>>>>>         JDOMSource source = new JDOMSource(p_sourceDocument);
> > >>>>>>>         // Create a JDOMSource from the source XSL Document
> > >>>>>>>         JDOMSource xslSource = new JDOMSource(p_xslDocument);
> > >>>>>>>         // Get a XSLT Transformer
> > >>>>>>>         Transformer transformer =
> > >>>>>>> getTransformerFactory().newTransformer(xslSource);
> > >>>>>>>         // Create a JDOMResult
> > >>>>>>>         JDOMResult result = new JDOMResult();
> > >>>>>>>         // Populate the Result
> > >>>>>>>         transformer.transform(source, result);
> > >>>>>>> I guess there must be some way to tell the underlying  
> > Transformer
> > >>>>>>> what the basedir is?
> > >>>>>>> Thanks,
> > >>>>>>> Patrick
> > >>>>>>> _______________________________________________
> > >>>>>>> To control your jdom-interest membership:
> > >>>>>>> //_//_http://www.jdom.org/mailman/options/jdom-interest/__  
> > youraddr at yourhost.com
> > >>>>>>
> > >>>>>>
> > >>>>>> _______________________________________________
> > >>>>>> To control your jdom-interest membership:
> > >>>>>>  
> > __http://www.jdom.org/mailman/options/jdom-interest/
> > youraddr at yourhost.com__
> > >>>>>>
> > >>>>>
> > >>>>>
> > >>>>
> > >>>>_______________________________________________
> > >>>>To control your jdom-interest membership:
> > >>>>__http://www.jdom.org/mailman/options/jdom-interest/
> > youraddr at yourhost.com__
> > >>>>/
> > >>>>
> > >>/
> > >>
> >
> > _______________________________________________
> > To control your jdom-interest membership:
> > http://www.jdom.org/mailman/options/jdom-interest/youraddr@yourhost.com
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.jdom.org/pipermail/jdom-interest/attachments/20041230/5eb6ab8b/attachment.htm


More information about the jdom-interest mailing list