Comment puis-je configurer java.xml.transform.Transformer dans le cadre du printemps? J'ai besoin d'une instance de transformateur pour transformer xml en texte via xslt. Il est donc essentiel que le transformateur configuré ait une connaissance de la feuille de style xslt. Je n'utilise pas cela dans un projet web, je l'utilise plutôt dans un programme Java autonome.comment configurer java.xml.transform.transformer au printemps
Répondre
Vous aurez besoin d'obtenir une instance d'un Transformer
à partir d'un TransformerFactory
approprié. Vous pouvez utiliser la fabrique de transformateurs xerces intégrée ou un processeur XSLT tiers, par exemple saxonica.
L'utilisation IoC de printemps, vous pouvez configurer un transformateur XML Xerces comme ceci:
<bean id="transformerFactory" class="org.apache.xerces.jaxp.SAXParserFactoryImpl" />
ou un transformateur XML Saxonne comme ceci:
<bean id="transformerFactory" class="net.sf.saxon.TransformerFactoryImpl" />
Une fois que vous avez un TransformerFactory vous pouvez utiliser l'injection de dépendance à obtenir une nouvelle instance d'un transformateur soit à l'intérieur de votre bean ou en utilisant l'IoC. Le passage à être à l'intérieur de votre classe, vous pourriez avoir une propriété, par exemple transFact
que vous devez définir:
<bean id="myBean" class="myClass">
<property name="transFact" ref="transformerFactory" />
</bean>
Puis dans votre classe:
public class myClass {
// ...
private javax.xml.transformer.TransformerFactory transFact;
public void myMethod(){
StreamSource transformerStream = new StreamSource(getResourceAsStream(pathToXslt));
javax.xml.transformer.Transformer myTrans = transFact.newTransformer(transformerStream);
// now you've got a myTrans
}
// ...
public setTransFact(javax.xml.transformer.TransformerFactory transFact){
this.transFact = transFact;
}
}
Sinon, vous pouvez obtenir un nouveau transformateur au sein IoC utilisant le factory-method
avec un peu plus d'effort.
Eh bien, Java pour configurer un transformateur est comme ceci:
Source stylesheetSource = new StreamSource(new File("/path/to/my/stylesheet.xslt"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(stylesheetSource);
Si vous voulez vraiment faire uniquement en XML Spring, c'est l'équivalent:
<bean id="stylesheetSource" class="javax.xml.transform.stream.StreamSource">
<property name="systemId" value="/path/to/my/stylesheet.xslt"/>
</bean>
<bean id="transformerFactory" class="javax.xml.transform.TransformerFactory" factory-method="newInstance"/>
<bean id="transformer" factory-bean="transformerFactory" factory-method="newTransformer">
<constructor-arg ref="stylesheetSource"/>
</bean>
Merci pour votre réponse. Je me demandais pourquoi le printemps ne pouvait pas fournir un peu plus de soutien de sorte que tout ce que je dois faire est de passer le nom de mon xslt et il devrait le localiser sur le classpath et construire configurer le transformateur. Aussi, je crois que je pourrais avoir besoin de définir certaines propriétés sur le transformateur – Jimm
Oublié to meanion scope = prototype – alexsmail
Ceci est vieux, mais je dois donner aux gens des conseils pour probablement ne pas faire cela. Puisque les beans sont des singletons par défaut dans Spring, même si vous fabriquez des transformateurs et des prototypes de transformateurs, il sera très facile pour un autre développeur de les injecter dans un bean singleton et de ne pas réaliser qu'ils ont juste créé un problème de sécurité. Au lieu de cela, je voudrais créer une classe d'aide qui résume ces détails d'implémentation pour rendre beaucoup plus difficile de se tromper. – jjathman
J'ai trouvé façon de fournir le fichier xsl
du classpath:
<bean id="errorLogTransformer" factory-bean="transformerFactory" factory-method="newTransformer" >
<constructor-arg>
<bean class="org.springframework.xml.transform.ResourceSource">
<constructor-arg>
<value>classpath:errorLog.xsl</value>
</constructor-arg>
</bean>
</constructor-arg>
</bean>
assez laid, mais ça fonctionne !
- 1. comment puis-je configurer autowire au printemps
- 2. Configurer JDBC et Hibernate ensemble au printemps
- 3. comment configurer jms template au printemps pour weblogic?
- 4. Comment configurer SSL sur une base de données au printemps?
- 5. comment configurer l'expiration de la session au printemps acegi cadre?
- 6. comment configurer plusieurs DispatcherServlet au printemps 3 mvc?
- 7. Personnalisé json au printemps
- 8. Comment utiliser plusieurs ViewResolvers au printemps?
- 9. Authentification personnalisée au printemps
- 10. Printemps-JSON utilisé au printemps MVC
- 11. Créer ObjectPool au printemps
- 12. Aspectj au printemps
- 13. Obtenir FileNotFoundException au printemps
- 14. Threads au printemps
- 15. ProxyFactoryBean au printemps
- 16. Formes dynamiques au printemps
- 17. LazyInitializationException au printemps
- 18. valeurs d'inscription au printemps
- 19. Client XSD au printemps
- 20. NoClassDefFoundError au printemps
- 21. Comment fonctionne l'injection de dépendances au printemps?
- 22. Comment montrer tiles2.tilesview au printemps mvc3
- 23. Comment injecter la propriété driverClassLoader au printemps?
- 24. Comment imbriquer des vues au printemps
- 25. Stockage de fichiers au printemps
- 26. JMS multithread recevoir au printemps
- 27. Accès au code d'utilisateur au printemps
- 28. problème Classpath: configLocation au printemps
- 29. Liaison dynamique automatique au printemps
- 30. Une usine RMIPRoxyFactoryBean au printemps?
Vous voulez dire 'javax.xml.transform.Transformer', n'est-ce pas? –