前些日子看了一篇关于在Spring 2中整合DWR 2的文章《AJAX,
DWR and Spring》。最近,想动手试一下,就下载其源代码回来看看,依葫芦画瓢做了一遍。在运行时,得到XML验证错误。经过一翻折腾,终于把问题解决。
Spring 2基于XML Schema的配置
众所周知,Spring 2通过XML Schema配置方式极大地简化的其配置,而且使得第三方扩展变为可能。配置如下代码所示:
<?
xml version="1.0"
encoding="UTF-8"
?>
<
beans
xmlns
="http://www.springframework.org/schema/beans"
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-2.0.xsd"
>
<!--
<bean /> definitions here
-->
</
beans
>
清单1 applicationContext.xml
不知大家有没有想过spring-beans-2.0.xsd位置在那里?其实,大家可以用Eclipse打开Spring的jar包,展开META-INF,并双击打开其中的spring.schemas文件,内容如下:
http\://www.springframework.org/schema/beans/spring-beans-
2.0
.xsd
=
org/springframework/beans/factory/xml/spring-beans-
2.0
.xsd
http\://www.springframework.org/schema/tool/spring-tool-
2.0
.xsd
=
org/springframework/beans/factory/xml/spring-tool-
2.0
.xsd
http\://www.springframework.org/schema/util/spring-util-
2.0
.xsd
=
org/springframework/beans/factory/xml/spring-util-
2.0
.xsd
http\://www.springframework.org/schema/aop/spring-aop-
2.0
.xsd
=
org/springframework/aop/config/spring-aop-
2.0
.xsd
http\://www.springframework.org/schema/lang/spring-lang-
2.0
.xsd
=
org/springframework/scripting/config/spring-lang-
2.0
.xsd
http\://www.springframework.org/schema/tx/spring-tx-
2.0
.xsd
=
org/springframework/transaction/config/spring-tx-
2.0
.xsd
http\://www.springframework.org/schema/jee/spring-jee-
2.0
.xsd
=
org/springframework/ejb/config/spring-jee-
2.0
.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd
=
org/springframework/beans/factory/xml/spring-beans-
2.0
.xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd
=
org/springframework/beans/factory/xml/spring-tool-
2.0
.xsd
http\://www.springframework.org/schema/util/spring-util.xsd
=
org/springframework/beans/factory/xml/spring-util-
2.0
.xsd
http\://www.springframework.org/schema/aop/spring-aop.xsd
=
org/springframework/aop/config/spring-aop-
2.0
.xsd
http\://www.springframework.org/schema/lang/spring-lang.xsd
=
org/springframework/scripting/config/spring-lang-
2.0
.xsd
http\://www.springframework.org/schema/tx/spring-tx.xsd
=
org/springframework/transaction/config/spring-tx-
2.0
.xsd
http\://www.springframework.org/schema/jee/spring-jee.xsd
=
org/springframework/ejb/config/spring-jee-
2.0
.xsd
清单2 spring.schemas
从以上的文件中,可以看出XML Sechema文件在类包中位置。
DWR 2.0 RC 2中的XML Schema文件
根据上面的描述,我打开DWR的jar包中spring.schemas文件,内容如下:
http\://www.directwebremoting.org/schema/spring-dwr-
2.0
.xsd
=
org/directwebremoting/spring/spring-dwr-
2.0
.xsd
然后,按照上面的路径打开spring-dwr-2.0.xsd文件,内容如下:
<?
xml version="1.0"
encoding="UTF-8" standalone="no"
?>
<!--
省略了版权信息
-->
<
xsd:schema
xmlns
="http://www.directwebremoting.org/schema/spring-dwr"
xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
targetNamespace
="http://www.directwebremoting.org/schema/spring-dwr"
elementFormDefault
="qualified"
attributeFormDefault
="unqualified"
>
<!--
省略了具体的定义
-->
</
xsd:schema
>
清单3 spring-dwr-2.0.xsd
文件spring-dwr-2.0.xsd告诉我们,其名称空间应为“http://www.directwebremoting.org/schema/spring-dwr”,所以我们在配置Spring
2时,应使用以上的名称空间,如下面的代码片段所示:
<?
xml version="1.0"
encoding="UTF-8"
?>
<
beans