如何在spring框架中配置java.xml.transform.Transformer?我需要通過xslt將xml轉換爲文本的變換器實例。因此,配置好的變壓器應該知道xslt樣式表是至關重要的。我沒有在Web項目中使用它,而是在獨立的Java程序中使用它。如何在spring中配置java.xml.transform.transformer
回答
您將需要從適當的TransformerFactory
獲得Transformer
的實例。您可以使用內置的xerces變壓器工廠或第三方XSLT處理器,如saxonica。
使用Spring的IoC可以配置的Xerces XML轉換器是這樣的:
<bean id="transformerFactory" class="org.apache.xerces.jaxp.SAXParserFactoryImpl" />
或撒克遜XML轉換器是這樣的:
<bean id="transformerFactory" class="net.sf.saxon.TransformerFactoryImpl" />
一旦你有一個TransformerFactory可以使用依賴注入在bean內部或使用IoC獲取變換器的新實例。切換到是你的類中,你可能有一些財產,說transFact
,你需要設置:
<bean id="myBean" class="myClass">
<property name="transFact" ref="transformerFactory" />
</bean>
然後在你的類:
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;
}
}
另外,您可以使用內的IoC得到一個新的變壓器factory-method
多花點功夫。
那麼,Java的配置變壓器是這樣的:
Source stylesheetSource = new StreamSource(new File("/path/to/my/stylesheet.xslt"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(stylesheetSource);
如果你真的想這樣做純粹是在Spring XML,這是等價的:
<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>
感謝您的回覆。我想知道爲什麼Spring不能提供更多的支持,所以我需要做的就是傳遞我的xslt的名稱,並且它應該在類路徑中找到它並構建配置變換器。 此外,我相信我可能需要在變壓器上設置一些屬性 – Jimm 2009-11-10 12:21:08
忘記到範圍範圍=原型 – alexsmail 2014-02-13 13:16:32
這是舊的,但我必須給人一些建議,可能只是不這樣做。由於bean在Spring中是默認的單例,即使你創建了transformerfactory和轉換器原型,對於另一個開發人員來說,將它注入單例bean並且沒有意識到它們剛剛創建了線程安全問題將非常容易。相反,我會創建一個輔助類來包裝這些實現細節,使其更難以出錯。 – jjathman 2014-06-25 22:52:14
我發現這方式從類路徑提供xsl
文件:
<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>
很醜,但它的工作原理!
- 1. 如何配置AOP在Spring
- 2. 如何在spring boot 1.4.1中配置querydsl?
- 3. 如何在spring dispatcher servlet中配置jackson?
- 4. 如何在Spring Framework 2.0中配置ResourceBundleViewResolver
- 5. 如何在Spring中配置jax-ws Handler?
- 6. 如何在Spring引導中配置HDIV
- 7. 如何在Spring配置文件中配置Hibernate
- 8. 如何配置OpenEntityManagerInViewFilter Spring MVC
- 9. 如何配置Spring Batch的
- 10. 如何配置spring oauth?
- 11. 如何配置Spring Security PasswordComparisonAuthenticator
- 12. 如何配置Spring TestRestTemplate
- 13. 如何在Spring-retry(Spring Boot)中配置延遲時間
- 14. 如何在Spring Boot微服務中配置Spring Cloud Sleuth
- 15. 在Spring 3.1中配置JDO?
- 16. 在Spring中配置Hibernate sessionFactory
- 17. 如何使用xml配置配置sockjs配置Spring 4 WebSocket
- 18. 如何讓Spring Boot根據外部配置配置RabbitMQ配置?
- 19. Spring JTA配置 - 如何設置TransactionManager?
- 20. 如何使用xml配置在Spring MVC上配置Hessian?
- 21. 如何在Java配置類中設置Spring Weaver選項?
- 22. 如何在Spring中保存配置設置?
- 23. 如何在spring java配置中設置日誌記錄屬性?
- 24. 配置Spring Cloud配置
- 25. 如何使用application.properties配置spring boot來設置hibernate的配置
- 26. 如何在基於Java的安全配置的Spring Security中配置兩個formLogin?
- 27. 如何在spring中動態加載java中的配置
- 28. spring bean配置
- 29. Spring templateResolver配置
- 30. Spring配置
你的意思是'javax.xml.transform.Transformer',不是嗎? – 2009-11-10 02:40:16