Hi!

I tried to implement get_dom in a content provder, but AxKit
insists on using get_strref !?!

In the POD documentation and Kip's AxKit book I read that
only one of get_dom, get_strref or get_fh is needed, and
get_dom would be the most efficient one - so I thought it
would also be the preferred one ;-) .

I added a get_strref again that outputs the dom tree with
toString, and its used by AxKit, but it seems inefficient
for me to convert it to a string and parse it again in
the next stage ...

I attached some lines from error_log and my test provider...
Maybe somebody could point at my error...

Peter Mueller
WOTLmade

#!/usr/bin/perl

use strict;
package elimpex::Apache::AxKit::TestProvider;
use Apache::AxKit::Provider;
use vars qw (@ISA);
@ISA = qw (Apache::AxKit::Provider);
use AxKit;
use Apache::AxKit::Exception;
use Apache::Log ();
use XML::LibXML;
use elimpex::nina::config;

sub init {
  ... code deleted ...
}

sub process {
    my $self = shift;

  ... code deleted ...

        $self->{'exists'} = 1; # note that this resource exists for later checks

        #
        # we do processing of the uri here and build up the dom tree
        #
        my $parser = XML::LibXML->new ();
        my $doc = XML::LibXML->createDocument ();

  ... code deleted ...

        $self->{'xml_dom'} = $doc;

        return 1; # we process this URI

  ... code deleted ...
}

sub mtime {

  ... code deleted ...

    return time (); # content is allways fresh.
}

sub key {

  ... code deleted ...

    return $r->uri ();
}

sub exists {

  ... code deleted ...

    return defined ($self->{'exists'});
}

sub get_dom {

  ... code deleted ...

    return $self->{'xml_dom'};
}

sub get_strref {

  ... code deleted ...

    unless (defined ($self->{'xml_text'})) {    
        unless (defined ($self->{'xml_dom'})) {
            throw Apache::AxKit::Exception::Error (
                -text => "cant get DOM representation of document"
            );
        }
        my $xml_text = $self->{'xml_dom'}->toString ();
        $self->{'xml_text'} = \$xml_text;
    }

    return $self->{'xml_text'};
}

1;
Notes:
  .) My content provider logs each method call with <method>:start
  .) AxDebugLevel is 10

[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] fast handler 
called for /test/index.xml
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] Content Provider 
Override: elimpex::Apache::AxKit::TestProvider
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(30): [client 
10.42.0.14] init: start
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(116): [client 
10.42.0.14] key: start
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] checking if we 
process this resource
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(51): [client 
10.42.0.14] process: start
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(54): [client 
10.42.0.14] process: uri (/test/index.xml)
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(56): [client 
10.42.0.14] process: path (/test/index.xml)
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] media: screen, 
preferred style: #default
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(116): [client 
10.42.0.14] key: start
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] Cache: key = 
489f258fa389b13fa6ebbf25da24e3b0
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] getting styles 
and external entities from the XML
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] styles not cached 
- calling $provider->get_styles()
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(116): [client 
10.42.0.14] key: start
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(165): [client 
10.42.0.14] get_strref: start
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] using XS 
get_styles (libxml2)
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] calling 
xs_get_styles_str()
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] xs_get_styles 
returned: , , page
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] Calling 
GetMatchingProcessors with (screen, , , , page)
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] get_styles: 
loading style modules
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] get_styles: 
looking for mapping for style type: 'text/xsl'
[Wed May 25 15:26:51 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(102): [client 
10.42.0.14] mtime: start
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] cache doesn't 
exist
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] some condition 
failed. recreating output
[Wed May 25 15:26:51 2005] [warn] [client 10.42.0.14] [AxKit] styles: 
Apache::AxKit::Language::LibXSLT(/test/styles/test.xsl)
[Wed May 25 15:26:52 2005] [debug] 
/home/elimpex/perl/lib/elimpex/Apache/AxKit/TestProvider.pm(165): [client 
10.42.0.14] get_strref: start
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] Style Provider 
Override: Apache::AxKit::Provider::File
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] encoding to UTF-8
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [uri] File 
Provider looking up uri (/test/styles/test.xsl)
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] decoding from 
UTF-8
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [uri] File 
Provider set filename to /home/elimpex/www/test/styles/test.xsl
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] about to execute: 
Apache::AxKit::Language::LibXSLT::handler
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] getting 
the XML
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] parsing 
stylesheet
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] parsing 
stylesheet /test/styles/test.xsl
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] Provider::get_dom
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] 
Provider::get_dom/parse_fh(GLOB(0x8b352a8), /test/styles/test.xsl)
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] 
performing transformation
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] 
transformation finished, creating XML::LibXML::Document=SCALAR(0x8b35338)
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] 
outputting to $r
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] [LibXSLT] storing 
results in pnotes(dom_tree) (AxKit::Apache=SCALAR(0x8af51c0))
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] 
Apache::AxKit::Language::LibXSLT::handler finished with code 0
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] execution of: 
Apache::AxKit::Language::LibXSLT::handler finished
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] delivering to 
browser
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] Delivering 
xml_string
[Wed May 25 15:26:52 2005] [warn] [client 10.42.0.14] [AxKit] writing xml 
string to browser
Perlrequire             /home/elimpex/config/startup.perl

LogLevel debug

PerlInitHandler Apache::RequestNotes
PerlSetVar MaxPostSize 10240
PerlSetVar Apache::RequestNotes::DEBUG 1


PerlModule AxKit
AxAddStyleMap application/x-xsp Apache::AxKit::Language::XSP
AxAddStyleMap text/xsl Apache::AxKit::Language::LibXSLT


Alias       /test/ /home/elimpex/www/test/
<Directory /home/elimpex/www/test>
        PerlInitHandler elimpex::Apache::Session
        AuthType NINA_SESSION
        AuthName NINA
        Require valid-user
        PerlSetVar NINA_LoginPage "/test/login.xml"


        AddHandler AxKit .xml .xsp
        DirectoryIndex /redirect?url=/xsp/index.xsp

        AxContentProvider elimpex::Apache::AxKit::TestProvider

        AxAddProcessor text/xsl /test/styles/test.xsl

        AxCacheDir /home/elimpex/tmp
        AxNoCache On
        AxDebugLevel 10
        AxTraceIntermediate /home/elimpex/tmp
        AxDebugTidy On
        AxStackTrace On
        AxLogDeclines On

        AxGzipOutput Off

</Directory>

<Directory /home/elimpex/www/test/styles>
        Satisfy any
</Directory>

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

Reply via email to