Hi Mike, The getDefaultMethodProperties(String method) method of the org.apache.xml.serializer.OutputPropertiesFactory class is static, so you can't call it on the instance that you've created. You can call it like this:
<xsl:variable name="formatprops" select="java:org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties('xml')"/> As for the SerializerFactory, its constructor is private, so it can't be instantiated directly. You have to use the static getSerializer(Properties format) method to obtain an instance. Hope this helps. Kevin Cormier Software Developer, XSLT Development IBM Toronto Lab, D1-435 Phone: 905-413-5771 E-mail: [EMAIL PROTECTED] Mike Brown <[EMAIL PROTECTED]> To 02/22/2007 12:41 xalan-j-users@xml.apache.org PM cc Subject Node-set to XML string via Java extensions in Xalan-J: possible? I'm trying to serialize nodes to an XML string, using Java extensions. I'm trying to avoid writing my own. I thought perhaps I could use the DOMSerializer in Xalan-J. However, I'm having trouble calling certain methods. They're documented as existing, but Xalan-J is not finding them. For example, I can instantiate an OutputPropertiesFactory, but I can't call its getDefaultMethodProperties() method. And I can't instantiate a SerializerFactory at all. Here is my XML: <?xml version="1.0" encoding="utf-8"?> <greetings> <greeting xml:lang="en">hello!</greeting> <greeting xml:lang="es">¡hola!</greeting> <greeting xml:lang="fr">bonjour!</greeting> <greeting xml:lang="ru">Здравствуйте!</greeting> <greeting xml:lang="ja">今日は</greeting> </greetings> Here is my XSLT (the failure is when I try to create $formatprops): <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="http://xml.apache.org/xalan/java"> <xsl:output method="text" indent="no"/> <xsl:template match="/"> <xsl:variable name="nodeset" select="/greetings"/> <!--OutputPropertiesFactory opropsfactory = new OutputPropertiesFactory();--> <xsl:variable name="opropsfactory" select="java:org.apache.xml.serializer.OutputPropertiesFactory.new()"/> <!--String method = org.apache.xml.serializer.Method.XML; Properties formatprops = opropsfactory.getDefaultMethodProperties(method);--> <xsl:variable name="formatprops" select="java:getDefaultMethodProperties($opropsfactory, 'xml')"/> <!--SerializerFactory serializerfactory = new SerializerFactory();--> <xsl:variable name="serializerfactory" select="java:org.apache.xml.serializer.SerializerFactory.new()"/> <!--Serializer serializer = serializerfactory.getSerializer(formatprops);--> <xsl:variable name="serializer" select="java:getSerializer($serializerfactory, $formatprops)"/> <!--StringWriter buffer = new StringWriter();--> <xsl:variable name="buffer" select="java:java.io.StringWriter.new()"/> <!--serializer.setWriter(buffer);--> <xsl:variable name="void1" select="java:setWriter($serializer, $buffer)"/> <!--DOMSerializer domserializer = serializer.asDOMSerializer();--> <xsl:variable name="domserializer" select="java:asDOMSerializer($serializer)"/> <!--domserializer.serialize(node);--> <xsl:variable name="void2" select="java:serialize($domserializer, $nodeset)"/> <!--System.out.write(buffer.toString());--> <xsl:value-of select="java:toString($buffer)"/> </xsl:template> </xsl:stylesheet> Here is how I am invoking Xalan-J, and the error message: C:\dev\test>java -Djava.endorsed.dirs=C:\dev\xalan-j_2_7_0 -cp C:\dev\xalan-j_2_7_0\xalan.jar;C:\dev\xalan-j_2_7_0\serializer.jar org.apache.xalan.xslt.Process -IN greetings.xml -XSL xalanserialize.xsl -EDUMP ; SystemID: file:///C:/dev/test/xalanserialize.xsl; Line#: 14; Column#: 103 javax.xml.transform.TransformerException: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties([ExpressionContext,] #STRING). at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:420) at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:438) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:220) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:206) at org.apache.xpath.XPath.execute(XPath.java:335) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:278) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:246) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262) at org.apache.xalan.xslt.Process.main(Process.java:1046) --------- java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties([ExpressionContext,] #STRING). at org.apache.xalan.extensions.MethodResolver.getMethod(MethodResolver.java:274) at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:381) at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:438) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:220) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:206) at org.apache.xpath.XPath.execute(XPath.java:335) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:278) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:246) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2411) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2281) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1367) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:709) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1284) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1262) at org.apache.xalan.xslt.Process.main(Process.java:1046) Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.serializer.OutputPropertiesFactory.getDefaultMethodProperties([ExpressionContext,] #STRING). at org.apache.xalan.xslt.Process.doExit(Process.java:1153) at org.apache.xalan.xslt.Process.main(Process.java:1126) If I try to create the SerializerFactory first, I get a similar error about its constructor not being found. Am I doing something wrong? Thanks, Mike