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

org.eclipse.persistence.oxm.XMLValidator Maven / Gradle / Ivy

There is a newer version: 5.0.0-B03
Show newest version
/*
 * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.oxm;

import org.eclipse.persistence.exceptions.XMLMarshalException;
import org.eclipse.persistence.internal.oxm.Root;
import org.eclipse.persistence.platform.xml.XMLParser;
import org.eclipse.persistence.platform.xml.XMLPlatform;
import org.eclipse.persistence.platform.xml.XMLPlatformException;
import org.eclipse.persistence.platform.xml.XMLPlatformFactory;
import org.w3c.dom.Document;
import org.xml.sax.ErrorHandler;

/**
 * 

Class used to validate XML. This is used to check if the XML created during * a marshal operation would be valid XML before the marshal operation is performed. *

Create an XMLValidator from an XMLContext.
* Code Sample
* * XMLContext context = new XMLContext("mySessionName");
* XMLValidator validator = context.createValidator();
*
* *

The validateRoot method is used to validate objects which are mapped to global * elements in a schema and which have a default root element specified in the TopLink * project. The validate method is used to validate all other mapped objects. * * @see org.eclipse.persistence.oxm.XMLContext */ public class XMLValidator { public static final int NONVALIDATING = XMLParser.NONVALIDATING; public static final int SCHEMA_VALIDATION = XMLParser.SCHEMA_VALIDATION; public static final int DTD_VALIDATION = XMLParser.DTD_VALIDATION; private XMLContext xmlContext; private XMLMarshaller marshaller; private ErrorHandler errorHandler; protected XMLValidator(XMLContext xmlContext) { this.xmlContext = xmlContext; this.marshaller = new XMLMarshaller(xmlContext); } /** * Validate the given root object. * @param rootObject A single root object to validate * @return true if this is a valid object, otherwise false */ public boolean validateRoot(Object rootObject) throws XMLMarshalException { if (rootObject == null) { throw XMLMarshalException.nullArgumentException(); } XMLDescriptor xmlDescriptor = (XMLDescriptor)xmlContext.getSession(rootObject).getDescriptor(rootObject); Document document = marshaller.objectToXML(rootObject, xmlDescriptor, false); if (xmlDescriptor.getSchemaReference() == null) { throw XMLMarshalException.schemaReferenceNotSet(xmlDescriptor); } return xmlDescriptor.getSchemaReference().isValid(document, getErrorHandler()); } /** * Validate the given object. * @param object A single object to validate * @return true if this is a valid object, otherwise false */ public boolean validate(Object object) throws XMLMarshalException { if (object == null) { throw XMLMarshalException.nullArgumentException(); } try { // Create a new XML Record using the object's class name (not fully qualified) as the root String name = ((XMLDescriptor)xmlContext.getSession(object).getDescriptor(object)).getDefaultRootElement(); if (name == null) { String qualifiedName = object.getClass().getName(); int idx = qualifiedName.lastIndexOf('.'); name = qualifiedName.substring(idx + 1); } XMLDescriptor descriptor = marshaller.getDescriptor(object); Root root = new Root(); root.setObject(object); root.setLocalName(name); XMLPlatform xmlPlatform = XMLPlatformFactory.getInstance().getXMLPlatform(); Document doc = xmlPlatform.createDocument(); marshaller.marshal(root, doc); return xmlPlatform.validate(doc.getDocumentElement(), descriptor, getErrorHandler()); } catch (XMLPlatformException e) { throw XMLMarshalException.validateException(e); } } /** * Set the error handler to be used during validation * @param handler the error handler to be used during validation */ public void setErrorHandler(ErrorHandler handler) { this.errorHandler = handler; } /** * Get the error handler to be used during validation * @return the error handler associated with this XMLValidator */ public ErrorHandler getErrorHandler() { return errorHandler; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy