Hi all,
I wrote a small java function to handle Base64 images for Word ML I want to use this function as an extension to XSLT. And I'm running the transformation in jsp running on Apache tomcat 4.0.
It seems that Xpath couldn't find the class although my classpath is correctly set to :java.class.path=D:\Projects\SingleSourcing\Java\;
Thanks in advance.
Here is the xml:
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
<w:body>
<wx:sect>
<w:pict>
<w:binData w:name="wordml://06000003.emz">H4sIAAAAAAACC+2WOw7CMAyGXcFEJcTAwEQ7 cgwW2JDgD ogzMPZYjBkZOAw3CE7TBOOSqg9nKOJX
naZx+tlK0qQJAJzhrXVlTveJtXx32AMkcEsB8BFrTFMoHVt0PJ nrhLZNwzF4+xFtg3Y18WfWl8MD
Mrxnlc/1TWBl88R+l7k1Jx1RRTTFYatSWitpEbaWxv/Z42DXvzUhtgezCIPZIbAQO7T/DGNbqusu
OCaU6sEU35FNN3VKpWBfdmEbQlGYi8wfm8sQuAWbYXwoBu7L/nLkMZXReudtzo6mcpR5K7c8u7DV
5xpsUP3FFuwh+gG2LFjxvGUVk00kPiZeWptf2mW1XhdV/QUeOHIDuAsAAA==
</w:binData>
<v:shape id="_x0000_i1028" type="#_x0000_t75" style="width:23.25pt;height:23.25pt;mso-position-horizontal:left;mso-position-h orizontal-relative:margin" o:bordertopcolor="black" o:borderleftcolor="black" o:borderbottomcolor="black" o:borderrightcolor="black" o:allowoverlap="f">
<v:imagedata src="wordml://06000003.emz" o:title=""/>
<w10:bordertop type="single" width="6"/>
<w10:borderleft type="single" width="6"/>
<w10:borderbottom type="single" width="6"/>
<w10:borderright type="single" width="6"/>
</v:shape>
</w:pict>
</wx:sect>
</w:body>
</w:wordDocument>
-----------------------------------------------------------------
Here is the XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:java="Graphics"
exclude-result-prefixes="aml java msxsl o v w w10 wx">
<xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="path"/>
<xsl:param name="id"/>
<xsl:template match="w:wordDocument">
<html>
<head/>
<style>
v\:* { behavior: url(#default#VML); }
</style>
<xsl:apply-templates select="*"/>
<body/>
</html>
</xsl:template>
<xsl:template match="w:pict[v:shape]">
<xsl:variable name="id"><xsl:value-of select="./v:shape/@id"/></xsl:variable>
<xsl:variable name="type"><xsl:value-of select="./v:shape/@type"/></xsl:variable>
<xsl:variable name="style"><xsl:value-of select="./v:shape/@style"/></xsl:variable>
<v:shape id="{$id}" type="{$type}" style="{$style}">
<v:imagedata src="{java:decodePicture(w:binData, concat($path ,$id+'_images'), substring-after(w:binData/@w:name, 'wordml://'))}" o:title=""/>
</v:shape>
</xsl:template>
</xsl:stylesheet>
----------------------------
Here is my JSP:
<%@ page language="java" contentType="text/html" %>
<%@ page import="javax.xml.transform.*"%>
<%@ page import="javax.xml.transform.stream.*"%>
<html>
<head>
<title>wordML transformation to HTML</title>
</head>
<body>
<%! String FS = System.getProperty("file.separator"); %>
<%
/**
* This JSP uses the
* stylesheet to transform an xml
* and outputing the result.
*
* Invoke the jsp from the appropriate
* context for your servlet/jsp server.
* For example:
http://localhost:8080/samples/*.jsp?...=foo.xsl&ID=id
* This example assumes that *.xsl and *.xml
* are in the same directory.
* Output should be an HTML file of the passed XML
*/
String xmlFile = request.getParameter("XML");
String xslFile = request.getParameter("XSL");
String ext = request.getParameter("ID");
String imgPath=ext+"_images";
// get the real path for xml and xsl files;
String ctx = getServletContext().getRealPath("docSource") + FS;
System.out.println(ctx);
xslFile = ctx + xslFile;
xmlFile = ctx + xmlFile;
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer =tFactory.newTransformer(new StreamSource(xslFile));
transformer.setParameter("path", ctx+imgPath);
transformer.transform(new StreamSource(xmlFile), new StreamResult(out));
%>
</body>
</html>
--------------------------------------
my Call and the error code:
http://nceeelkhalifa:8090/docSource/....xml&XSL=Graph ics.xsl&ID=1
==> javax.servlet.ServletException: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xpath.axes.ChildTestIterator.decodePict ure([ExpressionContext,] #STRING, #STRING).
at org.apache.jasper.runtime.PageContextImpl.handlePa geException(PageContextImpl.j ava:471)
at org.apache.jsp.wordML2HTML$jsp._jspService(wordML2 HTML$jsp.java:112)
at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWra pper.service(JspServlet.java: 201)
at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFil terChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain .java:193)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java: 243)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java: 190)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invok e(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.jav a:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:17 4)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.p rocess(HttpProcessor.java:102 7)
at org.apache.catalina.connector.http.HttpProcessor.r un(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
root cause
; SystemID: file:///D:/Program Files/Apache Tomcat 4.0/webapps/ROOT/docSource/Graphics.xsl; Line#: 26; Column#: 146
javax.xml.transform.TransformerException: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xpath.axes.ChildTestIterator.decodePict ure([ExpressionContext,] #STRING, #STRING).
at org.apache.xalan.extensions.ExtensionHandlerJavaPa ckage.callFunction(ExtensionH andlerJavaPackage.java:395)
at org.apache.xalan.extensions.ExtensionsTable.extFun ction(ExtensionsTable.java:25 7)
at org.apache.xpath.functions.FuncExtFunction.execute (FuncExtFunction.java:181)
at org.apache.xpath.XPath.execute(XPath.java:318)
at org.apache.xalan.templates.AVTPartXPath.evaluate(A VTPartXPath.java:173)
at org.apache.xalan.templates.AVT.evaluate(AVT.java:5 25)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:661 )
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:678 )
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:678 )
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.transformer.TransformerImpl.apply TemplateToNode(TransformerImp l.java:2008)
at org.apache.xalan.transformer.TransformerImpl.trans formNode(TransformerImpl.java :1171)
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:638 )
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:108 8)
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:106 6)
at org.apache.jsp.wordML2HTML$jsp._jspService(wordML2 HTML$jsp.java:102)
at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWra pper.service(JspServlet.java: 201)
at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFil terChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain .java:193)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java: 243)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java: 190)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invok e(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.jav a:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:17 4)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.p rocess(HttpProcessor.java:102 7)
at org.apache.catalina.connector.http.HttpProcessor.r un(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
Caused by: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xpath.axes.ChildTestIterator.decodePict ure([ExpressionContext,] #STRING, #STRING).
at org.apache.xalan.extensions.MethodResolver.getMeth od(MethodResolver.java:314)
at org.apache.xalan.extensions.ExtensionHandlerJavaPa ckage.callFunction(ExtensionH andlerJavaPackage.java:374)
... 61 more
---------
java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xpath.axes.ChildTestIterator.decodePict ure([ExpressionContext,] #STRING, #STRING).
at org.apache.xalan.extensions.MethodResolver.getMeth od(MethodResolver.java:314)
at org.apache.xalan.extensions.ExtensionHandlerJavaPa ckage.callFunction(ExtensionH andlerJavaPackage.java:374)
at org.apache.xalan.extensions.ExtensionsTable.extFun ction(ExtensionsTable.java:25 7)
at org.apache.xpath.functions.FuncExtFunction.execute (FuncExtFunction.java:181)
at org.apache.xpath.XPath.execute(XPath.java:318)
at org.apache.xalan.templates.AVTPartXPath.evaluate(A VTPartXPath.java:173)
at org.apache.xalan.templates.AVT.evaluate(AVT.java:5 25)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:661 )
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:678 )
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.templates.ElemLiteralResult.execu te(ElemLiteralResult.java:678 )
at org.apache.xalan.templates.ElemApplyTemplates.tran sformSelectedNodes(ElemApplyT emplates.java:423)
at org.apache.xalan.templates.ElemApplyTemplates.exec ute(ElemApplyTemplates.java:2 26)
at org.apache.xalan.transformer.TransformerImpl.execu teChildTemplates(TransformerI mpl.java:2182)
at org.apache.xalan.transformer.TransformerImpl.apply TemplateToNode(TransformerImp l.java:2008)
at org.apache.xalan.transformer.TransformerImpl.trans formNode(TransformerImpl.java :1171)
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:638 )
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:108 8)
at org.apache.xalan.transformer.TransformerImpl.trans form(TransformerImpl.java:106 6)
at org.apache.jsp.wordML2HTML$jsp._jspService(wordML2 HTML$jsp.java:102)
at org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWra pper.service(JspServlet.java: 201)
at org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
at org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(ApplicationFil terChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterChain .java:193)
at org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.java: 243)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.java: 190)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invok e(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(St andardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.in voke(ErrorDispatcherValve.jav a:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:17 4)
at org.apache.catalina.core.StandardPipeline.invokeNe xt(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.p rocess(HttpProcessor.java:102 7)
at org.apache.catalina.connector.http.HttpProcessor.r un(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
...
Mostafa