in taverna-wsdl-activity/src/main/java/org/apache/taverna/activities/wsdl/WSDLActivityDescriptorChecker.java [70:128]
public VisitReport visit(InputPortTypeDescriptorActivity o,
List<Object> ancestry) {
List<VisitReport> reports = new ArrayList<VisitReport>();
try {
Map<String, TypeDescriptor> typeMap = o.getTypeDescriptorsForInputPorts();
Processor p = (Processor) VisitReport.findAncestor(ancestry, Processor.class);
Dataflow d = (Dataflow) VisitReport.findAncestor(ancestry, Dataflow.class);
for (Entry<String, TypeDescriptor> entry : typeMap.entrySet()) {
TypeDescriptor descriptor = entry.getValue();
if (!descriptor.getMimeType().contains("'text/xml'")) {
continue;
}
if (!((descriptor instanceof ArrayTypeDescriptor) || (descriptor instanceof ComplexTypeDescriptor))) {
continue;
}
// Find the processor port, if any that corresponds to the activity port
ActivityInputPort aip = Tools.getActivityInputPort((Activity) o, entry.getKey());
if (aip == null) {
continue;
}
ProcessorInputPort pip = Tools.getProcessorInputPort(p, (Activity<?>) o, aip);
if (pip == null) {
continue;
}
for (Datalink dl : d.getLinks()) {
if (dl.getSink().equals(pip)) {
Port source = dl.getSource();
Set<VisitReport> subReports = checkSource(source, d, (Activity) o, aip);
for (VisitReport vr : subReports) {
vr.setProperty("activity", o);
vr.setProperty("sinkPort", pip);
}
reports.addAll(subReports);
}
}
}
} catch (UnknownOperationException e) {
logger.error("Problem getting type descriptors for activity", e);
} catch (IOException e) {
logger.error("Problem getting type descriptors for activity", e);
} catch (NullPointerException e) {
logger.error("Problem getting type desciptors for activity", e);
}
if (reports.isEmpty()) {
return null;
}
if (reports.size() == 1) {
return reports.get(0);
}
else {
return new VisitReport(HealthCheck.getInstance(), o, "Collation", HealthCheck.DEFAULT_VALUE, reports);
}
}