Java 使用Springbeans调用xsl时在类路径上引用XSD

Java 使用Springbeans调用xsl时在类路径上引用XSD,java,spring,xsd,xslt-1.0,Java,Spring,Xsd,Xslt 1.0,因此,我目前正在从事一个项目,该项目在调用xsl时使用Spring为xsd注入模式位置,类似于: <bean id="transformer" class="com.mypackage.Transformer"> <property name="xsl" value="sample.xsl" /> <property name="params"> <map>

因此,我目前正在从事一个项目,该项目在调用xsl时使用Spring为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”的东西是行不通的。我认为这种行为相当普遍,有没有公认的解决办法?创建一个自定义类,该类在类路径上查找模式,并以字符串形式返回其路径?

好的,所以我想分享一下我是如何解决这个问题的

两颗春豆:

<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;
}
}