Sangeetha cg
Sangeetha cg

Reputation: 81

unable to resolve org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'soapenv:Envelope'

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

Below is the error that i get when i validate against the request xml and request xsd:

 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)

Can you please help me what is the change required in my code , to add the in my XSD I cannot make any changes in XSD as it comes as standard , Also the Soap:env is not present in that request XSD but present in request XML, hence while validating it is saying the tag is missing.

Upvotes: 2

Views: 1852

Answers (1)

jtahlborn
jtahlborn

Reputation: 53694

You have two options:

  1. include the soap schema in the schemas available to the validator (in order to do schema validation, you must provide all the relevant schemas)
  2. strip the soap wrapper elements off of the payload and only validate the payload (assuming that the schema you have only applies to the payload). you can use a DOMSource which references the payload Element instead of the StreamSource.

Upvotes: 1

Related Questions