Java 弹簧不';t解析xml文件声明中的类路径

Java 弹簧不';t解析xml文件声明中的类路径,java,xml,spring,classpath,saml-2.0,Java,Xml,Spring,Classpath,Saml 2.0,我对resolve spring的“classpath:”功能有问题。我的文件位于下一个路径中: src/main/java/resources/FederationMetadata.xml 还有,我有一个豆子: <bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager"> <constructor-arg> <l

我对resolve spring的“classpath:”功能有问题。我的文件位于下一个路径中:

src/main/java/resources/FederationMetadata.xml
还有,我有一个豆子:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:FederationMetadata.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
                    </bean>
                </constructor-arg>
            </bean>
        </list>
    </constructor-arg>
</bean>
据我所知,Spring不解析文件位置。我尝试使用classpath*:,但没有任何帮助。在另一个项目中,我有相同的设置(带有“classpath:”),并且工作正常。可能是什么?

试试看

<value type="java.io.File">file:///FederationMetadata.xml</value>
file:///FederationMetadata.xml
而不是

<value type="java.io.File">classpath:FederationMetadata.xml</value>
classpath:FederationMetadata.xml

如果希望从类路径访问它,则需要将其放在 WEB-INF/classes文件夹。 如果文件在文件夹中,则路径是相对于“类”文件夹的

WEB-INF/classes/configs/somefile.xml
然后


这个问题也让我发疯

在某种程度上,我意识到
FilesystemMetadataProvider
ResourceBackedMetadataProvider
所取代

因此,如果您的元数据XML位于类路径中,请执行以下操作:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
                <constructor-arg>
                    <bean class="java.util.Timer"/>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.opensaml.util.resource.ClasspathResource">
                        <constructor-arg value="/FederationMetadata.xml"/>
                    </bean>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
        </list>
    </constructor-arg>
</bean>

您是从IDE(例如Eclipse)启动应用程序,还是先用Maven编译然后部署?你能发布你的战争档案的完整内容吗?
classpath:configs/somefile.xml
<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider">
                <constructor-arg>
                    <bean class="java.util.Timer"/>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.opensaml.util.resource.ClasspathResource">
                        <constructor-arg value="/FederationMetadata.xml"/>
                    </bean>
                </constructor-arg>
                <property name="parserPool" ref="parserPool"/>
            </bean>
        </list>
    </constructor-arg>
</bean>