All Downloads are FREE. Search and download functionalities are using the official Maven repository.

at.ebinterface.validation.validator.LocalSchemaResolver Maven / Gradle / Ivy

package at.ebinterface.validation.validator;

import java.io.InputStream;
import java.io.Reader;

import javax.xml.crypto.dsig.XMLSignature;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;

/**
 * Resolver for local schema definitions
 */
public class LocalSchemaResolver implements LSResourceResolver
{

  private final LSResourceResolver parent;

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

  public LocalSchemaResolver (final LSResourceResolver parent)
  {
    this.parent = parent;
  }

  @Override
  public LSInput resolveResource (final String type,
                                  final String namespaceURI,
                                  final String publicId,
                                  final String systemId,
                                  final String baseURI)
  {
    final LSInput input = new LSInputImpl ();
    String url = null;

    // Replace specific schema
    if (XMLSignature.XMLNS.equals (namespaceURI))
    {
      LOG.debug ("Trying to resolve XMLDSIG Schema");
      url = "/schemas/xmldsig-core-schema.xsd";
    }
    // Replace the 4p0 extension schema
    else
      if ("http://www.ebinterface.at/schema/4p0/extensions/ext".equals (namespaceURI))
      {
        LOG.debug ("Trying to resolve 4p0 extension Schema");
        url = "/ebinterface/ebInterfaceExtension4p0.xsd";
      }
      // Replace the 4p0 SV extension schema
      else
        if ("http://www.ebinterface.at/schema/4p0/extensions/sv".equals (namespaceURI))
        {
          LOG.debug ("Trying to resolve 4p0 SV extension Schema");
          url = "/ebinterface/ext4p0/ebInterfaceExtension_SV.xsd";
        }
        // Replace the 4p1 extension schema
        else
          if ("http://www.ebinterface.at/schema/4p1/extensions/ext".equals (namespaceURI))
          {
            LOG.debug ("Trying to resolve 4p1 extension Schema");
            url = "/ebinterface/ebInterfaceExtension4p1.xsd";
          }
          // Replace the 4p1 SV extension schema
          else
            if ("http://www.ebinterface.at/schema/4p1/extensions/sv".equals (namespaceURI))
            {
              LOG.debug ("Trying to resolve 4p1 SV extension Schema");
              url = "/ebinterface/ext4p1/ebInterfaceExtension_SV.xsd";
            }
            // Replace the 4p2 extension schema
            else
              if ("http://www.ebinterface.at/schema/4p2/extensions/ext".equals (namespaceURI))
              {
                LOG.debug ("Trying to resolve 4p2 extension Schema");
                url = "/ebinterface/ebInterfaceExtension4p2.xsd";
              }
              // Replace the 4p2 SV extension schema
              else
                if ("http://www.ebinterface.at/schema/4p2/extensions/sv".equals (namespaceURI))
                {
                  LOG.debug ("Trying to resolve 4p2 SV extension Schema");
                  url = "/ebinterface/ext4p2/ebInterfaceExtension_SV.xsd";
                }
                // Replace the 4p3 extension schema
                else
                  if ("http://www.ebinterface.at/schema/4p3/extensions/ext".equals (namespaceURI))
                  {
                    LOG.debug ("Trying to resolve 4p3 extension Schema");
                    url = "/ebinterface/ebInterfaceExtension4p3.xsd";
                  }
                  // Replace the 4p3 SV extension schema
                  else
                    if ("http://www.ebinterface.at/schema/4p3/extensions/sv".equals (namespaceURI))
                    {
                      LOG.debug ("Trying to resolve 4p3 SV extension Schema");
                      url = "/ebinterface/ext4p3/ebInterfaceExtension_SV.xsd";
                    }

    // Replace with local url
    if (url != null)
    {
      final InputStream is = this.getClass ().getResourceAsStream (url);
      if (is != null)
      {
        LOG.debug ("Found Schema at {}", this.getClass ().getResource (url).toString ());
        input.setByteStream (is);
        return input;
      }
      LOG.warn ("Schema not found at {}", this.getClass ().getResource (url).toString ());
    }

    if (parent != null)
      return parent.resolveResource (type, namespaceURI, publicId, systemId, baseURI);

    return null;
  }

  static class LSInputImpl implements LSInput
  {
    private String systemId = null;
    private InputStream byteStream = null;

    @Override
    public Reader getCharacterStream ()
    {
      return null;
    }

    @Override
    public void setCharacterStream (final Reader characterStream)
    {}

    @Override
    public InputStream getByteStream ()
    {
      InputStream retval = null;
      if (byteStream != null)
      {
        retval = byteStream;
      }
      return retval;
    }

    @Override
    public void setByteStream (final InputStream byteStream)
    {
      this.byteStream = byteStream;
    }

    @Override
    public String getStringData ()
    {
      return null;
    }

    @Override
    public void setStringData (final String stringData)
    {}

    @Override
    public String getSystemId ()
    {
      return systemId;
    }

    @Override
    public void setSystemId (final String systemId)
    {
      this.systemId = systemId;
    }

    @Override
    public String getPublicId ()
    {
      return null;
    }

    @Override
    public void setPublicId (final String publicId)
    {}

    @Override
    public String getBaseURI ()
    {
      return null;
    }

    @Override
    public void setBaseURI (final String baseURI)
    {}

    @Override
    public String getEncoding ()
    {
      return null;
    }

    @Override
    public void setEncoding (final String encoding)
    {}

    @Override
    public boolean getCertifiedText ()
    {
      return false;
    }

    @Override
    public void setCertifiedText (final boolean certifiedText)
    {}
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy