| /* |
| * Copyright (c) 2012, 2021 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: |
| // Matt MacIvor - 2.4 - Initial Implementation |
| package org.eclipse.persistence.testing.jaxb.events; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.InputStream; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import jakarta.xml.bind.JAXBContext; |
| import jakarta.xml.bind.Marshaller; |
| import javax.xml.transform.Source; |
| import javax.xml.transform.stream.StreamSource; |
| |
| import org.eclipse.persistence.jaxb.JAXBContextFactory; |
| import org.eclipse.persistence.jaxb.JAXBContextProperties; |
| import org.eclipse.persistence.jaxb.MarshallerProperties; |
| import org.eclipse.persistence.oxm.XMLDescriptor; |
| import org.eclipse.persistence.oxm.XMLRoot; |
| import org.w3c.dom.Document; |
| |
| public class ExternalMetadataTestCases extends RootWithCompositeObjectTestCases { |
| |
| public ExternalMetadataTestCases(String name) throws Exception { |
| super(name); |
| } |
| |
| @Override |
| public Map getProperties() { |
| InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/events/employee-oxm.xml"); |
| |
| HashMap<String, Source> metadataSourceMap = new HashMap<String, Source>(); |
| metadataSourceMap.put("org.eclipse.persistence.testing.jaxb.events", new StreamSource(inputStream)); |
| Map<String, Map<String, Source>> properties = new HashMap<String, Map<String, Source>>(); |
| properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap); |
| |
| return properties; |
| } |
| |
| @Override |
| public void testObjectToOutputStream() throws Exception { |
| Object objectToWrite = getWriteControlObject(); |
| ByteArrayOutputStream stream = new ByteArrayOutputStream(); |
| XMLDescriptor desc = null; |
| if (objectToWrite instanceof XMLRoot) { |
| desc = (XMLDescriptor)xmlContext.getSession(0).getProject().getDescriptor(((XMLRoot)objectToWrite).getObject().getClass()); |
| } else { |
| desc = (XMLDescriptor)xmlContext.getSession(0).getProject().getDescriptor(objectToWrite.getClass()); |
| } |
| |
| int sizeBefore = getNamespaceResolverSize(desc); |
| jaxbMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/xml"); |
| jaxbMarshaller.marshal(objectToWrite, stream); |
| |
| int sizeAfter = getNamespaceResolverSize(desc); |
| |
| assertEquals(sizeBefore, sizeAfter); |
| |
| InputStream is = new ByteArrayInputStream(stream.toByteArray()); |
| Document testDocument = parser.parse(is); |
| stream.close(); |
| is.close(); |
| |
| objectToXMLDocumentTest(testDocument); |
| |
| if(getProperties() != null){ |
| log("************test with JSON bindings*********"); |
| ByteArrayOutputStream stream2 = new ByteArrayOutputStream(); |
| JAXBContext jaxbContextFromJSONBindings = createJaxbContextFromJSONBindings(); |
| Marshaller jaxbMarshallerFromJSONBindings = jaxbContextFromJSONBindings.createMarshaller(); |
| jaxbMarshallerFromJSONBindings.setAttachmentMarshaller(jaxbMarshaller.getAttachmentMarshaller()); |
| |
| |
| jaxbMarshallerFromJSONBindings.setProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, jaxbMarshaller.getProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER)); |
| |
| |
| //before marshalling object again, need to reset it's triggered events |
| ((Employee)objectToWrite).triggeredEvents = new ArrayList(); |
| jaxbMarshallerFromJSONBindings.marshal(objectToWrite, stream2); |
| InputStream is2 = new ByteArrayInputStream(stream2.toByteArray()); |
| Document testDocument2 = parser.parse(is2); |
| stream2.close(); |
| is2.close(); |
| |
| objectToXMLDocumentTest(testDocument2); |
| } |
| } |
| } |
| |
| |