blob: 7817e24e697ed032f97e1f2fa7cd8d3336c2a2d9 [file] [log] [blame]
/*
* Copyright (c) 2015, 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:
// Oracle - initial API and implementation
package org.eclipse.persistence.testing.moxy.unit.jaxb.compiler;
import java.io.InputStream;
import java.io.StringWriter;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.internal.jaxb.JaxbClassLoader;
import org.eclipse.persistence.internal.oxm.schema.SchemaModelProject;
import org.eclipse.persistence.internal.oxm.schema.model.Schema;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import org.eclipse.persistence.jaxb.JAXBContextProperties;
import org.eclipse.persistence.jaxb.compiler.Generator;
import org.eclipse.persistence.jaxb.compiler.Property;
import org.eclipse.persistence.jaxb.compiler.TypeInfo;
import org.eclipse.persistence.jaxb.compiler.builder.TransformerPropertyBuilder;
import org.eclipse.persistence.jaxb.javamodel.*;
import org.eclipse.persistence.jaxb.javamodel.reflection.JavaModelImpl;
import org.eclipse.persistence.jaxb.javamodel.reflection.JavaModelInputImpl;
import org.eclipse.persistence.jaxb.xmlmodel.XmlBindings;
import org.eclipse.persistence.oxm.XMLContext;
import org.eclipse.persistence.oxm.XMLMarshaller;
import org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.xmltransformation.Employee;
import org.eclipse.persistence.testing.moxy.unit.jaxb.compiler.builder.ChildSchemaGenerator;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
/**
* Tests SchemaGenerator methods.
*/
public class SchemaGeneratorTestCase {
private static final Class<?>[] DOMAIN_CLASSES = new Class<?>[]{Employee.class};
private static final String EMPLOYEE_CLASS_NAME = Employee.class.getTypeName();
private static final String BINDINGS_DOC = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/eclipselink-oxm.xml";
private static final String XML_TRANSFORMATION_PROPERTY_NAME = "normalHours";
@Test
public void getTransformerPropertyBuilder() {
JavaModelInputImpl jModelInput = new JavaModelInputImpl(DOMAIN_CLASSES, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), DOMAIN_CLASSES)));
Helper helper = new Helper(jModelInput.getJavaModel());
Generator generator = new Generator(jModelInput);
TypeInfo typeInfo = generator.getAnnotationsProcessor().getTypeInfos().get(EMPLOYEE_CLASS_NAME);
Property normalHoursProperty = typeInfo.getProperties().get(XML_TRANSFORMATION_PROPERTY_NAME);
ChildSchemaGenerator childSchemaGenerator = new ChildSchemaGenerator(helper);
TransformerPropertyBuilder transformerPropertyBuilder = childSchemaGenerator.getTransformerPropertyBuilder(normalHoursProperty, typeInfo);
assertNotNull(transformerPropertyBuilder);
}
@Test
public void addTransformerToSchema() {
InputStream inputStream = ClassLoader.getSystemResourceAsStream(BINDINGS_DOC);
HashMap<String, Source> metadataSourceMap = new HashMap<>();
metadataSourceMap.put("org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.xmltransformation", new StreamSource(inputStream));
Map<String, Object> properties = new HashMap<>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
Map<String, XmlBindings> bindings = JAXBContextFactory.getXmlBindingsFromProperties(properties, Thread.currentThread().getContextClassLoader());
JavaModelInputImpl jModelInput = new JavaModelInputImpl(DOMAIN_CLASSES, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), DOMAIN_CLASSES)));
Helper helper = new Helper(jModelInput.getJavaModel());
Generator generator = new Generator(jModelInput, bindings, Thread.currentThread().getContextClassLoader(), "", false);
TypeInfo typeInfo = generator.getAnnotationsProcessor().getTypeInfos().get(EMPLOYEE_CLASS_NAME);
Property normalHoursProperty = typeInfo.getProperties().get(XML_TRANSFORMATION_PROPERTY_NAME);
ChildSchemaGenerator childSchemaGenerator = new ChildSchemaGenerator(helper);
TransformerPropertyBuilder transformerPropertyBuilder = childSchemaGenerator.getTransformerPropertyBuilder(normalHoursProperty, typeInfo);
java.util.List<Property> props = transformerPropertyBuilder.buildProperties();
// Indirect call of org.eclipse.persistence.jaxb.compiler.SchemaGenerator.addTransformerToSchema(.....) method.
List<Schema> schemas = (List)generator.generateSchema();
XMLContext context = new XMLContext(new SchemaModelProject());
XMLMarshaller marshaller = context.createMarshaller();
final StringWriter stringWriter = new StringWriter();
marshaller.marshal(schemas.get(0), stringWriter);
String outputSchema = stringWriter.toString();
// Verify that XML-Transformation property is added to XML schema
for (Property property: props) {
assertTrue(outputSchema.contains(property.getPropertyName()));
}
}
@Test
public void javaxXmlRpcStringHolderTest() {
//Prepare Helper
JavaModelInputImpl jModelInput = new JavaModelInputImpl(DOMAIN_CLASSES, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), DOMAIN_CLASSES)));
Helper helper = new Helper(jModelInput.getJavaModel());
assertFalse(helper.isBuiltInJavaType(new JavaClass() { @Override
public String getRawName() { return "javax.xml.rpc.StringHolder";}
@Override
public JavaClassInstanceOf instanceOf() { return null; }
@Override
public boolean isSynthetic() { return false; }
@Override
public Collection<JavaClass> getActualTypeArguments() { return null; }
@Override
public JavaClass getComponentType() { return null; }
@Override
public String getQualifiedName() { return null; }
@Override
public boolean hasActualTypeArguments() { return false; }
@Override
public Collection<JavaClass> getDeclaredClasses() { return null; }
@Override
public JavaField getDeclaredField(String arg0) { return null; }
@Override
public Collection<JavaField> getDeclaredFields() { return null; }
@Override
public JavaMethod getDeclaredMethod(String arg0, JavaClass[] arg1) { return null; }
@Override
public Collection<JavaMethod> getDeclaredMethods() { return null; }
@Override
public JavaMethod getMethod(String arg0, JavaClass[] arg1) { return null; }
@Override
public Collection<JavaMethod> getMethods() { return null ;}
@Override
public JavaConstructor getConstructor(JavaClass[] parameterTypes) { return null; }
@Override
public Collection<JavaConstructor> getConstructors() { return null; }
@Override
public JavaConstructor getDeclaredConstructor(JavaClass[] parameterTypes) { return null; }
@Override
public Collection<JavaConstructor> getDeclaredConstructors() { return null; }
@Override
public int getModifiers() { return 0; }
@Override
public String getName() { return null; }
@Override
public JavaPackage getPackage() { return null; }
@Override
public String getPackageName() { return null; }
@Override
public JavaClass getSuperclass() { return null; }
@Override
public Type[] getGenericInterfaces() { return null; }
@Override
public Type getGenericSuperclass() { return null; }
@Override
public boolean isAbstract() { return false; }
@Override
public boolean isAnnotation() { return false; }
@Override
public boolean isArray() { return false; }
@Override
public boolean isAssignableFrom(JavaClass arg0) { return false; }
@Override
public boolean isEnum() { return false; }
@Override
public boolean isFinal() { return false; }
@Override
public boolean isInterface() { return false; }
@Override
public boolean isMemberClass() { return false; }
@Override
public boolean isPrimitive() { return false; }
@Override
public boolean isPrivate() { return false; }
@Override
public boolean isProtected() { return false; }
@Override
public boolean isPublic() { return false; }
@Override
public boolean isStatic() { return false; }
@Override
public JavaAnnotation getAnnotation(JavaClass arg0) { return null; }
@Override
public Collection getAnnotations() { return null; }
@Override
public JavaAnnotation getDeclaredAnnotation(JavaClass arg0) { return null; }
@Override
public Collection getDeclaredAnnotations() { return null; }
}));
}
}