LISTSERV mailing list manager LISTSERV 16.0

Help for ZNG Archives


ZNG Archives

ZNG Archives


[email protected]


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

ZNG Home

ZNG Home

ZNG  October 2001

ZNG October 2001

Subject:

Re: RPC Context

From:

"LeVan,Ralph" <[log in to unmask]>

Reply-To:

Z39.50 Next-Generation Initiative

Date:

Wed, 31 Oct 2001 10:55:53 -0500

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (287 lines)

Okay, so I'm a little slow.  I've finally figured it out.  None of the
examples I was working from (there doesn't seem to be an Apache SOAP book
yet) show using the SOAPContext in the method handling the RPC.  My code
needed this trivial change:

    // the method called by the SOAP RPCRouter
    public String searchRetrieve(String query, int startRecord,
      int maximumRecords, String responseSchema, String recordSchema) {
        // your local database magic happens here
        return makeResponse(999);
    }

becomes this:

    // the method called by the SOAP RPCRouter
    public String searchRetrieve(SOAPContext sc, String query, int
startRecord,
      int maximumRecords, String responseSchema, String recordSchema) {
        HttpServletRequest hsr;
        hsr=(HttpServletRequest)sc.getProperty("HttpServletRequest");
        String database=hsr.getServletContext();
        // your local database magic happens here
        return makeResponse(999);
    }

> -----Original Message-----
> From: LeVan,Ralph
> Sent: Wednesday, October 31, 2001 9:03 AM
> To: 'Z39.50 Next-Generation Initiative'
> Subject: RE: RPC Context
>
>
> Here is the sum total of the code necessary to handle the URL
> and SOAP versions of an SRW request.  This is so trivial that
> it makes my heart ache.  It is also intuitively obvious,
> which is a great virtue.
>
> Please show me how it would be changed to allow it to know
> about the database context.
>
> Ralph
>
>
> import java.io.PrintWriter;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
>
> public class ZNGRPCServer {
>     // handle the URL form of an SRW searchRequest
>     public void doGet (HttpServletRequest request,
> HttpServletResponse response)
>       throws javax.servlet.ServletException, java.io.IOException {
>         PrintWriter out = response.getWriter();
>         String      query=request.getParameter("query");
>
>         response.setContentType("text/xml");
>         out.println(
>             searchRetrieve(query, request.getParameter("startRecord"),
>                 request.getParameter("maximumRecords"),
>                 request.getParameter("responseSchema"),
>                 request.getParameter("recordSchema")));
>         out.close();
>     }
>
>
>     // form the actual XML response record (probably should
> be using XML tools here)
>     private String makeResponse(int postings) {
>         StringBuffer response=new StringBuffer();
>         response.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
>         response.append("<searchRetrieveResponse
> xmlns=\"urn:z3950:ZNG_Prototype1\">");
>         response.append("<totalHits>"+postings+"</totalHits>");
>         response.append("<records></records>");
>
> response.append("<status><statusCode>0</statusCode></status>");
>         response.append("</searchRetrieveResponse>");
>         return response.toString();
>     }
>
>
>     // the method called by the SOAP RPCRouter
>     public String searchRetrieve(String query, int startRecord,
>       int maximumRecords, String responseSchema, String
> recordSchema) {
>         // your local database magic happens here
>         return makeResponse(999);
>     }
>
>
>     // the method called by doGet() that handles the URL request
>     private String searchRetrieve(String query, String startRecord,
>       String maximumRecords, String responseSchema, String
> recordSchema) {
>         int max=0, start=0;
>
>         if(startRecord!=null)
>             try {
>                 start=Integer.parseInt(startRecord);
>             }
>             catch(NumberFormatException e) {} // take the default
>
>         if(maximumRecords!=null)
>             try {
>                 max=Integer.parseInt(maximumRecords);
>             }
>             catch(NumberFormatException e) {} // take the default
>
>         return searchRetrieve(query, start, max,
> responseSchema, recordSchema);
>     }
> }
>
> > -----Original Message-----
> > From: Matthew Dovey [mailto:[log in to unmask]]
> > Sent: Tuesday, October 30, 2001 5:32 PM
> > To: [log in to unmask]
> > Subject: Re: RPC Context
> >
> >
> > Ralph,
> >
> > The approach, I've outlined would work using the Apache SOAP/Java
> > toolkit although it would be the URN defined in the deployment
> > descriptor passed via the HTTP SOAP action header which would
> > therefore
> > identify the database. I think it perfectly legal for the HTTP
> > SOAP-Action to determine the database as the URL used. In
> general, the
> > model is that you connect to a different ZNG SOAP Service for a
> > different database.
> >
> > However, if you wanted to determined the database on the with
> > the Apache
> > SOAP/Java toolkit you would run two instances of the RPC Router on
> > different URLS.
> >
> > Both these approaches are fairly trivial and not particularly
> > non-standard uses of the Apache toolkit
> >
> > Matthew
> >
> >
> >
> > > -----Original Message-----
> > > From: LeVan,Ralph [mailto:[log in to unmask]]
> > > Sent: 30 October 2001 20:59
> > > To: [log in to unmask]
> > > Subject: Re: RPC Context
> > >
> > > I can do all sorts of trickery to make this problem go
> > away.  But, one
> > of
> > > the points of this exercise is to do something simple.  By
> > that I mean
> > > that
> > > it should use standard tools as much as possible.
> > >
> > > If we are doing standard SOAP RPC, then there are standard ways of
> > > generating the RPC client and server.  If I use the standard RPC
> > server
> > > tools, then I don't have access to context.
> > >
> > > If you know how to do this using standard tools, then
> please let me
> > know.
> > > I've been beating my head against this problem for some time now.
> > >
> > > The problem goes away when we add database to the list of RPC
> > parameters.
> > > I've been able to put together a very slim client and
> > server built on
> > the
> > > RPC model when I added database.
> > >
> > > Ralph
> > >
> > > > -----Original Message-----
> > > > From: Matthew Dovey [mailto:[log in to unmask]]
> > > > Sent: Tuesday, October 30, 2001 3:50 PM
> > > > To: [log in to unmask]
> > > > Subject: Re: RPC Context
> > > >
> > > >
> > > > By ID do you mean URL?
> > > >
> > > > Basically you bind different URLs to different
> > instantiations of the
> > > > Java class.
> > > >
> > > > One approach would be to write an abstract class with
> all the ZNG
> > > > handling, something like
> > > >
> > > > public abstract class BaseZNGObject {
> > > >   String database = null
> > > >
> > > >   public Test() {
> > > >   }
> > > >
> > > >   public ZNG(
> > > >
> > > > ...
> > > > // All the ZNG handling, database searching stuff.
> > > >
> > > >
> > > > }
> > > >
> > > >
> > > > Then write classes of the form
> > > >
> > > > public class Database1ZNGObject extends BaseZNGObject {
> > > >
> > > >   public Database1ZNGObject () {
> > > >     database="database1";
> > > >   }
> > > > }
> > > >
> > > > public class Database2ZNGObject extends BaseZNGObject {
> > > >
> > > >   public Database1ZNGObject () {
> > > >     database="database2";
> > > >   }
> > > > }
> > > >
> > > > And then bind these classes to different URLs using the SOAP
> > toolkit.
> > > >
> > > >
> > > > Matthew
> > > >
> > > > > -----Original Message-----
> > > > > From: LeVan,Ralph [mailto:[log in to unmask]]
> > > > > Sent: 30 October 2001 15:20
> > > > > To: [log in to unmask]
> > > > > Subject: RPC Context
> > > > >
> > > > > I'm still trying to figure out how to tell what
> > database my query
> > is
> > > > for.
> > > > > The problem may be in my toolkit, but I've got to ask this
> > question
> > > > again.
> > > > >
> > > > > When a SOAP request is received, a special SOAP servlet
> > > > processes the
> > > > > message.  It looks at the ID for the message, looks
> > that ID up in
> > a
> > > > table
> > > > > and determines the Java class that contains the method
> > that should
> > > > process
> > > > > the message.  It then pulls the parameters for the
> method out of
> > the
> > > > > message.  It then creates an instance of the Java class and
> > > > calls the
> > > > > method
> > > > > (searchRetrieve in our case) with the parameters.
> > > > >
> > > > > Nowhere in there does searchRetrieve have access to
> the URL that
> > > > contained
> > > > > the message.  That URL somehow encoded the database to be
> > searched.
> > > > That
> > > > > means that my searchRetrieve method does not know what
> > database it
> > > > should
> > > > > be
> > > > > searching.
> > > > >
> > > > > How do we get around this problem without exposing
> the database
> > name
> > > > as a
> > > > > parameter to searchRetrieve.
> > > > >
> > > > > Thanks!
> > > > >
> > > > > Ralph
> > > >
> >
>

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

July 2017
October 2016
July 2016
August 2014
February 2014
December 2013
November 2013
October 2013
February 2013
January 2013
October 2012
August 2012
April 2012
January 2012
October 2011
May 2011
April 2011
November 2010
October 2010
September 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
October 2009
September 2009
August 2009
July 2009
May 2009
April 2009
March 2009
February 2009
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
January 2007
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001

ATOM RSS1 RSS2



LISTSERV.LOC.GOV

CataList Email List Search Powered by the LISTSERV Email List Manager