org.eclipse.persistence.jpa.rs.DynamicRestClassLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 2019, 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
*/
package org.eclipse.persistence.jpa.rs;
import org.eclipse.persistence.dynamic.DynamicClassLoader;
import org.eclipse.persistence.dynamic.DynamicClassWriter;
import org.eclipse.persistence.internal.jpa.metadata.MetadataDynamicClassWriter;
import org.eclipse.persistence.internal.jpa.rs.weaving.RestAdapterClassWriter;
import org.eclipse.persistence.internal.jpa.rs.weaving.RestCollectionAdapterClassWriter;
import org.eclipse.persistence.internal.jpa.rs.weaving.RestDynamicClassWriter;
import org.eclipse.persistence.internal.jpa.rs.weaving.RestReferenceAdapterV2ClassWriter;
/**
* This custom ClassLoader provides support for dynamically generating classes
* within an JPA-RS EclipseLink application using byte codes created using a
* {@link DynamicClassWriter}. A DynamicClassLoader requires a parent or
* delegate class-loader which is provided to the constructor. This delegate
* class loader handles the lookup and storage of all created classes.
*
* @since EclipseLink 3.0
*/
public class DynamicRestClassLoader extends DynamicClassLoader {
public DynamicRestClassLoader(ClassLoader delegate) {
super(delegate);
}
public DynamicRestClassLoader(ClassLoader delegate, DynamicClassWriter writer) {
super(delegate, writer);
}
@Override
public void createDynamicAdapter(String className) {
// Reference adapter for JPARS version < 2.0
RestAdapterClassWriter restAdapter = new RestAdapterClassWriter(className);
addClass(restAdapter.getClassName(), restAdapter);
}
@Override
public void createDynamicCollectionAdapter(String className) {
// Collection adapter for JPARS version >= 2.0
RestCollectionAdapterClassWriter restCollectionAdapter = new RestCollectionAdapterClassWriter(className);
addClass(restCollectionAdapter.getClassName(), restCollectionAdapter);
}
@Override
public void createDynamicReferenceAdapter(String className) {
// Reference adapter for JPARS version >= 2.0
RestReferenceAdapterV2ClassWriter restReferenceAdapterV2 = new RestReferenceAdapterV2ClassWriter(className);
addClass(restReferenceAdapterV2.getClassName(), restReferenceAdapterV2);
}
@Override
public Class> createDynamicClass(String className, DynamicClassWriter writer) {
DynamicClassWriter w = writer;
if (MetadataDynamicClassWriter.class.isAssignableFrom(writer.getClass())) {
w = new RestDynamicClassWriter(MetadataDynamicClassWriter.class.cast(writer));
}
return super.createDynamicClass(className, w);
}
}