首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rest-Assured XSD引用其他XSD

Rest-Assured XSD引用其他XSD
EN

Stack Overflow用户
提问于 2013-12-01 21:27:32
回答 1查看 456关注 0票数 1

我正在使用Rest-Assured根据模式编写一个XML验证器。但是,我在处理引用其他XSD的XSD时遇到了问题,因为我使用GET从URL检索原始XSD。

我一直在尝试实现自己的解析,以将XSD(字符串)合并为一个XSD(字符串),但它正在变成一个递归怪物,并且效率极低/非常困难。要查看算法,请查看帖子的末尾。

我有两个问题: 1)我的问题是我使用GET来检索XSD,所以它不在名称空间中。有没有一种方法可以获得所有引用的XSD并使用Rest-Assured合并它们?我不知道该怎么做。

2)有没有更好的方法来处理一般的包含?正如您所看到的,我的算法非常昂贵且过于复杂(特别是ref属性),如果我更改测试用例,我肯定会很容易出问题。

到目前为止,我的算法(避免复杂性的伪代码)如下所示:

代码语言:javascript
复制
boolean xmlValid(String xmlAddress, String xsdAddress){

    LinkedList XSDList = new LinkedList;
    XSDList.add(xsdAddress);
    xsdString = getExternalXSDStrings(XSDList);

    try{ //No PseudoCode here
       RestAssured.expect().
            statusCode(200).
            body(
                    RestAssuredMatchers.matchesXsd(xsdString)).
            when().
            get(xmlAddress);
    }catch Exceptions{...}
}

String getExternalXSDStrings(LinkedList xsdReferences, String prevString){
    LinkedList recursiveXSDReferences = new LinkedList();

    for(xsdRef:xsdReferences){
         xsdAddress = "http://..." + xsdRef;
         Open InputStream From URL;
         while(inputLine != null){

             if(prologFlag) //Do Nothing, this is to avoid multiple prologs ;

             else if(includeFlag){

                 if(refFlag) Note Reference;
                 else recursiveXSDReferences.add(includeReference);

             }else if(refFlag){

                 referenceDefinition = Extract Reference Element Definition;
                 xsdString = xsdString + referenceDefinition;

             }else{
                 xsdString = xsdString + inputLine;
             }
         }
         Close input stream;
    }
    xsdString = prevString + xsdString;
    if(xsdReferences.length > 0) return getExternalXSDStrings(recursiveXSDReferences , xsdString);
    else return xsdString;
}

非常感谢您的提前!

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 18:20:36

也许可以在详细的配置中利用XmlConfig。这使您可以访问配置特性和名称空间等。例如,如果您想要禁用外部DTD的加载,您可以这样做:

代码语言:javascript
复制
given().config(RestAssured.config().xmlConfig(xmlConfig().disableLoadingOfExternalDtd())). .. 

因此,也许您可以查看"disableLoadingOfExternalDtd“方法,看看它是如何实现的,从而获得一些提示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20312613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档