Juan Hernandez has uploaded a new change for review. Change subject: restapi: Use context classloader from YAML ......................................................................
restapi: Use context classloader from YAML The YAML library that we use to build load the RSDL metadata assumes that it can load classes using from its own class loader, and this is incorrect, specially now the the library is loaded from a JBoss module. The correct way to load classes is to use the context class loader, so it will work regardless of where in the application the classes are located. Change-Id: Ie86d591a0ce71b9984fa9c76ee42de67dce2ae4e Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com> --- M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/rsdl/RsdlBuilder.java M backend/manager/modules/restapi/webapp/pom.xml A backend/manager/modules/restapi/webapp/src/main/resources/META-INF/MANIFEST.MF 3 files changed, 13 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/90/12390/1 diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/rsdl/RsdlBuilder.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/rsdl/RsdlBuilder.java index 70b5129..148e417 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/rsdl/RsdlBuilder.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/rsdl/RsdlBuilder.java @@ -59,6 +59,8 @@ import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.constructor.Constructor; +import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor; public class RsdlBuilder { @@ -95,7 +97,8 @@ try { InputStream stream = FileUtils.get(RESOURCES_PACKAGE, PARAMS_METADATA); if (stream != null) { - Object result = new Yaml().load(stream); + Constructor constructor = new CustomClassLoaderConstructor(Thread.currentThread().getContextClassLoader()); + Object result = new Yaml(constructor).load(stream); for (Action action : ((MetaData)result).getActions()) { parametersMetaData.put(action.getName(), action); } diff --git a/backend/manager/modules/restapi/webapp/pom.xml b/backend/manager/modules/restapi/webapp/pom.xml index 108e52b..384ce2b 100644 --- a/backend/manager/modules/restapi/webapp/pom.xml +++ b/backend/manager/modules/restapi/webapp/pom.xml @@ -34,6 +34,13 @@ <artifactId>maven-war-plugin</artifactId> <configuration> + <!-- Add a the manifest that contains the required + dependencies for JBoss modules: --> + <archive> + <addMavenDescriptor>false</addMavenDescriptor> + <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> + </archive> + <!-- Don't include any of the external dependencies, as they are already included as references in the manifest (note that the web.xml file is included regardless of this configuration): --> diff --git a/backend/manager/modules/restapi/webapp/src/main/resources/META-INF/MANIFEST.MF b/backend/manager/modules/restapi/webapp/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 0000000..24d1ddb --- /dev/null +++ b/backend/manager/modules/restapi/webapp/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Dependencies: org.yaml.snakeyaml -- To view, visit http://gerrit.ovirt.org/12390 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie86d591a0ce71b9984fa9c76ee42de67dce2ae4e Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches