Interesting.  Thanks, Chris.  I wasn't aware that http:operation could 
point to remote locations even if http:addressLocation is "LOCAL". 
That's a useful bit of information to store away for future use.

What I ended up doing was creating a separate service definition and 
deployment for the getIcon() method, then simply linking the content 
model to this second service definition, also.

Getting out of the code and thinking about it a little more abstractly, 
it didn't seem like a good idea to try to mix heterogeneous types of 
service deployments in the same definition and deployment;  the Fedora 
architectures seems to encourage one to keep definitions and deployments 
atomic, and to do your aggregation in the content models.  That makes 
more sense to me;  that way, the web service getIcon() is not so tightly 
coupled to the object's content model and datastreams.

-- Scott

Chris Wilper wrote:
> Hi Scott,
> 
> You're right that Fedora only expects one WSDL binding.  It looks like
> you created to separate ones because one of them uses the special
> "LOCAL" syntax (used often to link directly to a datastream) and the
> other points to a specific service.
> 
> I know it's possible in general to have on SDep point to two separate
> service endpoints on the same host, because it's done by the
> demo:CollectionImpl object.  This is accomplished by specifying
> http://host:port/ for the http:address location, and the remainder of
> the invocation path in the http:operation location.  But we currently
> don't have any examples of linking directly to a datastream *and* a
> service in the same SDep.
> 
> Besides the examples, currently the best documentation on how this all
> hangs together is found is the code.  Here's a relevant comment I just
> dug out of fedora/server/access/dissemination/DisseminationService.java:
> 
>                     // If addressLocation has a value of "LOCAL", this 
> indicates
>                     // the associated operationLocation requires no
> addressLocation.
>                     // i.e., the operationLocation contains all
> information necessary
>                     // to perform the dissemination request. This is a
> special case
>                     // used when the web services are generally
> mechanisms like cgi-scripts,
>                     // java servlets, and simple HTTP GETs. Using the
> value of LOCAL
>                     // in the address location also enables one to
> have different methods
>                     // serviced by different hosts. [...]
> 
> So I believe you can accomplish what you're after by using a single
> binding that specifies "LOCAL" for the http:addressLocation.  Then,
> for any operation that points to the image manipulation service,
> specify the full path to the service in the operationLocation.
> 
> - Chris


-- 
Scott Prater
Library, Instructional, and Research Applications (LIRA)
Division of Information Technology (DoIT)
University of Wisconsin - Madison
[email protected]

------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Fedora-commons-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/fedora-commons-developers

Reply via email to