I have a problem with xalan URIResolver, it just doesn't call resolve at all
when my XML file is inputed by a document() function on the XSLT and has
latin1 characters like ã , ç ... etc.

Why is this happening?


{code}
static class MyResolver implements URIResolver{

                public Source resolve(String href, String base)
                {
                        
                        try {
                                System.out.println("RESOLVING: href: "+href+" 
base: "+base);
                                StreamSource ss = new StreamSource(new 
FileInputStream(new File(href)));
                                return ss;
                        } catch (FileNotFoundException e) {
                                e.printStackTrace();
                                return null;
                        }
                }
                
        }


....


TransformerFactory transFact = TransformerFactory.newInstance();
                        Transformer trans = 
transFact.newTransformer(xsltSource);
                        trans.setURIResolver(new MyResolver());
                        trans.setParameter("lang", lang);
   
                        DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance();
                        DocumentBuilder db = dbf.newDocumentBuilder();
                        Document xslfo = db.newDocument();

                        trans.transform(xmlSource, new DOMResult(xslfo));
{code}

My XSLT calls the document() function this way:
{code}
.....
<xsl:variable name="cp-doc-path">
            <xsl:text>lala/certprofile_</xsl:text>
            <xsl:value-of
select="normalize-space(default_certificate_profile)"></xsl:value-of>
            <xsl:text>-</xsl:text>
            <xsl:value-of
select="default_certificate_profile/@id"></xsl:value-of>
            <xsl:text>.xml</xsl:text>
</xsl:variable>

.....
<xsl:variable name="n2">
                    <xsl:for-each select="document($cp-doc-path)">
                        <xsl:variable name="a0">
                            <xsl:value-of select="$n0 + count(
                                //field |
                                //key_usage |
                                //ku |
                                //policies |
                                //extended_key_usage |
                                //eku
                                )"></xsl:value-of>
                        </xsl:variable>
.....
{code}

As it doesn't perform the URIResolver resolve() call, I get the following
exception:
javax.xml.transform.TransformerException:
com.sun.org.apache.xalan.internal.xsltc.TransletException:
javax.xml.transform.TransformerException:
com.sun.org.apache.xml.internal.utils.URI$MalformedURIException: Path
contains invalid character: ç
        at
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:715)
        at
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)


I'm currently using the latest Xalan version.


-- 
View this message in context: 
http://www.nabble.com/XALAN-URIResolver-not-behaving-correctly--tp15337911p15337911.html
Sent from the Xalan - J - Users mailing list archive at Nabble.com.

Reply via email to