Il est possible de rencontrer parfois l’erreur suivante lors d’une transformation XSL :

java.lang.IllegalStateException: can't declare any more prefixes in this context
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:524)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:305)
        at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:442)
        at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185)

Ou bien :

javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerException:
java.lang.IllegalStateException: can't declare any more prefixes in this context
        at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:718)
        at com.mycompany.myproject.Translator.myfunct(MyClass.java:352)
Caused by: javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerException:
java.lang.IllegalStateException: can't declare any more prefixes in this context
        at org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:842)
        at org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:701)
        ... 4 more
Caused by: javax.xml.transform.TransformerException:
java.lang.IllegalStateException: can't declare any more prefixes in this context
        at org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:838)
        ... 5 more
Caused by: java.lang.IllegalStateException: can't declare any more prefixes in this context
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:523)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:304)
        at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:433)
        at org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:830)
        ... 5 more

C’est une erreur bien connue qui peut être résolue de deux façons.

Ce problème est présent avec (liste non-exhaustive) :

  • JDK 1.4.2_03
  • JDK 1.5b2

Il faut changer de version de Java et utiliser (liste non-exhaustive) :

  • JDK 1.4.2_02
  • JDK 1.5a1

S’il n’est pas possible de changer de version de Java, il faut savoir que les versions incriminées imposent que l’attribut version du tag xml dans les scripts XSL soit positionné après l’attribut xmlns:xsl. Donc si votre le script XSL est déclaré ainsi d’habitude :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Doit être déclaré maintenant de cette façon :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">