我需要根据XSD 1.1模式验证XML文件。我的问题是:Xerces库现在支持XSD 1.1吗?
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
</dependency>
当我包含这个在我的诗,然后它不工作。它给出以下错误:
java.lang.IllegalArgumentException: No SchemaFactory that implements the schema language specified by: http://www.w3.org/XML/XMLSchema/v1.1 could be loaded
但是当我在classpath中手动添加以下jar时,它就会起作用:
cupv10k-runtime.jar
org.eclipse.wst.xml.xpath2.processor_1.1.0.jar
xercesImpl.jar
xml-apis.jar
My Code:
import javax.xml.validation.SchemaFactory;
schemaFactory = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
我们是否需要手动添加jar以使其工作?这个库在maven中可用吗?如果有人有任何想法,请帮助。
博客文章https://blog.adamretter.org.uk/xerces-xsd11-maven/描述了这种困境,并解释了作者设置了https://search.maven.org/artifact/org.exist-db.thirdparty.xerces/xercesImpl/2.12.2/jar,这样您就可以使用例如
<dependency>
<groupId>org.exist-db.thirdparty.xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.2</version>
<classifier>xml-schema-1.1</classifier>
</dependency>
<!-- xpath2 and java-cup are needed at runtime
for xercesImpl Schema 1.1 support -->
<dependency>
<groupId>org.exist-db.thirdparty.org.eclipse.wst.xml</groupId>
<artifactId>xpath2</artifactId>
<version>1.2.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>edu.princeton.cup</groupId>
<artifactId>java-cup</artifactId>
<version>10k</version>
<scope>runtime</scope>
</dependency>
我尝试了这两种建议,只有当XML无效时才对我有效。但是,当它有效时,我得到了大量关于丢失com.ibm.icu的异常。因此,为了使它为我工作,我添加了以下依赖项:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>72.1</version>
</dependency>
我希望这能帮助到别人。
问候!