A wrapper can change the way in which requests and responses are passed. For example, a synchronous data source may be wrapped by an asynchronous wrapper that buffers responses until they are requested by the caller. This seems to be a relatively minor area of interest for wrapper builders, so this may be more properly the domain of some other software component. Wrappers can report errors back to the caller. These may be error messages generated by the data source, perhaps converted to a desired format, or they can be the results of an error recovery operation within the wrapper.
Most wrappers assume that they are wrapping the source for use by a particular kind of caller.
Calls to external services. Wrappers could conceivably call out to services to perform more complex services than the wrapper itself can perform. An example would be the use of an external ontology engine to semantically transform a query before submission to the wrapped data source. We are unaware of any wrappers that support this. There are a number of implementation styles of wrappers as can be seen from the review of systems below.