Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Using XML::Saxon::XSLT2 Errors

by runrig (Abbot)
on Jun 27, 2013 at 21:01 UTC ( #1041102=note: print w/replies, xml ) Need Help??

in reply to Using XML::Saxon::XSLT2 Errors

I see this code in the source for the library (XML/Saxon/
foreach my $path (qw( /usr/share/java/saxon9he.jar /usr/local/share/java/saxon9he.jar /usr/share/java/saxonb.jar /usr/local/share/java/saxonb.jar)) { $classpath = $path if -e $path; last if defined $classpath; }

It looks like it expects the jar file in one of those paths. If your jar file is not in any of those, go ahead and edit the source and add your path to the list. That's my guess anyway...

If I were to rewrite this, I would make it configurable via (at least) some environment variable, maybe SAXON_LIB_PATH or something...rather than just a hard coded list of paths

Replies are listed 'Best First'.
Re^2: Using XML::Saxon::XSLT2 Errors
by tobyink (Abbot) on Jun 27, 2013 at 22:02 UTC

    It is already configurable. Look a few lines further down at the import method:

    sub import { my ($class, @args) = @_; shift @args if @args && exists $args[0] && defined $args[0] && $args[0] =~ + /^[\d\.\_]{1,10}$/; Inline->import(Java => 'DATA', CLASSPATH=>$classpath, @args); }

    So the CLASSPATH => $classpath can be overridden by passing arguments to import a la:

    use XML::Saxon::XSLT2 CLASSPATH => "/path/to/saxonb.jar";

    There is an example of providing arguments to the import method in the documentation (though not the CLASSPATH argument).

    However I've not played with it much. If your application contains multiple instances of "use XML::Saxon::XSLT2" it's probably only the first one that counts. To be sure, you can supply the path on the command line like:

    perl -MXML::Saxon::XSLT2=CLASSPATH,/path/to/saxonb.jar

    PS: patches would be appreciated for this issue (or indeed for RT#66278 which is a long running one).

    package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
      Ah, I was misled by this comment in the docs:
      It expects Saxon to be installed in either '/usr/share/java/saxon9he.jar' or '/usr/local/share/java/saxon9he.jar'.

      Anyway, I'm unlikely to submit any patches since I'm not the one trying to use the library :-)

Re^2: Using XML::Saxon::XSLT2 Errors
by Uggles (Novice) on Jun 27, 2013 at 21:55 UTC
    Where are those paths? In my Java directory or in my Strawberry Perl one? Also, if I want it to just reference a path inside the module folder then how would I go about doing that?

      They're absolute paths. So on Windows, you'd probably want something starting with "C:\..."

      package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
        Is there anyway to make it so that the path isn't absolute? Or rather, a way to tell it that the file is in the same directory as the module?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1041102]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2017-06-26 16:17 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (583 votes). Check out past polls.