休息保证的XSD参考其它的XSD(Rest-Assured XSD References Other

2019-10-19 02:08发布

我根据使用REST的架构放心的编程XML验证。 但是,我有麻烦处理引用了其他的XSD的XSD,因为我检索使用GET的URL原来的XSD。

我一直在努力实现自己的解析巩固的XSD(字符串)到一个XSD(字符串),但它正在成为一个递归怪物,效率极其低下/困难。 看算法,看帖子的末尾。

我有两个问题:1)我的问题是,我使用GET来检索XSD,所以它不是在命名空间内。 有没有办法让所有被引用的XSD和使用REST保证的整合呢? 我不会有一个关于如何去这条线索。

2)有没有更好的方式来处理包括一般? 正如你所看到的,我的算法是非常昂贵的,过于复杂的(尤其是裁判属性),我敢肯定,事情会容易折断,如果我改变我的测试用例。

我的算法(伪代码,以避免复杂性)至今如下所示:

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;
}

非常感谢你提前!

Answer 1:

或许可以在详细的配置使用的XMLConfig的。 这使您可以访问配置功能和命名空间等。例如,如果你想禁用的外部DTD的你可以做负载:

given().config(RestAssured.config().xmlConfig(xmlConfig().disableLoadingOfExternalDtd())). .. 

因此,也许你可以看看在“disableLoadingOfExternalDtd”的方法,看看它是如何实现的得到一些提示。



文章来源: Rest-Assured XSD References Other XSDs