我正在尝试配置一个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.xml
和MySchema.xsd
都存储在WEB-INF/
下,所以我不确定为什么Spring正在查看META-INF/
...任何想法?
网址http://myproject.org/MySchema.xsd
不是真正的网址,只是为模式提供了自己的名称空间。提前谢谢!
答案 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.schemas
和spring.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
之类的架构位置。