Subject: | unable to use saxon9ee features |
Date: | Mon, 29 Oct 2018 12:40:25 +0300 |
To: | bug-XML-Saxon-XSLT3 [...] rt.cpan.org |
From: | Vladimir Volovich <vladimir.volovich [...] gmail.com> |
Greetings,
Distribution name and version:
XML-Saxon-XSLT3-0.009
Perl version:
This is perl 5, version 26, subversion 2 (v5.26.2) built for
x86_64-linux-gnu-thread-multi
Operating System vendor and version:
Linux vvv 4.18.0-1-amd64 #1 SMP Debian 4.18.6-1 (2018-09-06) x86_64
GNU/Linux
I need to use the PE or EE version of Saxon, so I've modified XSLT3.pm and
changed the line
proc = new Processor(false);
to
proc = new Processor(true);
(in two places).
Also I've changed the line
my $classpath = Alien::Saxon->jar;
to
my $classpath = "/path/to/saxon9ee.jar";
When running the code such as this:
use XML::Saxon::XSLT3 "debug" => 2;
open(my $xslt, "<", "test.xsl");
my $trans = XML::Saxon::XSLT3->new($xslt);
open(my $input, "<", "test.xml");
print $trans->transform($input);
I'm getting an error:
method transform in class Transformer threw exception
java.lang.NoClassDefFoundError:
com/saxonica/ee/bytecode/iter/CompiledFilterIterator
Here is a complete output with debug=2:
[perl][1] validate done.
[perl][1] Starting build.
[perl][2] classpath:
/usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/InlineJavaServer.jar:/tmp/sax3/saxon9ee.jar
[perl][2] "/usr/lib/jvm/oracle-java8-jdk-amd64/bin/javac" -deprecation
-Xlint:unchecked -d "/home/vvv/.Inline/lib/auto/XML/Saxon/XSLT3_566d"
Transformer.java > cmd.out 2>&1
[perl][2] classpath:
[perl][1] build done.
[perl][1] Starting load.
[perl][2] classpath candidate '' scraped
[perl][2] classpath:
/usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/InlineJavaServer.jar
[perl][1] starting JVM...
[perl][1] client/server mode
[perl][2] next available port number is 44195
[perl][2] "/usr/lib/jvm/oracle-java8-jdk-amd64/bin/java"
org.perl.inline.java.InlineJavaServer 2 localhost 44195 false false false
[perl][2] classpath:
[perl][2] adding to classpath:
'/usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/InlineJavaUser.jar'
[java][2] added
file:/usr/lib/x86_64-linux-gnu/perl5/5.26/Inline/Java/InlineJavaUser.jar to
classpath
[perl][2] classpath candidate '' scraped
[perl][2] adding to classpath:
'/home/vvv/.Inline/lib/auto/XML/Saxon/XSLT3_566d'
[perl][2] adding to classpath: '/tmp/sax3/saxon9ee.jar'
[java][2] added file:/home/vvv/.Inline/lib/auto/XML/Saxon/XSLT3_566d/ to
classpath
[java][2] added file:/tmp/sax3/saxon9ee.jar to classpath
[perl][1] updating jdat cache
[perl][2] creating object in java (XML::Saxon::XSLT3::Transformer):
[perl][2] creating object in java (XML::Saxon::XSLT3::Transformer::1):
[perl][1] load done.
[java][1] loading InlineJavaUserClassLink via InlineJavaUserClassLoader
[java][1] method transform in class Transformer threw exception
java.lang.NoClassDefFoundError:
com/saxonica/ee/bytecode/iter/CompiledFilterIterator
[perl][2] autostudying java.lang.NoClassDefFoundError...
[perl][2] creating object in java
(XML::Saxon::XSLT3::java::lang::NoClassDefFoundError):
[perl][2] creating object in java
(XML::Saxon::XSLT3::java::lang::NoClassDefFoundError):
XML::Saxon::XSLT3::java::lang::NoClassDefFoundError=HASH(0x562f76573c38)[perl][2]
destroying object in java (XML::Saxon::XSLT3::Transformer):
[perl][1] killed by natural death.
[perl][1] JVM owner exiting...
[perl][1] Sending 'die' message to JVM...
[java][1] received a request to die...[perl][1] Sending 15 signal to JVM...
[perl][1] Sending 9 signal to JVM...
[perl][1] exiting with 255
To reproduce this, you need to:
1) download Saxon EE for Java from
https://www.saxonica.com/download/java.xml
(I've used version 9.8.0.14 for my testing)
2) unzip the distribution and install saxon9ee.jar in some folder
3) Obtain the free Evaluation License on this page:
https://www.saxonica.com/download/download.xml
4) copy the license file (saxon-license.lic) to the same folder with
saxon9ee.jar
Note: without obtaining and installing the license, the error does not
appear.
5) modify XSLT3.pm as described above:
change the line
proc = new Processor(false);
to
proc = new Processor(true);
(in two places), and also change the line
my $classpath = Alien::Saxon->jar;
to
my $classpath = "/path/to/saxon9ee.jar";
6) run the perl program:
use XML::Saxon::XSLT3 "debug" => 2;
open(my $xslt, "<", "test.xsl");
my $trans = XML::Saxon::XSLT3->new($xslt);
open(my $input, "<", "test.xml");
print $trans->transform($input);
Best wishes,
Vladimir