2015-04-04 1 views
1

J'utilise les API JAXP XSLT (javax.xml.transform) pour transformer un fichier XML.Quelle est la TransformerFactory par défaut?

TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
Transformer transformer = transformerFactory.newTransformer(xslSource); 
transformer.transform(inputSource, outputResult); 

Le javadoc pour TransformerFactory dit: Il utilise la procédure de recherche suivant l'ordre de déterminer la classe de mise en œuvre de TransformerFactory à la charge:

  1. Utilisez la propriété du système javax.xml.transform.TransformerFactory.
  2. Utilisez le fichier de propriétés "lib/jaxp.properties" dans le répertoire JRE. Ce fichier de configuration est au format java.util.Properties standard et contient le nom complet de la classe d'implémentation avec la clé étant la propriété système définie ci-dessus. Le fichier jaxp.properties est lu une seule fois par l'implémentation JAXP et ses valeurs sont ensuite mises en cache pour une utilisation ultérieure. Si le fichier n'existe pas lors de la première tentative de lecture de , aucune autre tentative n'est effectuée pour pour vérifier son existence. Il n'est pas possible de modifier la valeur de toute propriété dans jaxp.properties après qu'elle a été lue pour la première fois pour .
  3. Utilisez l'API Services (telle que détaillée dans la spécification JAR ), si elle est disponible, pour déterminer le nom de la classe. L'API Services recherchera un nom de classe dans le fichier META-INF/services/javax.xml.transform.TransformerFactory dans les fichiers jarres disponibles pour l'exécution.
  4. Instance TransformerFactory par défaut de la plate-forme.

Je me demande comment décider quelle est l'instance par défaut de TransformerFactory?

Répondre

2

"Plate-forme" est Java-parler pour le compilateur Java/runtime que vous utilisez. Donc, la "plate-forme par défaut" signifie tout ce que le JDK décide. Dans le cas d'Oracle JDK, il s'agit d'une version du moteur Xalan XSLT 1.0 intégrée au JDK. Un JDK différent pourrait utiliser une valeur par défaut différente.

+0

Merci. Comment vérifier quelle version de XSLT (1.0, 2.0, 3.0) est prise en charge par le processeur xslt par défaut inclus avec Oracle JDK, par exemple Oracle JDK 1.6? – user3014901

+0

Le processeur XSLT par défaut dans toutes les versions actuelles du JDK Oracle ne prend en charge que XSLT 1.0. Mais si vous voulez vérifier cela, vous pouvez écrire un test comme 'test =" system-property ('xsl: version') = 1.0 "' –

1

De Oracle 1.7 JDK

Classe javax.xml.transform.TransformerFactory:

Transformateur par défaut est XSLTC (à l'origine en forme de fourche de Xalan). XSLTC est la version de compilation (le 'C' dans XSLTC) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

public static TransformerFactory newInstance() 
    throws TransformerFactoryConfigurationError { 
    try { 
     return (TransformerFactory) FactoryFinder.find(
     /* The default property name according to the JAXP spec */ 
     "javax.xml.transform.TransformerFactory", 
     /* The fallback implementation class name, XSLTC */ 
     "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"); 
    } catch (FactoryFinder.ConfigurationError e) { 
     throw new TransformerFactoryConfigurationError(
      e.getException(), 
      e.getMessage()); 
    } 
}