Example usage for javax.xml.validation SchemaFactory setResourceResolver

List of usage examples for javax.xml.validation SchemaFactory setResourceResolver

Introduction

In this page you can find the example usage for javax.xml.validation SchemaFactory setResourceResolver.

Prototype

public abstract void setResourceResolver(LSResourceResolver resourceResolver);

Source Link

Document

Sets the LSResourceResolver to customize resource resolution when parsing schemas.

Usage

From source file:org.sonar.plugins.xml.checks.XmlSchemaCheck.java

/**
 * Create xsd schema for a list of schema's.
 */// ww  w. j a v a  2s. co m
private static Schema createSchema(String[] schemaList) {

    final String cacheKey = StringUtils.join(schemaList, ",");
    // first try to load a cached schema.
    Schema schema = cachedSchemas.get(cacheKey);
    if (schema != null) {
        return schema;
    }

    List<Source> schemaSources = new ArrayList<Source>();

    // load each schema in a StreamSource.
    for (String schemaReference : schemaList) {
        InputStream input = SchemaResolver.getBuiltinSchema(schemaReference);
        if (input == null) {
            throw new SonarException("Could not load schema: " + schemaReference);
        }
        schemaSources.add(new StreamSource(input));
    }

    // create a schema for the list of StreamSources.
    try {
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        schemaFactory.setResourceResolver(new SchemaResolver());

        schema = schemaFactory.newSchema(schemaSources.toArray(new Source[schemaSources.size()]));
        cachedSchemas.put(cacheKey, schema);
        return schema;
    } catch (SAXException e) {
        throw new SonarException(e);
    }
}

From source file:org.springframework.oxm.jaxb.Jaxb2Marshaller.java

@SuppressWarnings("deprecation") // on JDK 9
private Schema loadSchema(Resource[] resources, String schemaLanguage) throws IOException, SAXException {
    if (logger.isDebugEnabled()) {
        logger.debug("Setting validation schema to "
                + StringUtils.arrayToCommaDelimitedString(this.schemaResources));
    }/*w ww .ja va 2  s.  com*/
    Assert.notEmpty(resources, "No resources given");
    Assert.hasLength(schemaLanguage, "No schema language provided");
    Source[] schemaSources = new Source[resources.length];
    XMLReader xmlReader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
    xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
    for (int i = 0; i < resources.length; i++) {
        Assert.notNull(resources[i], "Resource is null");
        Assert.isTrue(resources[i].exists(), "Resource " + resources[i] + " does not exist");
        InputSource inputSource = SaxResourceUtils.createInputSource(resources[i]);
        schemaSources[i] = new SAXSource(xmlReader, inputSource);
    }
    SchemaFactory schemaFactory = SchemaFactory.newInstance(schemaLanguage);
    if (this.schemaResourceResolver != null) {
        schemaFactory.setResourceResolver(this.schemaResourceResolver);
    }
    return schemaFactory.newSchema(schemaSources);
}

From source file:org.sweble.wikitext.dumpreader.DumpReader.java

private void setSchema(URL schemaUrl) throws Exception {
    SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);

    sf.setResourceResolver(new LSResourceResolverImplementation());

    Schema schema = sf.newSchema(schemaUrl);

    unmarshaller.setSchema(schema);//from ww  w . j  av a 2  s.  co m

    unmarshaller.setEventHandler(new ValidationEventHandler() {
        public boolean handleEvent(ValidationEvent ve) {
            try {
                return DumpReader.this.handleEvent(ve, ve.getLocator());
            } catch (RuntimeException e) {
                throw e;
            } catch (Exception e) {
                throw new WrappedException(e);
            }
        }
    });
}

From source file:org.tinygroup.jspengine.xmlparser.ParserUtils.java

private static Schema getSchema(String schemaPublicId) throws SAXException {

    Schema schema = schemaCache.get(schemaPublicId);
    if (schema == null) {
        synchronized (schemaCache) {
            schema = schemaCache.get(schemaPublicId);
            if (schema == null) {
                SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
                schemaFactory.setResourceResolver(new MyLSResourceResolver());
                schemaFactory.setErrorHandler(new MyErrorHandler());
                schema = schemaFactory.newSchema(new StreamSource(
                        ParserUtils.class.getResourceAsStream(schemaResourcePrefix + schemaPublicId)));
                schemaCache.put(schemaPublicId, schema);
            }//  www . java 2  s .  c o  m
        }
    }

    return schema;
}

From source file:org.xsystem.bpmn2.formats.xml.XMLParser3.java

Schema buildSxema() throws SAXException, IOException {
    final ClassLoader classLoader = this.getClass().getClassLoader();
    //Thread.currentThread().getContextClassLoader();

    try (InputStream is = classLoader.getResourceAsStream("BPMN20/BPMN20.xsd")) {

        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);//"http://www.w3.org/2001/XMLSchema");
        StreamSource ss = new StreamSource(is);
        factory.setResourceResolver(
                (String type, String namespaceURI, String publicId, String systemId, String baseURI) -> {
                    InputStream resourceAsStream = classLoader.getResourceAsStream("BPMN20/" + systemId);
                    LSInput ret = new LSInputImpl(publicId, systemId, resourceAsStream);
                    return ret;
                });//from w  w  w .j  av  a2s  .  co m
        Schema shema = factory.newSchema(ss);
        return shema;
    }
}

From source file:se.mithlond.services.shared.test.entity.PlainJaxbContextRule.java

/**
 * Acquires a JAXB Schema from the provided JAXBContext.
 *
 * @param ctx The context for which am XSD should be constructed.
 * @return A tuple holding the constructed XSD from the provided JAXBContext, and
 * the LSResourceResolver synthesized during the way.
 * @throws NullPointerException     if ctx was {@code null}.
 * @throws IllegalArgumentException if a JAXB-related exception occurred while extracting the schema.
 *//*from   www.  j  a  v  a  2  s . c  o  m*/
public static Tuple<Schema, LSResourceResolver> generateTransientXSD(final JAXBContext ctx)
        throws NullPointerException, IllegalArgumentException {

    // Check sanity
    org.apache.commons.lang3.Validate.notNull(ctx, "Cannot handle null ctx argument.");

    final SortedMap<String, ByteArrayOutputStream> namespace2SchemaMap = new TreeMap<>();

    try {
        ctx.generateSchema(new SchemaOutputResolver() {

            /**
             * {@inheritDoc}
             */
            @Override
            public Result createOutput(final String namespaceUri, final String suggestedFileName)
                    throws IOException {

                // The types should really be annotated with @XmlType(namespace = "... something ...")
                // to avoid using the default ("") namespace.
                if (namespaceUri.isEmpty()) {
                    log.warn("Received empty namespaceUri while resolving a generated schema. "
                            + "Did you forget to add a @XmlType(namespace = \"... something ...\") annotation "
                            + "to your class?");
                }

                // Create the result ByteArrayOutputStream
                final ByteArrayOutputStream out = new ByteArrayOutputStream();
                final StreamResult toReturn = new StreamResult(out);
                toReturn.setSystemId("");

                // Map the namespaceUri to the schemaResult.
                namespace2SchemaMap.put(namespaceUri, out);

                // All done.
                return toReturn;
            }
        });
    } catch (IOException e) {
        throw new IllegalArgumentException("Could not acquire Schema snippets.", e);
    }

    // Convert to an array of StreamSource.
    final MappedSchemaResourceResolver resourceResolver = new MappedSchemaResourceResolver();
    final StreamSource[] schemaSources = new StreamSource[namespace2SchemaMap.size()];
    int counter = 0;
    for (Map.Entry<String, ByteArrayOutputStream> current : namespace2SchemaMap.entrySet()) {

        final byte[] schemaSnippetAsBytes = current.getValue().toByteArray();
        resourceResolver.addNamespace2SchemaEntry(current.getKey(), new String(schemaSnippetAsBytes));

        if (log.isDebugEnabled()) {
            log.info("Generated schema [" + (counter + 1) + "/" + schemaSources.length + "]:\n "
                    + new String(schemaSnippetAsBytes));
        }

        // Copy the schema source to the schemaSources array.
        schemaSources[counter] = new StreamSource(new ByteArrayInputStream(schemaSnippetAsBytes), "");

        // Increase the counter
        counter++;
    }

    try {

        // All done.
        final SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        schemaFactory.setResourceResolver(resourceResolver);
        final Schema transientSchema = schemaFactory.newSchema(schemaSources);

        // All done.
        return new Tuple<>(transientSchema, resourceResolver);

    } catch (final SAXException e) {
        throw new IllegalArgumentException("Could not create Schema from snippets.", e);
    }
}

From source file:test.unit.be.fedict.eid.applet.service.signer.XAdESSignatureFacetTest.java

@Test
public void testSignEnvelopingDocument() throws Exception {
    // setup/*w  ww  .j av  a2s  . com*/
    EnvelopedSignatureFacet envelopedSignatureFacet = new EnvelopedSignatureFacet();
    KeyInfoSignatureFacet keyInfoSignatureFacet = new KeyInfoSignatureFacet(true, false, false);
    SignaturePolicyService signaturePolicyService = null;
    //SignaturePolicyService signaturePolicyService = new ExplicitSignaturePolicyService(
    //      "urn:test", "hello world".getBytes(), "description",
    //      "http://here.com");
    XAdESSignatureFacet xadesSignatureFacet = new XAdESSignatureFacet(signaturePolicyService);
    TimeStampService mockTimeStampService = EasyMock.createMock(TimeStampService.class);
    RevocationDataService mockRevocationDataService = EasyMock.createMock(RevocationDataService.class);
    XAdESXLSignatureFacet xadesXLSignatureFacet = new XAdESXLSignatureFacet(mockTimeStampService,
            mockRevocationDataService);
    XmlSignatureTestService testedInstance = new XmlSignatureTestService(envelopedSignatureFacet,
            keyInfoSignatureFacet, xadesSignatureFacet, xadesXLSignatureFacet);

    KeyPair keyPair = PkiTestUtils.generateKeyPair();
    DateTime notBefore = new DateTime();
    DateTime notAfter = notBefore.plusYears(1);
    X509Certificate certificate = PkiTestUtils.generateCertificate(keyPair.getPublic(), "CN=Test", notBefore,
            notAfter, null, keyPair.getPrivate(), true, 0, null, null, new KeyUsage(KeyUsage.nonRepudiation));
    List<X509Certificate> certificateChain = new LinkedList<X509Certificate>();
    /*
     * We need at least 2 certificates for the XAdES-C complete certificate
     * refs construction.
     */
    certificateChain.add(certificate);
    certificateChain.add(certificate);

    RevocationData revocationData = new RevocationData();
    final X509CRL crl = PkiTestUtils.generateCrl(certificate, keyPair.getPrivate());
    revocationData.addCRL(crl);
    OCSPResp ocspResp = PkiTestUtils.createOcspResp(certificate, false, certificate, certificate,
            keyPair.getPrivate(), "SHA1withRSA");
    revocationData.addOCSP(ocspResp.getEncoded());

    // expectations
    EasyMock.expect(mockTimeStampService.timeStamp(EasyMock.anyObject(byte[].class),
            EasyMock.anyObject(RevocationData.class))).andStubAnswer(new IAnswer<byte[]>() {
                public byte[] answer() throws Throwable {
                    Object[] arguments = EasyMock.getCurrentArguments();
                    RevocationData revocationData = (RevocationData) arguments[1];
                    revocationData.addCRL(crl);
                    return "time-stamp-token".getBytes();
                }
            });
    EasyMock.expect(mockRevocationDataService.getRevocationData(EasyMock.eq(certificateChain)))
            .andStubReturn(revocationData);

    // prepare
    EasyMock.replay(mockTimeStampService, mockRevocationDataService);

    // operate
    DigestInfo digestInfo = testedInstance.preSign(null, certificateChain);

    // verify
    assertNotNull(digestInfo);
    assertEquals("SHA-1", digestInfo.digestAlgo);
    assertNotNull(digestInfo.digestValue);

    TemporaryTestDataStorage temporaryDataStorage = (TemporaryTestDataStorage) testedInstance
            .getTemporaryDataStorage();
    assertNotNull(temporaryDataStorage);
    InputStream tempInputStream = temporaryDataStorage.getTempInputStream();
    assertNotNull(tempInputStream);
    Document tmpDocument = PkiTestUtils.loadDocument(tempInputStream);

    LOG.debug("tmp document: " + PkiTestUtils.toString(tmpDocument));
    Element nsElement = tmpDocument.createElement("ns");
    nsElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:ds", Constants.SignatureSpecNS);
    nsElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:xades", "http://uri.etsi.org/01903/v1.3.2#");
    Node digestValueNode = XPathAPI.selectSingleNode(tmpDocument, "//ds:DigestValue", nsElement);
    assertNotNull(digestValueNode);
    String digestValueTextContent = digestValueNode.getTextContent();
    LOG.debug("digest value text content: " + digestValueTextContent);
    assertFalse(digestValueTextContent.isEmpty());

    /*
     * Sign the received XML signature digest value.
     */
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
    byte[] digestInfoValue = ArrayUtils.addAll(PkiTestUtils.SHA1_DIGEST_INFO_PREFIX, digestInfo.digestValue);
    byte[] signatureValue = cipher.doFinal(digestInfoValue);

    /*
     * Operate: postSign
     */
    testedInstance.postSign(signatureValue, certificateChain);

    // verify
    EasyMock.verify(mockTimeStampService, mockRevocationDataService);
    byte[] signedDocumentData = testedInstance.getSignedDocumentData();
    assertNotNull(signedDocumentData);
    Document signedDocument = PkiTestUtils.loadDocument(new ByteArrayInputStream(signedDocumentData));
    LOG.debug("signed document: " + PkiTestUtils.toString(signedDocument));

    NodeList signatureNodeList = signedDocument.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
    assertEquals(1, signatureNodeList.getLength());
    Node signatureNode = signatureNodeList.item(0);

    DOMValidateContext domValidateContext = new DOMValidateContext(
            KeySelector.singletonKeySelector(keyPair.getPublic()), signatureNode);
    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    XMLSignature xmlSignature = xmlSignatureFactory.unmarshalXMLSignature(domValidateContext);
    boolean validity = xmlSignature.validate(domValidateContext);
    assertTrue(validity);

    File tmpFile = File.createTempFile("xades-x-l-", ".xml");
    FileUtils.writeStringToFile(tmpFile, PkiTestUtils.toString(signedDocument));
    LOG.debug("tmp file: " + tmpFile.getAbsolutePath());

    Node resultNode = XPathAPI.selectSingleNode(signedDocument,
            "ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue",
            nsElement);
    assertNotNull(resultNode);

    // also test whether the XAdES extension is in line with the XAdES XML
    // Schema.

    // stax-api 1.0.1 prevents us from using
    // "XMLConstants.W3C_XML_SCHEMA_NS_URI"
    Node qualifyingPropertiesNode = XPathAPI.selectSingleNode(signedDocument,
            "ds:Signature/ds:Object/xades:QualifyingProperties", nsElement);
    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    LSResourceResolver xadesResourceResolver = new XAdESLSResourceResolver();
    factory.setResourceResolver(xadesResourceResolver);
    InputStream schemaInputStream = XAdESSignatureFacetTest.class.getResourceAsStream("/XAdESv141.xsd");
    Source schemaSource = new StreamSource(schemaInputStream);
    Schema schema = factory.newSchema(schemaSource);
    Validator validator = schema.newValidator();
    // DOMResult gives some DOMException...
    validator.validate(new DOMSource(qualifyingPropertiesNode));

    StreamSource streamSource = new StreamSource(tmpFile.toURI().toString());
    ByteArrayOutputStream resultOutputStream = new ByteArrayOutputStream();
    StreamResult streamResult = new StreamResult(resultOutputStream);
    // validator.validate(streamSource, streamResult);
    LOG.debug("result: " + resultOutputStream);
}

From source file:test.unit.be.fedict.eid.applet.service.signer.XAdESSignatureFacetTest.java

@Test
public void testSignEnvelopingDocumentOffice2010() throws Exception {
    // setup// w  w  w  .  j  ava 2s . c  o m
    EnvelopedSignatureFacet envelopedSignatureFacet = new EnvelopedSignatureFacet();
    KeyInfoSignatureFacet keyInfoSignatureFacet = new KeyInfoSignatureFacet(true, false, false);
    SignaturePolicyService signaturePolicyService = new ExplicitSignaturePolicyService("urn:test",
            "hello world".getBytes(), "description", "http://here.com");
    XAdESSignatureFacet xadesSignatureFacet = new XAdESSignatureFacet(signaturePolicyService);
    TimeStampService mockTimeStampService = EasyMock.createMock(TimeStampService.class);
    RevocationDataService mockRevocationDataService = EasyMock.createMock(RevocationDataService.class);
    XAdESXLSignatureFacet xadesXLSignatureFacet = new XAdESXLSignatureFacet(mockTimeStampService,
            mockRevocationDataService);
    XmlSignatureTestService testedInstance = new XmlSignatureTestService(envelopedSignatureFacet,
            keyInfoSignatureFacet, xadesSignatureFacet, new Office2010SignatureFacet(), xadesXLSignatureFacet);

    KeyPair keyPair = PkiTestUtils.generateKeyPair();
    DateTime notBefore = new DateTime();
    DateTime notAfter = notBefore.plusYears(1);
    X509Certificate certificate = PkiTestUtils.generateCertificate(keyPair.getPublic(), "CN=Test", notBefore,
            notAfter, null, keyPair.getPrivate(), true, 0, null, null, new KeyUsage(KeyUsage.nonRepudiation));
    List<X509Certificate> certificateChain = new LinkedList<X509Certificate>();
    /*
     * We need at least 2 certificates for the XAdES-C complete certificate
     * refs construction.
     */
    certificateChain.add(certificate);
    certificateChain.add(certificate);

    RevocationData revocationData = new RevocationData();
    final X509CRL crl = PkiTestUtils.generateCrl(certificate, keyPair.getPrivate());
    revocationData.addCRL(crl);
    OCSPResp ocspResp = PkiTestUtils.createOcspResp(certificate, false, certificate, certificate,
            keyPair.getPrivate(), "SHA1withRSA");
    revocationData.addOCSP(ocspResp.getEncoded());

    // expectations
    EasyMock.expect(mockTimeStampService.timeStamp(EasyMock.anyObject(byte[].class),
            EasyMock.anyObject(RevocationData.class))).andStubAnswer(new IAnswer<byte[]>() {
                public byte[] answer() throws Throwable {
                    Object[] arguments = EasyMock.getCurrentArguments();
                    RevocationData revocationData = (RevocationData) arguments[1];
                    revocationData.addCRL(crl);
                    return "time-stamp-token".getBytes();
                }
            });
    EasyMock.expect(mockRevocationDataService.getRevocationData(EasyMock.eq(certificateChain)))
            .andStubReturn(revocationData);

    // prepare
    EasyMock.replay(mockTimeStampService, mockRevocationDataService);

    // operate
    DigestInfo digestInfo = testedInstance.preSign(null, certificateChain);

    // verify
    assertNotNull(digestInfo);
    assertEquals("SHA-1", digestInfo.digestAlgo);
    assertNotNull(digestInfo.digestValue);

    TemporaryTestDataStorage temporaryDataStorage = (TemporaryTestDataStorage) testedInstance
            .getTemporaryDataStorage();
    assertNotNull(temporaryDataStorage);
    InputStream tempInputStream = temporaryDataStorage.getTempInputStream();
    assertNotNull(tempInputStream);
    Document tmpDocument = PkiTestUtils.loadDocument(tempInputStream);

    LOG.debug("tmp document: " + PkiTestUtils.toString(tmpDocument));
    Element nsElement = tmpDocument.createElement("ns");
    nsElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:ds", Constants.SignatureSpecNS);
    nsElement.setAttributeNS(Constants.NamespaceSpecNS, "xmlns:xades", "http://uri.etsi.org/01903/v1.3.2#");
    Node digestValueNode = XPathAPI.selectSingleNode(tmpDocument, "//ds:DigestValue", nsElement);
    assertNotNull(digestValueNode);
    String digestValueTextContent = digestValueNode.getTextContent();
    LOG.debug("digest value text content: " + digestValueTextContent);
    assertFalse(digestValueTextContent.isEmpty());

    /*
     * Sign the received XML signature digest value.
     */
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
    byte[] digestInfoValue = ArrayUtils.addAll(PkiTestUtils.SHA1_DIGEST_INFO_PREFIX, digestInfo.digestValue);
    byte[] signatureValue = cipher.doFinal(digestInfoValue);

    /*
     * Operate: postSign
     */
    testedInstance.postSign(signatureValue, certificateChain);

    // verify
    EasyMock.verify(mockTimeStampService, mockRevocationDataService);
    byte[] signedDocumentData = testedInstance.getSignedDocumentData();
    assertNotNull(signedDocumentData);
    Document signedDocument = PkiTestUtils.loadDocument(new ByteArrayInputStream(signedDocumentData));
    LOG.debug("signed document: " + PkiTestUtils.toString(signedDocument));

    NodeList signatureNodeList = signedDocument.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
    assertEquals(1, signatureNodeList.getLength());
    Node signatureNode = signatureNodeList.item(0);

    DOMValidateContext domValidateContext = new DOMValidateContext(
            KeySelector.singletonKeySelector(keyPair.getPublic()), signatureNode);
    XMLSignatureFactory xmlSignatureFactory = XMLSignatureFactory.getInstance();
    XMLSignature xmlSignature = xmlSignatureFactory.unmarshalXMLSignature(domValidateContext);
    boolean validity = xmlSignature.validate(domValidateContext);
    assertTrue(validity);

    File tmpFile = File.createTempFile("xades-bes-", ".xml");
    FileUtils.writeStringToFile(tmpFile, PkiTestUtils.toString(signedDocument));
    LOG.debug("tmp file: " + tmpFile.getAbsolutePath());

    Node resultNode = XPathAPI.selectSingleNode(signedDocument,
            "ds:Signature/ds:Object/xades:QualifyingProperties/xades:SignedProperties/xades:SignedSignatureProperties/xades:SigningCertificate/xades:Cert/xades:CertDigest/ds:DigestValue",
            nsElement);
    assertNotNull(resultNode);

    // also test whether the XAdES extension is in line with the XAdES XML
    // Schema.

    // stax-api 1.0.1 prevents us from using
    // "XMLConstants.W3C_XML_SCHEMA_NS_URI"
    Node qualifyingPropertiesNode = XPathAPI.selectSingleNode(signedDocument,
            "ds:Signature/ds:Object/xades:QualifyingProperties", nsElement);
    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    LSResourceResolver xadesResourceResolver = new XAdESLSResourceResolver();
    factory.setResourceResolver(xadesResourceResolver);
    InputStream schemaInputStream = XAdESSignatureFacetTest.class.getResourceAsStream("/XAdESv141.xsd");
    Source schemaSource = new StreamSource(schemaInputStream);
    Schema schema = factory.newSchema(schemaSource);
    Validator validator = schema.newValidator();
    // DOMResult gives some DOMException...
    validator.validate(new DOMSource(qualifyingPropertiesNode));

    StreamSource streamSource = new StreamSource(tmpFile.toURI().toString());
    ByteArrayOutputStream resultOutputStream = new ByteArrayOutputStream();
    StreamResult streamResult = new StreamResult(resultOutputStream);
    // validator.validate(streamSource, streamResult);
    LOG.debug("result: " + resultOutputStream);
}

From source file:test.unit.be.fedict.eid.tsl.BelgianTrustServiceListFactoryTest.java

@Test
public void testBelgianTrustList() throws Exception {
    // setup//from   ww w  .j a v  a2 s.  co m
    TrustServiceList trustServiceList = BelgianTrustServiceListFactory.newInstance(2014, Trimester.FIRST);

    assertNotNull(trustServiceList.getType());

    File unsignedTslFile = File.createTempFile("tsl-be-2014-T1-candidatetest", ".xml");
    trustServiceList.saveAs(unsignedTslFile);

    // sign trust list
    KeyPair keyPair = TrustTestUtils.generateKeyPair(2048);
    PrivateKey privateKey = keyPair.getPrivate();
    DateTime notBefore = new DateTime();
    DateTime notAfter = notBefore.plusYears(5);
    X509Certificate certificate = TrustTestUtils.generateSelfSignedCertificate(keyPair,
            "C=BE, CN=Belgium Trust List Scheme Operator", notBefore, notAfter);
    trustServiceList.sign(privateKey, certificate);

    // operate
    File tmpTslFile = File.createTempFile("tsl-be-", ".xml");
    // tmpTslFile.deleteOnExit();
    trustServiceList.saveAs(tmpTslFile);

    // --------------- VERIFY TRUST LIST --------------------
    LOG.debug("TSL: " + FileUtils.readFileToString(tmpTslFile));
    Document document = TrustTestUtils.loadDocument(tmpTslFile);

    // XML schema validation
    SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
    LSResourceResolver resourceResolver = new TSLLSResourceResolver();
    factory.setResourceResolver(resourceResolver);
    InputStream tslSchemaInputStream = BelgianTrustServiceListFactoryTest.class
            .getResourceAsStream("/ts_119612v010101_xsd.xsd");
    Source tslSchemaSource = new StreamSource(tslSchemaInputStream);
    Schema tslSchema = factory.newSchema(tslSchemaSource);
    Validator tslValidator = tslSchema.newValidator();
    LOG.debug("Starting validate");
    tslValidator.validate(new DOMSource(document));

    Validator eccValidator = factory
            .newSchema(BelgianTrustServiceListFactoryTest.class.getResource("/ts_119612v010101_sie_xsd.xsd"))
            .newValidator();
    NodeList eccQualificationsNodeList = document.getElementsByTagNameNS(
            "http://uri.etsi.org/TrstSvc/SvcInfoExt/eSigDir-1999-93-EC-TrustedList/#", "Qualifications");
    for (int idx = 0; idx < eccQualificationsNodeList.getLength(); idx++) {
        Node eccQualificationsNode = eccQualificationsNodeList.item(idx);
        eccValidator.validate(new DOMSource(eccQualificationsNode));
    }

    Validator xadesValidator = factory
            .newSchema(BelgianTrustServiceListFactoryTest.class.getResource("/XAdES.xsd")).newValidator();
    NodeList xadesQualifyingPropertiesNodeList = document
            .getElementsByTagNameNS("http://uri.etsi.org/01903/v1.3.2#", "QualifyingProperties");
    for (int idx = 0; idx < xadesQualifyingPropertiesNodeList.getLength(); idx++) {
        Node xadesQualifyingPropertiesNode = xadesQualifyingPropertiesNodeList.item(idx);
        xadesValidator.validate(new DOMSource(xadesQualifyingPropertiesNode));
    }

    // signature
    trustServiceList = TrustServiceListFactory.newInstance(tmpTslFile);
    X509Certificate resultCertificate = trustServiceList.verifySignature();
    assertEquals(certificate, resultCertificate);

    File pdfExportFile = File.createTempFile("tsl-be-", ".pdf");
    trustServiceList.humanReadableExport(pdfExportFile);

    // scheme operator name
    String schemeOperatorNameEn = trustServiceList.getSchemeOperatorName(Locale.ENGLISH);
    assertEquals("FPS Economy, SMEs, Self-employed and Energy - Quality and Safety", schemeOperatorNameEn);
    LOG.debug("Locale.ENGLISH: " + Locale.ENGLISH.getLanguage());
    assertEquals("SPF Economie, PME, Classes moyennes et Energie - Qualit et Scurit",
            trustServiceList.getSchemeOperatorName(Locale.FRENCH));

    Node schemeOperatorNameEnNode = XPathAPI.selectSingleNode(document,
            "tsl:TrustServiceStatusList/tsl:SchemeInformation/tsl:SchemeOperatorName/tsl:Name[@xml:lang='en']");
    assertNotNull(schemeOperatorNameEnNode);
    assertEquals("FPS Economy, SMEs, Self-employed and Energy - Quality and Safety",
            schemeOperatorNameEnNode.getTextContent());

    // scheme operator postal address
    PostalAddressType resultPostalAddress = trustServiceList.getSchemeOperatorPostalAddress(Locale.ENGLISH);
    assertNotNull(resultPostalAddress);
    assertEquals("NG III - Koning Albert II-laan 16", resultPostalAddress.getStreetAddress());
    assertEquals("Brussels", resultPostalAddress.getLocality());
    assertEquals("Brussel", trustServiceList.getSchemeOperatorPostalAddress(new Locale("nl")).getLocality());

    // scheme operator electronic address
    assertEquals(2, trustServiceList.getSchemeOperatorElectronicAddresses().size());
    LOG.debug("electronic addresses: " + trustServiceList.getSchemeOperatorElectronicAddresses());

    // scheme name
    assertTrue(trustServiceList.getSchemeName(Locale.ENGLISH).startsWith("BE:"));

    // scheme information uri
    List<String> schemeInformationUris = trustServiceList.getSchemeInformationUris();
    assertNotNull(schemeInformationUris);
    // assertEquals(3, schemeInformationUris.size());
    assertEquals("http://tsl.belgium.be/", schemeInformationUris.get(0));

    // status determination approach
    assertEquals("http://uri.etsi.org/TrstSvc/TrustedList/TSLType/StatusDetn/EUappropriate",
            trustServiceList.getStatusDeterminationApproach());

    // scheme types

    /*List<String> schemeTypes = trustServiceList.getSchemeTypes();
    assertNotNull(schemeTypes);
    assertEquals(2, schemeTypes.size());
     */
    // scheme territory
    assertEquals("BE", trustServiceList.getSchemeTerritory());

    // legal notice
    String resultLegalNotice = trustServiceList.getLegalNotice(Locale.ENGLISH);
    assertNotNull(resultLegalNotice);
    assertTrue(resultLegalNotice.indexOf("1999/93/EC") != -1);
    assertTrue(resultLegalNotice.indexOf("Belgium") != -1);

    // historical information period
    assertEquals(new Integer(21845 * 3), trustServiceList.getHistoricalInformationPeriod());

    // list issue date time
    DateTime resultListIssueDateTime = trustServiceList.getListIssueDateTime();
    assertNotNull(resultListIssueDateTime);

    // next update
    DateTime resultNextUpdateDateTime = trustServiceList.getNextUpdate();
    assertNotNull(resultNextUpdateDateTime);

    // trust service provider list
    List<TrustServiceProvider> trustServiceProviders = trustServiceList.getTrustServiceProviders();
    assertEquals(2, trustServiceProviders.size());
    TrustServiceProvider certipostTrustServiceProvider = trustServiceProviders.get(0);
    assertEquals("Certipost n.v./s.a.", certipostTrustServiceProvider.getName(Locale.ENGLISH));

    // postal address
    PostalAddressType certipostPostalAddress = certipostTrustServiceProvider.getPostalAddress(Locale.ENGLISH);
    assertNotNull(certipostPostalAddress);
    assertEquals("Muntcentrum", certipostPostalAddress.getStreetAddress());
    assertEquals("BE", certipostPostalAddress.getCountryName());

    // electronic address
    /*
    List<String> resultElectronicAddress = certipostTrustServiceProvider
    .getElectronicAddress();
    assertEquals(2, resultElectronicAddress.size());
     */
    // information uri
    /*
    List<String> resultInformationUris = certipostTrustServiceProvider
    .getInformationUris(Locale.ENGLISH);
    assertEquals(2, resultInformationUris.size());
    assertEquals("http://repository.eid.belgium.be/EN/Index.htm",
    resultInformationUris.get(0));
    */

    LOG.debug("unsigned TSL: " + unsignedTslFile.getAbsolutePath());
    LOG.debug("TSL: " + tmpTslFile.getAbsolutePath());
    LOG.debug("PDF: " + pdfExportFile.getAbsolutePath());
}