/** {@inheritDoc}*/
public void handleEvent(Event ev, AbstractServiceFactoryBean factory, Object... args) {
switch (ev) {
case INTERFACE_CREATED: {
InterfaceInfo ii = (InterfaceInfo)args[0];
Class<?> cls = (Class<?>)args[1];
WSDLDocumentation doc = cls.getAnnotation(WSDLDocumentation.class);
if (doc != null) {
addDocumentation(ii, WSDLDocumentation.Placement.PORT_TYPE, doc);
}
WSDLDocumentationCollection col = cls.getAnnotation(WSDLDocumentationCollection.class);
if (col != null) {
addDocumentation(ii, WSDLDocumentation.Placement.PORT_TYPE, col.value());
}
setDataBinding(factory, cls.getAnnotation(DataBinding.class));
break;
}
case ENDPOINT_SELECTED: {
Class<?> implCls = args.length > 3 ? (Class<?>)args[3] : null;
Class<?> cls = (Class<?>)args[2];
Endpoint ep = (Endpoint)args[1];
Bus bus = factory.getBus();
// To avoid the NPE
if (cls == null) {
return;
}
addSchemaValidationSupport(ep, cls.getAnnotation(SchemaValidation.class));
addFastInfosetSupport(ep, cls.getAnnotation(FastInfoset.class));
addGZipSupport(ep, bus, cls.getAnnotation(GZIP.class));
addLoggingSupport(ep, bus, cls.getAnnotation(Logging.class));
addEndpointProperties(ep, bus, cls.getAnnotation(EndpointProperty.class));
EndpointProperties props = cls.getAnnotation(EndpointProperties.class);
if (props != null) {
addEndpointProperties(ep, bus, props.value());
}
// To avoid the NPE
if (implCls == null || implCls == cls) {
return;
}
WSDLDocumentation doc = implCls.getAnnotation(WSDLDocumentation.class);
if (doc != null) {
addDocumentation(ep, WSDLDocumentation.Placement.SERVICE, doc);
}
WSDLDocumentationCollection col = implCls.getAnnotation(WSDLDocumentationCollection.class);
if (col != null) {
addDocumentation(ep, WSDLDocumentation.Placement.SERVICE, col.value());
}
InterfaceInfo i = ep.getEndpointInfo().getInterface();
List<WSDLDocumentation> docs = CastUtils.cast((List<?>)i.removeProperty(EXTRA_DOCUMENTATION));
if (docs != null) {
addDocumentation(ep,
WSDLDocumentation.Placement.SERVICE,
docs.toArray(new WSDLDocumentation[docs.size()]));
}