Spring XML配置和命名空间

时间:2011-10-17 17:13:03

标签: java xml spring configuration

我正在尝试配置一个Spring配置(xml)文件,并且我正在尝试为我在项目中本地生成的有效模式文件添加命名空间。原因是我没有“真实”的URL(网络服务器等),所以我试图只使用我将在WEB-INF/下提供的本地模式:

MyProject/
    src/
        java/
        config/
            MySchema.xsd
            spring-config.xml
    build.xml

spring-config.xml内:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:ms="http://myproject.org/MySchema.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
   http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

项目正在建设中部署很好,但当我去运行时,我得到:

org.xml.sax.SAXException: Failed to locate XSD resource '/META-INF/MySchema.xsd' on 
classpath. Namespace: 'http://myproject.org/MySchema.xsd'.

最终,我希望spring-config.xmlMySchema.xsd都存储在WEB-INF/下,所以我不确定为什么Spring正在查看META-INF/ ...任何想法?

网址http://myproject.org/MySchema.xsd不是真正的网址,只是为模式提供了自己的名称空间。提前谢谢!

3 个答案:

答案 0 :(得分:2)

xsi:schemaLocation属性中没有http://myproject.org/MySchema.xsd的“定义”(我不知道正确的术语)。尝试这样的事情:

xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://myproject.org/MySchema.xsd location/of/MySchema.xsd">

答案 1 :(得分:0)

您需要定义spring.schemasspring.handlers吗? 点击此处:http://www.theserverside.com/news/1364131/Authoring-Custom-Namespaces-in-Spring-20

答案 2 :(得分:0)

您还需要为http://myproject.org/MySchema.xsd schema location定义namespace。从W3C,架构位置:

  

由一对或多对URI引用组成,由空格分隔。每对中的第一个成员是名称空间名称,该对的第二个成员是一个提示,描述在何处为该名称空间查找适当的模式文档。这些提示的存在不要求处理器获取或使用引用的模式文档,并且处理器可以自由地使用通过任何合适方式获得的其他模式,或者根本不使用模式。

我会使用不同的命名空间名称,以免与命名空间架构文档提示混淆。也许使用诸如http://myproject.org/my-schema config/MySchema.xsd之类的架构位置。