Fix for excessively long documentation strings/HTML docstrings in WSDL.
diff --git a/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/WSDLServiceProvider.java b/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/WSDLServiceProvider.java
index 0b9f9fa..ae2a8ca 100644
--- a/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/WSDLServiceProvider.java
+++ b/src/main/java/net/sf/taverna/t2/activities/wsdl/servicedescriptions/WSDLServiceProvider.java
@@ -118,7 +118,7 @@
item.setUse(use);
item.setStyle(style);
item.setURI(wsdl);
- item.setDescription(parser.getOperationDocumentation(name));
+ item.setDescription(shortenDocumentation(parser.getOperationDocumentation(name)));
items.add(item);
} catch (UnknownOperationException e) {
String message = "Encountered an unexpected operation name:"
@@ -152,6 +152,40 @@
}
}
+ /**
+ * Maximum number of characters to show from an operation description
+ * string.
+ */
+ private static final int MAX_LENGTH = 40;
+ /**
+ * Characters that may not appear in an operation description string. The
+ * order matters; more strictly prohibited things should come first.
+ */
+ private static final char[] PROHIBITED_CHARS = new char[] { '\u0000', '\n',
+ '\r', '\f' };
+
+ /**
+ * Create a shortened version of an operation description string.
+ *
+ * @param doc
+ * The string to trim if necessary.
+ * @return The possibly-shortened string. An ellipsis may be added if
+ * trimming has happened earlier.
+ */
+ private String shortenDocumentation(String doc) {
+ if (doc.matches(".*\\<\\s*[a-zA-Z].*"))
+ doc = doc.replaceAll("\\<.*?\\>", "");
+ for (char c : PROHIBITED_CHARS) {
+ int idx = doc.indexOf(c);
+ if (idx >= 0)
+ doc = doc.substring(0, idx - 1);
+ }
+ doc = doc.trim().replaceAll("\\s+", " ");
+ if (doc.length() > MAX_LENGTH)
+ doc = doc.substring(0, MAX_LENGTH - 1) + "\u2026";
+ return doc;
+ }
+
@Override
public String toString() {
return getName() + " " + getConfiguration().getURI();