home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _270f3401ac2d136117ad81d664498f96 < prev    next >
Text File  |  2000-03-23  |  6KB  |  153 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>SOAP::Transport::HTTP::Apache - SOAP mod_perl handler</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> SOAP::Transport::HTTP::Apache - SOAP mod_perl handler</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <UL>
  26.  
  27.         <LI><A HREF="#handler(safeclasshash, optionaldispatcher)">handler(SafeClassHash, OptionalDispatcher)</A></LI>
  28.     </UL>
  29.  
  30.     <LI><A HREF="#dependencies">DEPENDENCIES</A></LI>
  31.     <LI><A HREF="#author">AUTHOR</A></LI>
  32. </UL>
  33. <!-- INDEX END -->
  34.  
  35. <HR>
  36. <P>
  37. <H1><A NAME="name">NAME</A></H1>
  38. <P>SOAP::Transport::HTTP::Apache - SOAP mod_perl handler</P>
  39. <P>
  40. <HR>
  41. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  42. <UL>
  43. <LI>Linux</LI>
  44. <LI>Solaris</LI>
  45. <LI>Windows</LI>
  46. </UL>
  47. <HR>
  48. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  49. <P>Use this class to expose SOAP endpoints using Apache and mod_perl.
  50. Here's an example of a class that would like to receive SOAP
  51. packets. Note that it implements a single interesting function,
  52. handle_request, that takes there arguments: an array of headers,
  53. a body, and an EnvelopeMaker for creating the response:</P>
  54. <PRE>
  55.     package Calculator;
  56.     use strict;</PRE>
  57. <PRE>
  58.     sub new {
  59.         bless {}, shift;
  60.     }</PRE>
  61. <PRE>
  62.     sub handle_request {
  63.         my ($self, $headers, $body, $envelopeMaker) = @_;</PRE>
  64. <PRE>
  65.         $body->{extra_stuff} = "heres some extra stuff";</PRE>
  66. <PRE>
  67.         foreach my $header (@$headers) {
  68.             $header->{extra_stuff} = "heres some more extra stuff";
  69.             $envelopeMaker->add_header(undef, undef, 0, 0, $header);
  70.         }
  71.         $envelopeMaker->set_body(undef, 'myresponse', 0, $body);
  72.     }</PRE>
  73. <PRE>
  74.     1;</PRE>
  75. <P>In order to translate HTTP requests into calls on your Calculator
  76. class above, you'll need to write an Apache handler. This is where
  77. you'll use the SOAP::Transport::HTTP::Apache class:</P>
  78. <PRE>
  79.     package ServerDemo;
  80.     use strict;
  81.     use SOAP::Transport::HTTP::Apache;</PRE>
  82. <PRE>
  83.     sub handler {
  84.         my $safe_classes = {
  85.             Calculator => undef,
  86.         };
  87.       SOAP::Transport::HTTP::Apache->handler($safe_classes);
  88.     }</PRE>
  89. <P>1;</P>
  90. <P>As you can see, this class basically does it all - parses the HTTP
  91. headers, reads the request, and sends a response. All you have to do
  92. is specify the names of classes that are safe to dispatch to.</P>
  93. <P>Of course, in order to tell Apache about your handler class above,
  94. you'll need to modify httpd.conf. Here's a simple example that shows
  95. how to set up an endpoint called ``/soap'' that maps to your ServerDemo
  96. handler above:</P>
  97. <PRE>
  98.     <Location /soap>
  99.         SetHandler perl-script
  100.         PerlHandler ServerDemo
  101.     </Location></PRE>
  102. <P>(I leave it up to you to make sure ServerDemo is in
  103. Perl's @INC path - see Writing Apache Modules
  104. with Perl and C by O'Reilly for help with mod_perl,
  105. or just man mod_perl)</P>
  106. <P>
  107. <HR>
  108. <H1><A NAME="description">DESCRIPTION</A></H1>
  109. <P>This class encapsulates the details of hooking up to mod_perl,
  110. and then calls SOAP::Transport::HTTP::Server to do the SOAP-specific
  111. stuff. This way the Server class can be reused with any web server
  112. configuration (including CGI), by simply composing it with a different
  113. front-end (for instance, SOAP::Transport::HTTP::CGI).</P>
  114. <P>
  115. <H2><A NAME="handler(safeclasshash, optionaldispatcher)">handler(SafeClassHash, OptionalDispatcher)</A></H2>
  116. <P>This is the only method on the class, and you must pass a
  117. hash reference whose keys contain the collection of classes
  118. that may be invoked at this endpoint. If you specify class
  119. FooBar in this list, for instance, and a client sends a SOAP
  120. request to <A HREF="http://yourserver/soap?class=FooBar,">http://yourserver/soap?class=FooBar,</A> then the
  121. SOAP::Transport::HTTP::Server class will eventually attempt
  122. to load FooBar.pm, instatiate a FooBar, and call
  123. its handle_request function (see SOAP::Transport::HTTP::Server
  124. for more detail). If you don't include a class in this hash,
  125. SOAP/Perl won't run it. I promise.</P>
  126. <P>By the way, only the keys in this hash are important, the
  127. values are ignored.</P>
  128. <P>Also, nothing is stopping you from messing around with the request
  129. object yourself if you'd like to add some headers or whatever;
  130. you can always call Apache-><CODE>request()</CODE> to get the request object
  131. inside your handle_request function. Just make sure you finish
  132. what you're doing before you return to SOAP::Transport::HTTP::Server,
  133. because at that point the response is marshaled and sent back.</P>
  134. <P>See SOAP::Transport::HTTP::Server for a description of the
  135. OptionalDispatcher argument.</P>
  136. <P>
  137. <HR>
  138. <H1><A NAME="dependencies">DEPENDENCIES</A></H1>
  139. <P>SOAP::Transport::HTTP::Server</P>
  140. <P>
  141. <HR>
  142. <H1><A NAME="author">AUTHOR</A></H1>
  143. <P>Keith Brown</P>
  144. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  145. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  146. <STRONG><P CLASS=block> SOAP::Transport::HTTP::Apache - SOAP mod_perl handler</P></STRONG>
  147. </TD></TR>
  148. </TABLE>
  149.  
  150. </BODY>
  151.  
  152. </HTML>
  153.