| /* |
| * 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.testing.oxm.xmlmarshaller; |
| |
| import java.io.StringWriter; |
| import java.util.Vector; |
| import junit.textui.TestRunner; |
| import org.eclipse.persistence.exceptions.DescriptorException; |
| import org.eclipse.persistence.exceptions.IntegrityException; |
| import org.eclipse.persistence.exceptions.ValidationException; |
| import org.eclipse.persistence.mappings.DirectToFieldMapping; |
| import org.eclipse.persistence.oxm.XMLDescriptor; |
| import org.eclipse.persistence.eis.mappings.EISDirectMapping; |
| import org.eclipse.persistence.oxm.XMLMarshaller; |
| import org.eclipse.persistence.oxm.XMLUnmarshaller; |
| import org.eclipse.persistence.oxm.XMLContext; |
| import org.eclipse.persistence.exceptions.XMLMarshalException; |
| import org.eclipse.persistence.sessions.Project; |
| import org.eclipse.persistence.testing.oxm.OXTestCase; |
| |
| public class XMLMarshallerCreateTestCases extends OXTestCase { |
| private static String SESSION_NAME = "XMLMarshallerTestSession"; |
| private static String SESSION_NAME2 = "XMLMarshallerTestSession2"; |
| |
| public XMLMarshallerCreateTestCases(String name) { |
| super(name); |
| } |
| |
| public static void main(String[] args) { |
| String[] arguments = { "-c", "org.eclipse.persistence.testing.oxm.xmlmarshaller.XMLMarshallerCreateTestCases" }; |
| TestRunner.main(arguments); |
| } |
| |
| /** |
| * Create an XMLMarshaller with a session name that does not exist in the sessions.xml file |
| * An XMLValidation exception should be thrown from the XMLMarshaller constructor |
| */ |
| public void testInvalidSessionName() { |
| String sessionName = "invalidSessionName"; |
| |
| try { |
| XMLContext context = new XMLContext(sessionName); |
| } catch (ValidationException exception) { |
| assertTrue("A session not found exception should have been caught but wasn't.", exception.getErrorCode() == ValidationException.NO_SESSION_FOUND); |
| return; |
| } catch (Exception e) { |
| assertTrue("A session not found exception should have been caught but wasn't.", false); |
| } |
| assertTrue("A session not found exception should have been caught but wasn't.", false); |
| |
| } |
| |
| public void testInvalidMappingTypeEIS() { |
| Project project = new Project(); |
| XMLDescriptor descriptor = new XMLDescriptor(); |
| descriptor.setJavaClass(Car.class); |
| descriptor.setDefaultRootElement("test"); |
| |
| EISDirectMapping mapping = new EISDirectMapping(); |
| mapping.setAttributeName("license"); |
| mapping.setXPath("license"); |
| descriptor.addMapping(mapping); |
| project.addDescriptor(descriptor); |
| try { |
| XMLContext context = new XMLContext(project); |
| } catch (DescriptorException exception) { |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", exception.getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE); |
| return; |
| } catch (IntegrityException exception) { |
| Vector exceptions = exception.getIntegrityChecker().getCaughtExceptions(); |
| assertTrue("Too many exceptions were found...should have been 1.", exceptions.size() == 1); |
| Exception e = (Exception)exceptions.elementAt(0); |
| assertTrue("A DescriptorException should have been caught but wasn't.", e.getClass() == DescriptorException.class); |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", ((DescriptorException)e).getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE); |
| return; |
| } |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", false); |
| } |
| |
| public void testInvalidMappingTypeRelational() { |
| Project project = new Project(); |
| XMLDescriptor descriptor = new XMLDescriptor(); |
| descriptor.setJavaClass(Car.class); |
| descriptor.setDefaultRootElement("test"); |
| |
| DirectToFieldMapping mapping = new DirectToFieldMapping(); |
| mapping.setAttributeName("license"); |
| mapping.setFieldName("license"); |
| descriptor.addMapping(mapping); |
| project.addDescriptor(descriptor); |
| try { |
| XMLContext context = new XMLContext(project); |
| } catch (DescriptorException exception) { |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", exception.getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE); |
| return; |
| } catch (IntegrityException exception) { |
| Vector exceptions = exception.getIntegrityChecker().getCaughtExceptions(); |
| assertTrue("Too many exceptions were found...should have been 1.", exceptions.size() == 1); |
| Exception e = (Exception)exceptions.elementAt(0); |
| assertTrue("A DescriptorException should have been caught but wasn't.", e.getClass() == DescriptorException.class); |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", ((DescriptorException)e).getErrorCode() == DescriptorException.INVALID_MAPPING_TYPE); |
| return; |
| } |
| assertTrue("An invalid mapping type exception should have been caught but wasn't.", false); |
| } |
| |
| /** |
| * Create an XMLMarshaller with 2 session names separated by a semi-colon |
| * Ensure that objects from each of the 2 projects/sessions can be marshalled |
| */ |
| public void testMultipleSessionNames() { |
| String sessionName = SESSION_NAME + ":" + SESSION_NAME2; |
| |
| XMLContext context = new XMLContext(sessionName); |
| |
| assertNotNull(context); |
| |
| XMLMarshaller marshaller = context.createMarshaller(); |
| StringWriter writer1 = new StringWriter(); |
| marshaller.marshal(new Employee(), writer1); |
| |
| StringWriter writer2 = new StringWriter(); |
| marshaller.marshal(new Car(), writer2); |
| |
| } |
| |
| /** |
| * Create an XMLMarshaller with 2 session names separated by an invalid delimiter |
| * only semi-colons are valid delimiters. |
| * The XMLMarshaller constructor should throw an XMLValidation exception |
| */ |
| public void testMultipleSessionNamesInvalidDelimiter() { |
| String sessionName = SESSION_NAME + ";" + SESSION_NAME2; |
| try { |
| XMLContext context = new XMLContext(sessionName); |
| } catch (ValidationException exception) { |
| assertTrue("A session not found exception should have been caught but wasn't.", exception.getErrorCode() == ValidationException.NO_SESSION_FOUND); |
| return; |
| } catch (Exception e) { |
| assertTrue("A session not found exception should have been caught but wasn't.", false); |
| } |
| assertTrue("A session not found exception should have been caught but wasn't", false); |
| } |
| |
| /** |
| * Create a new XMLMarshaller with a project instead of a session. |
| * Make sure that an object can be marshalled without exception. |
| */ |
| public void testProject() { |
| XMLMarshaller marshaller = null; |
| XMLContext context = getXMLContext(new XMLMarshallerTestProject()); |
| |
| assertNotNull(context); |
| |
| marshaller = context.createMarshaller(); |
| |
| StringWriter writer1 = new StringWriter(); |
| marshaller.marshal(new Employee(), writer1); |
| |
| } |
| public void testSessionWithEventListener() |
| { |
| XMLMarshallerEventListener.eventTriggered = false; |
| XMLContext context = new XMLContext("XMLMarshallerEventsTestSession"); |
| assertTrue("The postLogin SessionEvent was not triggered", XMLMarshallerEventListener.eventTriggered); |
| |
| } |
| } |