use of org.apereo.portal.portlet.container.EventImpl in project uPortal by Jasig.
the class PortletEventCoordinatationService method unmarshall.
protected Event unmarshall(IPortletWindow portletWindow, Event event) {
//TODO make two types of Event impls, one for marshalled data and one for unmarshalled data
String value = (String) event.getValue();
final XMLInputFactory xmlInputFactory = this.xmlUtilities.getXmlInputFactory();
final XMLStreamReader xml;
try {
xml = xmlInputFactory.createXMLStreamReader(new StringReader(value));
} catch (XMLStreamException e) {
throw new IllegalStateException("Failed to create XMLStreamReader for portlet event: " + event, e);
}
// now test if object is jaxb
final EventDefinition eventDefinitionDD = getEventDefintion(portletWindow, event.getQName());
final PortletDefinition portletDefinition = portletWindow.getPlutoPortletWindow().getPortletDefinition();
final PortletApplicationDefinition application = portletDefinition.getApplication();
final String portletApplicationName = application.getName();
final ClassLoader loader;
try {
loader = portletContextService.getClassLoader(portletApplicationName);
} catch (PortletContainerException e) {
throw new IllegalStateException("Failed to get ClassLoader for portlet application: " + portletApplicationName, e);
}
final String eventType = eventDefinitionDD.getValueType();
final Class<? extends Serializable> clazz;
try {
clazz = loader.loadClass(eventType).asSubclass(Serializable.class);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException("Declared event type '" + eventType + "' cannot be found in portlet application: " + portletApplicationName, e);
}
//TODO cache JAXBContext in registered portlet application
final JAXBElement<? extends Serializable> result;
try {
final JAXBContext jc = JAXBContext.newInstance(clazz);
final Unmarshaller unmarshaller = jc.createUnmarshaller();
result = unmarshaller.unmarshal(xml, clazz);
} catch (JAXBException e) {
throw new IllegalArgumentException("Cannot create JAXBContext for event type '" + eventType + "' from portlet application: " + portletApplicationName, e);
}
return new EventImpl(event.getQName(), result.getValue());
}
Aggregations