diff --git a/kie-remote/kie-services-remote/src/main/java/org/kie/services/remote/rest/jaxb/DynamicJAXBContext.java b/kie-remote/kie-services-remote/src/main/java/org/kie/services/remote/rest/jaxb/DynamicJAXBContext.java index 29d0b6be72..58058bf035 100644 --- a/kie-remote/kie-services-remote/src/main/java/org/kie/services/remote/rest/jaxb/DynamicJAXBContext.java +++ b/kie-remote/kie-services-remote/src/main/java/org/kie/services/remote/rest/jaxb/DynamicJAXBContext.java @@ -21,6 +21,27 @@ import org.kie.services.client.serialization.JaxbSerializationProvider; import org.kie.services.client.serialization.jaxb.impl.JaxbCommandsRequest; import org.kie.services.client.serialization.jaxb.impl.JaxbCommandsResponse; +import org.kie.services.client.serialization.jaxb.impl.JaxbLongListResponse; +import org.kie.services.client.serialization.jaxb.impl.JaxbOtherResponse; +import org.kie.services.client.serialization.jaxb.impl.JaxbPrimitiveResponse; +import org.kie.services.client.serialization.jaxb.impl.JaxbVariablesResponse; +import org.kie.services.client.serialization.jaxb.impl.audit.JaxbHistoryLogList; +import org.kie.services.client.serialization.jaxb.impl.audit.JaxbNodeInstanceLog; +import org.kie.services.client.serialization.jaxb.impl.audit.JaxbProcessInstanceLog; +import org.kie.services.client.serialization.jaxb.impl.audit.JaxbVariableInstanceLog; +import org.kie.services.client.serialization.jaxb.impl.deploy.JaxbDeploymentJobResult; +import org.kie.services.client.serialization.jaxb.impl.deploy.JaxbDeploymentUnit; +import org.kie.services.client.serialization.jaxb.impl.deploy.JaxbDeploymentUnitList; +import org.kie.services.client.serialization.jaxb.impl.process.JaxbProcessInstanceListResponse; +import org.kie.services.client.serialization.jaxb.impl.process.JaxbProcessInstanceResponse; +import org.kie.services.client.serialization.jaxb.impl.process.JaxbProcessInstanceWithVariablesResponse; +import org.kie.services.client.serialization.jaxb.impl.process.JaxbWorkItem; +import org.kie.services.client.serialization.jaxb.impl.task.JaxbContentResponse; +import org.kie.services.client.serialization.jaxb.impl.task.JaxbTaskResponse; +import org.kie.services.client.serialization.jaxb.impl.task.JaxbTaskSummaryListResponse; +import org.kie.services.client.serialization.jaxb.rest.JaxbExceptionResponse; +import org.kie.services.client.serialization.jaxb.rest.JaxbGenericResponse; +import org.kie.services.client.serialization.jaxb.rest.JaxbRequestStatus; import org.kie.services.remote.cdi.DeploymentInfoBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +63,29 @@ public class DynamicJAXBContext extends JAXBContext { public DynamicJAXBContext() { types.add(JaxbCommandsRequest.class); types.add(JaxbCommandsResponse.class); + types.add(JaxbContentResponse.class); + types.add(JaxbTaskResponse.class); + types.add(JaxbTaskSummaryListResponse.class); + types.add(JaxbProcessInstanceListResponse.class); + types.add(JaxbProcessInstanceResponse.class); + types.add(JaxbProcessInstanceWithVariablesResponse.class); + types.add(JaxbWorkItem.class); + types.add(JaxbDeploymentJobResult.class); + types.add(JaxbDeploymentUnit.class); + types.add(JaxbDeploymentUnitList.class); + types.add(JaxbHistoryLogList.class); + types.add(JaxbNodeInstanceLog.class); + types.add(JaxbProcessInstanceLog.class); + types.add(JaxbVariableInstanceLog.class); + types.add(JaxbLongListResponse.class); + + types.add(JaxbOtherResponse.class); + types.add(JaxbPrimitiveResponse.class); + types.add(JaxbVariablesResponse.class); + types.add(JaxbExceptionResponse.class); + types.add(JaxbGenericResponse.class); + types.add(JaxbRequestStatus.class); + } @Override @@ -72,20 +116,29 @@ public Validator createValidator() throws JAXBException { } public void addType(Class type) { - this.types.add(type); + if (!this.types.contains(type)) { + this.types.add(type); + // clear the already known context to ensure all the types will be available for all deployments + this.contexts.clear(); + } } public JAXBContext getContext() { + Set> classesForSerialization = new HashSet>(); + classesForSerialization.addAll(JaxbSerializationProvider.PRIMITIVE_ARRAY_CLASS_SET); + // Add given types to list + classesForSerialization.addAll(types); String deploymentId = getDeploymentId(); if (deploymentId == null) { - logger.error("Unable to find deployment id which results in returning empty JAXBContext"); + logger.debug("Unable to find deployment id which results in returning default JAXBContext"); try { - return JAXBContext.newInstance(); + Class [] types = classesForSerialization.toArray(new Class[classesForSerialization.size()]); + return JAXBContext.newInstance(types); } catch (JAXBException e) { - logger.error( "Unable to create new " + JAXBContext.class.getSimpleName() + " instance.", e); - return null; + throw new IllegalStateException( "Unable to create new " + JAXBContext.class.getSimpleName() + " instance.", e); + } } @@ -95,8 +148,7 @@ public JAXBContext getContext() { return contexts.get(deploymentId); } - Set> classesForSerialization = new HashSet>(); - classesForSerialization.addAll(JaxbSerializationProvider.PRIMITIVE_ARRAY_CLASS_SET); + if( deploymentId != null ) { // retrieve class list from kjar @@ -107,8 +159,7 @@ public JAXBContext getContext() { classesForSerialization.addAll(deploymentClassNames); } - // Add given types to list - classesForSerialization.addAll(types); + // Create JAXBContext instance and return it. Class [] types = classesForSerialization.toArray(new Class[classesForSerialization.size()]); @@ -119,11 +170,9 @@ public JAXBContext getContext() { return context; } catch (JAXBException jaxbe) { - logger.error( "Unable to create new " + JAXBContext.class.getSimpleName() + " instance.", jaxbe); + throw new IllegalStateException( "Unable to create new " + JAXBContext.class.getSimpleName() + " instance.", jaxbe); } } - - return null; } public void removeOnUnDeploy(@Observes @Undeploy DeploymentEvent event) {