The Quercus documentation explains how to extend PHP with new functions
by subclassing AbstractQuercusModule and registering the derived class
as an extension provider by adding its name to the service information
file "classes/META-INF/services/com.caucho.quercus.QuercusModule".

I was wondering if it was also possible to extend PHP with new classes
that could be manipulated just as in PHP?

What I had in mind was to map a subset of the functionality provided
by the DOM and Xsl extensions for PHP, which are based on LibXML2 and
LibXSLT, to Quercus. Code like the following could then run in Quercus:

   $doc = new DOMDocument();
   $xsl = new XSLTProcessor();

   $doc->load($xsl_filename);
   $xsl->importStyleSheet($doc);

   $doc->load($xml_filename);
   echo $xsl->transformToXML($doc);

What would I have to do in order to get there?

(Meanwhile I've seen that an upcoming release of Quercus will include
the DOM module. That still leaves the XSL module to do, which would
allow PHP code to tap into XSLT 2.0 by plugging Saxon into the JAXP
interface. Pretty cool.)

I tried to post this question to the quercus-interest list, but that
wasn't working. Instead, I got an answer off-list by one of the Caucho
engineers, which I'd like to share for everyone to benefit.

The solution is easy, but as far as I can see, it has not been
documented so far. In order to register a new class with Quercus,
simply add the fully qualified class name to the service information
file "classes/META-INF/services/com.caucho.quercus.QuercusClass".

So this is what you have to do:

15:57:19,07 C:\MILU\Server\Tomcat60\webapps\quercus\WEB-INF\classes
# type META-INF\services\com.caucho.quercus.QuercusClass
milu.DOMDocument


15:58:03,89 C:\MILU\Server\Tomcat60\webapps\quercus\WEB-INF\classes
# type milu\DOMDocument.java
package milu;

import com.caucho.quercus.module.AbstractQuercusModule;

public class DOMDocument extends AbstractQuercusModule {
     public String saveXML() {
         return "<Urmel/>";
     }
}

And then in PHP:

$dom = new DOMDocument();
# load some content, do some work
echo $dom->saveXML();

Michael Ludwig


_______________________________________________
resin-interest mailing list
resin-interest@caucho.com
http://maillist.caucho.com/mailman/listinfo/resin-interest

Reply via email to