Here again. Just to tell that I may have found the culprit. The implementation of
org.killbill.billing.jaxrs.resources.JaxRsResourceBase#extractPluginProperties() is:
protected Iterable<PluginProperty> extractPluginProperties(@Nullable final Iterable<String> pluginProperties, final PluginProperty... additionalProperties) {
final Collection<PluginProperty> properties = new LinkedList<PluginProperty>();
if (pluginProperties == null) {
return properties;
}
for (final String pluginProperty : pluginProperties) {
final List<String> property = ImmutableList.<String>copyOf(pluginProperty.split("="));
// Skip entries for which there is no value
if (property.size() == 1) {
continue;
}
final String key = property.get(0);
// Should we URL decode the value?
String value = Joiner.on("=").join(property.subList(1, property.size()));
if (pluginProperty.endsWith("=")) {
value += "=";
}
properties.add(new PluginProperty(key, value, false));
}
for (final PluginProperty cur : additionalProperties) {
properties.add(cur);
}
return properties;
}
Pierre had the doubt when he implemented it, though... :-D
// Should we URL decode the value?
Maybe this could/should be considered to be fixed in any upcoming versions of Kill Bill? BTW, in my opinion the API could be more "RESTful", and drop the
pluginProperties query param altogether, also considering that the query string has a length limit.
Have a nice day! :-)
--
Alessio Gaeta