使用Spring bean调用xsl时,在类路径上引用xsds

时间:2014-10-29 10:34:42

标签: java spring xsd xslt-1.0

所以我目前正在开发一个项目,该项目使用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'之类的东西不起作用。我会认为这种行为相当普遍,是否有一个公认的解决方法?创建一个自定义类,在类路径中查找模式并将其路径作为字符串返回?

1 个答案:

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

当你想到它时非常容易......