Currently there's no easy way to plug in an additional kind of service adapter (to support a protocol other than SOAP or Vinci). UIMA already has the foundation for pluggable adapters, with its use of descriptors and factory methods that produce Resource objects (like AnalysisEngines) from descriptors. But we've never provided a way for users to plug in their own adapter classes without editing internal framework configuration files. Here's a simple suggestion that would change that:
We could add a new ResourceSpecifier (descriptor) type: <customResourceSpecifier xmlns="http://uima.apache.org/resourceSpecifier"> <resourceClassName>com.foo.MyCustomServiceAdapter</resourceClassName> <parameters> <parameter name="serviceEndpoint" value="hostname:port"/> ... </parameters> </customResourceSpecifier> The <resourceClassName> specifies the exact name of some user class which must be located on the classpath (the UIMA extension classpath will work, if provided). That class must implement the UIMA Resource interface (for an AE service adapter it would also have to implement the AnalysisEngine interface). The Resource interface provides a method initialize(ResouceSpecifier,Map) which the factory calls and passes the resource specifier. The user would implement the initialize method to read the <parameters> and set itself up. All the basic support for this is already there. It's relatively easy to add a new kind of ResourceSpecifier and the associated factory for instantiating the Resource from the specifier. Then there would be the documentation about how to implement your resource class, which would be a little more work. Thoughts? -Adam
