栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

针对Java中的XSD验证XML /获取schemaLocation

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

针对Java中的XSD验证XML /获取schemaLocation

假设您使用的是Xerces(或JDK的默认设置),是否尝试过在工厂将该功能设置为true:http
:
//apache.org/xml/features/validation/schema。关于架构,您还可以使用其他功能:http
:
//xerces.apache.org/xerces2-j/features.html

更新2(用于缓存):

实施

org.w3c.dom.ls.LSResourceResolver
SchemaFactory
使用
setResourceResolver
方法设置该值。该解析器将从缓存中获取架构,或者从位置引用的任何地方获取架构。

更新3:

LSResourceresolver示例(我认为这对您来说是一个很好的起点):

public class URLbasedResourceResolver implements LSResourceResolver {private static final Logger log = LoggerFactory        .getLogger(URLbasedResourceResolver.class);private final URI base;private final Map<URI, String> nsmap;public URLbasedResourceResolver(URL base, Map<URI, String> nsmap)        throws URISyntaxException {    super();    this.base = base.toURI();    this.nsmap = nsmap;}@Overridepublic LSInput resolveResource(String type, String namespaceURI,        String publicId, String systemId, String baseURI) {    if (log.isDebugEnabled()) {        String msg = String     .format("Resolve: type=%s, ns=%s, publicId=%s, systemId=%s, baseUri=%s.",  type, namespaceURI, publicId, systemId, baseURI);        log.debug(msg);    }    if (type.equals(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {        if (namespaceURI != null) { try {     URI ns = new URI(namespaceURI);     if (nsmap.containsKey(ns))         return new MyLSInput(base.resolve(nsmap.get(ns))); } catch (URISyntaxException e) {     // ok }        }    }    return null;}}

MyLSInput的实现真的很无聊:

class MyLSInput implements LSInput {private final URI url;public MyLSInput(URI url) {    super();    this.url = url;}@Overridepublic Reader getCharacterStream() {    return null;}@Overridepublic void setCharacterStream(Reader characterStream) {}@Overridepublic InputStream getByteStream() {    return null;}@Overridepublic void setByteStream(InputStream byteStream) {}@Overridepublic String getStringData() {    return null;}@Overridepublic void setStringData(String stringData) {}@Overridepublic String getSystemId() {    return url.toASCIIString();}@Overridepublic void setSystemId(String systemId) {}@Overridepublic String getPublicId() {    return null;}@Overridepublic void setPublicId(String publicId) {}@Overridepublic String getbaseURI() {    return null;}@Overridepublic void setbaseURI(String baseURI) {}@Overridepublic String getEncoding() {    return null;}@Overridepublic void setEncoding(String encoding) {}@Overridepublic boolean getCertifiedText() {    return false;}@Overridepublic void setCertifiedText(boolean certifiedText) {}}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号