org.orcid.core.TestXmlValidity.java Source code

Java tutorial

Introduction

Here is the source code for org.orcid.core.TestXmlValidity.java

Source

/**
 * =============================================================================
 *
 * ORCID (R) Open Source
 * http://orcid.org
 *
 * Copyright (c) 2012-2014 ORCID, Inc.
 * Licensed under an MIT-Style License (MIT)
 * http://orcid.org/open-source-license
 *
 * This copyright and license information (including a link to the full license)
 * shall be included in its entirety in all copies or substantial portion of
 * the software.
 *
 * =============================================================================
 */
package org.orcid.core;

import java.io.IOException;
import java.io.InputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.orcid.core.exception.OrcidValidationException;
import org.orcid.core.manager.ValidationBehaviour;
import org.orcid.core.manager.ValidationManager;
import org.orcid.core.manager.impl.ValidationManagerImpl;
import org.orcid.jaxb.model.message.OrcidMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

/**
 * 
 * @author Will Simpson
 * 
 */
public class TestXmlValidity extends BaseTest {

    private ValidationManager validationManager;

    private Unmarshaller unmarshaller;

    private static final Logger LOG = LoggerFactory.getLogger(TestXmlValidity.class);

    @Before
    public void before() throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(OrcidMessage.class);
        unmarshaller = context.createUnmarshaller();
    }

    @Test
    public void testAllOrcidMessages() throws IOException {
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources("classpath*:**/*message-latest.xml");
        for (Resource resource : resources) {
            LOG.info("Found resource: {}", resource);
            InputStream is = null;
            try {
                is = resource.getInputStream();
                OrcidMessage message = (OrcidMessage) unmarshaller.unmarshal(is);
                validationManager = getValidationManager(message.getMessageVersion());
                validationManager.validateMessage(message);
            } catch (IOException e) {
                Assert.fail("Unable to read resource: " + resource + "\n" + e);
            } catch (JAXBException e) {
                Assert.fail("ORCID message is not well formed: " + resource + "\n" + e);
            } catch (OrcidValidationException e) {
                Assert.fail("Validation failed: " + resource + "\n" + e.getCause());
            } finally {
                IOUtils.closeQuietly(is);
            }
        }
    }

    private ValidationManagerImpl getValidationManager(String version) {
        ValidationManagerImpl validationManagerImpl = new ValidationManagerImpl();
        validationManagerImpl.setRequireOrcidProfile(false);
        validationManagerImpl.setValidationBehaviour(ValidationBehaviour.THROW_VALIDATION_EXCEPTION);
        if (version != null)
            validationManagerImpl.setVersion(version);
        return validationManagerImpl;
    }

}