| /* |
| * 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.mappings; |
| |
| import java.io.BufferedReader; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.InputStreamReader; |
| import java.io.StringWriter; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| |
| import org.eclipse.persistence.internal.oxm.record.namespaces.MapNamespacePrefixMapper; |
| import org.eclipse.persistence.internal.oxm.record.namespaces.PrefixMapperNamespaceResolver; |
| import org.eclipse.persistence.oxm.MediaType; |
| import org.eclipse.persistence.oxm.NamespacePrefixMapper; |
| import org.eclipse.persistence.oxm.NamespaceResolver; |
| import org.eclipse.persistence.oxm.XMLRoot; |
| import org.xml.sax.InputSource; |
| |
| public abstract class XMLWithJSONMappingTestCases extends XMLMappingTestCases{ |
| private String controlJSONLocation; |
| private String controlWriteJSONLocation; |
| |
| |
| public XMLWithJSONMappingTestCases(String name) throws Exception { |
| super(name); |
| } |
| |
| public void setControlJSON(String location) { |
| this.controlJSONLocation = location; |
| } |
| |
| public void setControlJSONWrite(String location) { |
| this.controlWriteJSONLocation = location; |
| } |
| |
| protected String getJSONWriteControlLocation() { |
| if(controlWriteJSONLocation != null){ |
| return controlWriteJSONLocation; |
| } |
| return controlJSONLocation; |
| } |
| |
| protected boolean getNamespaceAware(){ |
| return false; |
| } |
| |
| protected String getAttributePrefix(){ |
| return null; |
| } |
| protected Map<String, String> getNamespaces(){ |
| return null; |
| } |
| |
| protected Map<String, String> getAdditionalNamsespaces() { |
| return new HashMap<String, String>(); |
| } |
| |
| public void testJSONUnmarshalFromInputSource() throws Exception { |
| |
| if(isUnmarshalTest() && !(platform.name().equals(PLATFORM_DOC_PRES) || platform.name().equals(PLATFORM_DOM))){ |
| |
| InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(controlJSONLocation); |
| InputSource inputSource = new InputSource(inputStream); |
| xmlUnmarshaller.setMediaType(MediaType.APPLICATION_JSON); |
| PrefixMapperNamespaceResolver nr = null; |
| if(getNamespaces() != null){ |
| NamespacePrefixMapper mapper = new MapNamespacePrefixMapper(getNamespaces()); |
| nr = new PrefixMapperNamespaceResolver(mapper, null); |
| xmlUnmarshaller.setNamespaceResolver(nr); |
| } |
| Object testObject = xmlUnmarshaller.unmarshal(inputSource); |
| |
| inputStream.close(); |
| |
| if ((getJSONReadControlObject() instanceof XMLRoot) && (testObject instanceof XMLRoot)) { |
| XMLRoot controlObj = (XMLRoot)getReadControlObject(); |
| XMLRoot testObj = (XMLRoot)testObject; |
| compareXMLRootObjects(controlObj, testObj); |
| } else { |
| assertEquals(getJSONReadControlObject(), testObject); |
| } |
| |
| } |
| } |
| |
| public Object getJSONReadControlObject(){ |
| return getReadControlObject(); |
| } |
| |
| public void testJSONMarshalToOutputStream() throws Exception{ |
| if(!(platform.name().equals(PLATFORM_DOC_PRES) || platform.name().equals(PLATFORM_DOM))){ |
| |
| xmlMarshaller.setMediaType(MediaType.APPLICATION_JSON); |
| if(getNamespaces() != null){ |
| xmlMarshaller.setNamespacePrefixMapper(new MapNamespacePrefixMapper(getNamespaces())); |
| } |
| ByteArrayOutputStream os = new ByteArrayOutputStream(); |
| try { |
| xmlMarshaller.marshal(getWriteControlObject(), os); |
| } catch(Exception e) { |
| assertMarshalException(e); |
| return; |
| } |
| if(expectsMarshalException){ |
| fail("An exception should have occurred but didn't."); |
| return; |
| } |
| compareStrings("testJSONMarshalToOutputStream", new String(os.toByteArray())); |
| os.close(); |
| } |
| } |
| |
| public void testJSONMarshalToOutputStream_FORMATTED() throws Exception{ |
| if(!(platform.name().equals(PLATFORM_DOC_PRES) || platform.name().equals(PLATFORM_DOM))){ |
| xmlMarshaller.setMediaType(MediaType.APPLICATION_JSON); |
| if(getNamespaces() != null){ |
| xmlMarshaller.setNamespacePrefixMapper(new MapNamespacePrefixMapper(getNamespaces())); |
| } |
| xmlMarshaller.setFormattedOutput(true); |
| ByteArrayOutputStream os = new ByteArrayOutputStream(); |
| try { |
| xmlMarshaller.marshal(getWriteControlObject(), os); |
| } catch(Exception e) { |
| assertMarshalException(e); |
| return; |
| } |
| if(expectsMarshalException){ |
| fail("An exception should have occurred but didn't."); |
| return; |
| } |
| |
| compareStrings("testJSONMarshalToOutputStream", new String(os.toByteArray())); |
| os.close(); |
| } |
| } |
| |
| public void testJSONMarshalToStringWriter() throws Exception{ |
| if(!(platform.name().equals(PLATFORM_DOC_PRES) || platform.name().equals(PLATFORM_DOM))){ |
| |
| xmlMarshaller.setMediaType(MediaType.APPLICATION_JSON); |
| if(getNamespaces() != null){ |
| xmlMarshaller.setNamespacePrefixMapper(new MapNamespacePrefixMapper(getNamespaces())); |
| } |
| StringWriter sw = new StringWriter(); |
| try { |
| xmlMarshaller.marshal(getWriteControlObject(), sw); |
| } catch(Exception e) { |
| assertMarshalException(e); |
| return; |
| } |
| if(expectsMarshalException){ |
| fail("An exception should have occurred but didn't."); |
| return; |
| } |
| |
| compareStrings("**testJSONMarshalToStringWriter**", sw.toString()); |
| } |
| } |
| |
| public void testJSONMarshalToStringWriter_FORMATTED() throws Exception{ |
| if(!(platform.name().equals(PLATFORM_DOC_PRES) || platform.name().equals(PLATFORM_DOM))){ |
| |
| xmlMarshaller.setMediaType(MediaType.APPLICATION_JSON); |
| if(getNamespaces() != null){ |
| xmlMarshaller.setNamespacePrefixMapper(new MapNamespacePrefixMapper(getNamespaces())); |
| } |
| xmlMarshaller.setFormattedOutput(true); |
| |
| StringWriter sw = new StringWriter(); |
| try { |
| xmlMarshaller.marshal(getWriteControlObject(), sw); |
| } catch(Exception e) { |
| assertMarshalException(e); |
| return; |
| } |
| if(expectsMarshalException){ |
| fail("An exception should have occurred but didn't."); |
| return; |
| } |
| |
| compareStrings("**testJSONMarshalToStringWriter**", sw.toString()); |
| } |
| } |
| |
| private void compareStrings(String test, String testString) { |
| log(test); |
| log("Expected (With All Whitespace Removed):"); |
| String expectedString = getJSONControlString(getJSONWriteControlLocation()).replaceAll("[ \b\t\n\r]", ""); |
| log(expectedString); |
| log("\nActual (With All Whitespace Removed):"); |
| testString = testString.replaceAll("[ \b\t\n\r]", ""); |
| log(testString); |
| assertEquals(expectedString, testString); |
| } |
| |
| protected String getJSONControlString(String fileName){ |
| StringBuffer sb = new StringBuffer(); |
| try { |
| InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName); |
| InputStreamReader inputStreamReader = new InputStreamReader(inputStream); |
| BufferedReader bufferedReader = new BufferedReader(inputStreamReader); |
| String str; |
| while (bufferedReader.ready()) { |
| sb.append(bufferedReader.readLine()); |
| } |
| bufferedReader.close(); |
| inputStreamReader.close(); |
| inputStream.close(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| return sb.toString(); |
| } |
| } |