Skip to content

Commit

Permalink
BZ-1067418 - Class loader problems using remote client - further jaxb…
Browse files Browse the repository at this point in the history
… enhancements
  • Loading branch information
mswiderski committed Mar 3, 2014
1 parent f3840aa commit 94e2456
Showing 1 changed file with 61 additions and 12 deletions.
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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<Class<?>> classesForSerialization = new HashSet<Class<?>>();
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);

}
}

Expand All @@ -95,8 +148,7 @@ public JAXBContext getContext() {
return contexts.get(deploymentId);
}

Set<Class<?>> classesForSerialization = new HashSet<Class<?>>();
classesForSerialization.addAll(JaxbSerializationProvider.PRIMITIVE_ARRAY_CLASS_SET);


if( deploymentId != null ) {
// retrieve class list from kjar
Expand All @@ -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()]);
Expand All @@ -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) {
Expand Down

0 comments on commit 94e2456

Please sign in to comment.