所以我目前正在开发一个项目,该项目使用Spring在调用xsl时为xsd注入模式位置,如:
<bean id="transformer" class="com.mypackage.Transformer">
<property name="xsl" value="sample.xsl" />
<property name="params">
<map>
<entry key="schemaLocation" value-ref="schema" />
</map>
</property>
</bean>
<bean id="schema" class="java.lang.String">
<constructor-arg value="http://www.sample.com/schema/sampleSchema.xsd" />
</bean>
当您使用url作为架构位置时,这可以正常工作,但是例如,您要引用作为maven依赖项引入类路径的架构。我发现使用'classpath:sampleSchema.xsd'之类的东西不起作用。我会认为这种行为相当普遍,是否有一个公认的解决方法?创建一个自定义类,在类路径中查找模式并将其路径作为字符串返回?
答案 0 :(得分:0)
好的,所以我想我会分享如何解决这个问题。
两个春豆:
<bean id="schema" factory-method="getSchemaLocation" factory-bean="schemaFinder" />
<bean id="schemaFinder" class="com.mypackage.SchemaFinder">
<constructor-arg value="NAME_OF_SCHEMA" />
</bean>
一堂课:
public class SchemaFinder
{
private String schemaLocation;
public SchemaFinder(String schemaName) throws Exception
{
try
{
URL absoluteSchemaUrl = getClass().getClassLoader().getResource(schemaName);
setSchemaLocation(absoluteSchemaUrl.toString());
}
catch (Exception e)
{
//whatever you want here
}
}
public void setSchemaLocation(String schemaLocation)
{
this.schemaLocation = schemaLocation;
}
public String getSchemaLocation()
{
return this.schemaLocation;
}
}
当你想到它时非常容易......