Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解析org.xml.sax.SAXParseException:cvc elt.1:找不到元素';soapenv:Envelope';_Java_Xml_Xsd - Fatal编程技术网

Java 无法解析org.xml.sax.SAXParseException:cvc elt.1:找不到元素';soapenv:Envelope';

Java 无法解析org.xml.sax.SAXParseException:cvc elt.1:找不到元素';soapenv:Envelope';,java,xml,xsd,Java,Xml,Xsd,下面是针对请求xml和请求xsd进行验证时出现的错误: Below is the code import java.io.File; import java.io.IOException; import javax.xml.XMLConstants; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validat

下面是针对请求xml和请求xsd进行验证时出现的错误:

   Below is the code 


import java.io.File;
    import java.io.IOException;
 import javax.xml.XMLConstants;
  import javax.xml.transform.stream.StreamSource;
  import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
          import javax.xml.validation.Validator;

    import org.xml.sax.SAXException;


 public class XMLValidation {

public static void main(String[] args) {

    System.out.println("request.xml validates agains xsd "+validateXMLSchema("request.xsd",  "request.xml"));
  }

public static boolean validateXMLSchema(String xsdPath, String xmlPath){

    try {
        SchemaFactory factory = 
                SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema;
        try {
            schema = factory.newSchema(new File(xsdPath));
             Validator validator = schema.newValidator();
                validator.validate(new StreamSource(new File(xmlPath)));
        } catch (SAXException e) {

            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

    } 
    catch (IOException e) {
        System.out.println("Exception: "+e.getMessage());

    }
    return true;
}
您能否帮助我在我的代码中需要做哪些更改,以便在我的XSD中添加 我无法对XSD进行任何更改,因为它是标准的,而且Soap:env也不存在于该请求XSD中,而是存在于请求XML中,因此在验证它时,会说缺少标记。

您有两个选项:

  • 在验证器可用的模式中包括soap模式(为了进行模式验证,必须提供所有相关的模式)
  • 从有效负载中剥离soap包装器元素,并仅验证有效负载(假设您拥有的模式仅应用于有效负载)。您可以使用引用有效负载
    元素的
    DOMSource
    而不是
    StreamSource

  • 谢谢你的回复。你能用英语解释一下以上两点吗example@Sangeethacg-你在理解哪些部分上有困难?老实说,我在这两个方面都不太理解。您可以获取示例请求xsd和示例请求xml,并显示需要进行的确切更改吗?事实上,我是新的XML技术“java验证多模式”的谷歌搜索为第1点返回了大量的示例。添加了对第2点的澄清。
     org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'soapenv:Envelope'.
    at   com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1887)
    at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:685)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3088)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:914)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:647)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
    at      com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at                          com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at         com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(StreamValidatorHelper.java:144)
    at  com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:107)
    at javax.xml.validation.Validator.validate(Validator.java:127)
    at com.att.xmlvalidation.XMLValidation.validateXMLSchema(XMLValidation.java:35)
    at com.att.xmlvalidation.XMLValidation.main(XMLValidation.java:23)