|
Fall Semester 2002 |
The acronym Axis means
a fancy way of saying it's a
Installing an Axis server is relatively simple.
As of October 7, 2002, Axis 1.0 is available.
I am downloading the compressed archive
You don't have to. Just keep reading.xml-axis-10.tar.gz 07-Oct-2002 08:07 6.6M GZIP compressed file
I then uncompress and unarchive the file. That takes up about 40-50 MB of space.
(No need for you to do any of that, but keep reading.)
We will present the fastest easiest installation of xml-axis.
(The original document is posted here.)
0. Introduction
1. Step One: Creating the WebApps.
axis.
webapps/axis copy the contents of
/l/www/classes/a348/fall2002/webapps/axis
Here's how I did it:
burrowww.cs.indiana.edu% pwd /nfs/paca/home/user1/dgerman burrowww.cs.indiana.edu% cd $CATALINA_HOME burrowww.cs.indiana.edu% pwd /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4 burrowww.cs.indiana.edu% cd webapps burrowww.cs.indiana.edu% ls -ld axis ls: axis: No such file or directory burrowww.cs.indiana.edu% cp -r /l/www/classes/a348/fall2002/webapps/axis . burrowww.cs.indiana.edu% ls -ld axis drwxr-xr-x 3 dgerman faculty 512 Nov 17 23:53 axis burrowww.cs.indiana.edu% du -a axis 1 ./index.html 13 ./happyaxis.jsp 2 ./WEB-INF/web.xml 1 ./WEB-INF/users.lst 1 ./WEB-INF/perms.lst 1088 ./WEB-INF/lib/axis.jar 26 ./WEB-INF/lib/commons-logging.jar 35 ./WEB-INF/lib/jaxrpc.jar 120 ./WEB-INF/lib/wsdl4j.jar 19 ./WEB-INF/lib/saaj.jar 384 ./WEB-INF/lib/log4j-1.2.4.jar 376 ./WEB-INF/lib/axis-ant.jar 62 ./WEB-INF/lib/commons-discovery.jar 2111 ./WEB-INF/lib 1 ./WEB-INF/classes/samples/bidbuy/vInterface.class 2 ./WEB-INF/classes/samples/bidbuy/Address.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$18.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$13.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$5.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$12.class 2 ./WEB-INF/classes/samples/bidbuy/LineItem.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$4.class 2 ./WEB-INF/classes/samples/bidbuy/BidService.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$17.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$9.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$11.class 2 ./WEB-INF/classes/samples/bidbuy/Service.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$MyTableModel.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$16.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$3.class 5 ./WEB-INF/classes/samples/bidbuy/TestClient.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$8.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$10.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$2.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$15.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$7.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$1.class 8 ./WEB-INF/classes/samples/bidbuy/v3.class 4 ./WEB-INF/classes/samples/bidbuy/RegistryService.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$14.class 2 ./WEB-INF/classes/samples/bidbuy/rfq$6.class 18 ./WEB-INF/classes/samples/bidbuy/rfq.class 2 ./WEB-INF/classes/samples/bidbuy/PurchaseOrder.class 1 ./WEB-INF/classes/samples/bidbuy/rfq$19.class 74 ./WEB-INF/classes/samples/bidbuy 2 ./WEB-INF/classes/samples/integrationGuide/example2/MyGeneratorFactory.class 3 ./WEB-INF/classes/samples/integrationGuide/example2/MyDeployWriter.class 1 ./WEB-INF/classes/samples/integrationGuide/example2/MyEmitter.class 2 ./WEB-INF/classes/samples/integrationGuide/example2/WSDL2Useless.class 9 ./WEB-INF/classes/samples/integrationGuide/example2 2 ./WEB-INF/classes/samples/integrationGuide/example1/MyWSDL2Java.class 3 ./WEB-INF/classes/samples/integrationGuide/example1/MyListPortsWriter.class 6 ./WEB-INF/classes/samples/integrationGuide/example1 16 ./WEB-INF/classes/samples/integrationGuide 3 ./WEB-INF/classes/samples/encoding/DataDeser.class 1 ./WEB-INF/classes/samples/encoding/DataSerFactory.class 3 ./WEB-INF/classes/samples/encoding/DataSer.class 1 ./WEB-INF/classes/samples/encoding/DataDeserFactory.class 6 ./WEB-INF/classes/samples/encoding/TestSer.class 1 ./WEB-INF/classes/samples/encoding/ElementService.class 2 ./WEB-INF/classes/samples/encoding/Data.class 3 ./WEB-INF/classes/samples/encoding/TestElem.class 21 ./WEB-INF/classes/samples/encoding 4 ./WEB-INF/classes/samples/echo/SOAPStruct.class 4 ./WEB-INF/classes/samples/echo/InteropTestServiceLocator.class 26 ./WEB-INF/classes/samples/echo/InteropTestSoapBindingStub.class 1 ./WEB-INF/classes/samples/echo/TestClient$1.class 3 ./WEB-INF/classes/samples/echo/InteropTestPortType.class 4 ./WEB-INF/classes/samples/echo/echoHeaderStringHandler.class 4 ./WEB-INF/classes/samples/echo/echoHeaderStructHandler.class 1 ./WEB-INF/classes/samples/echo/InteropTestService.class 7 ./WEB-INF/classes/samples/echo/InteropTestSoapBindingImpl.class 5 ./WEB-INF/classes/samples/echo/SOAPStructStruct.class 5 ./WEB-INF/classes/samples/echo/SOAPArrayStruct.class 2 ./WEB-INF/classes/samples/echo/TestClient$2.class 15 ./WEB-INF/classes/samples/echo/TestClient.class 82 ./WEB-INF/classes/samples/echo 8 ./WEB-INF/classes/samples/security/SignedSOAPEnvelope.class 3 ./WEB-INF/classes/samples/security/Client.class 1 ./WEB-INF/classes/samples/security/Service.class 5 ./WEB-INF/classes/samples/security/LogHandler.class 3 ./WEB-INF/classes/samples/security/ClientSigningHandler.class 21 ./WEB-INF/classes/samples/security 3 ./WEB-INF/classes/samples/userguide/example4/LogHandler.class 1 ./WEB-INF/classes/samples/userguide/example4/Service.class 2 ./WEB-INF/classes/samples/userguide/example4/Client.class 7 ./WEB-INF/classes/samples/userguide/example4 1 ./WEB-INF/classes/samples/userguide/example3/MyService.class 3 ./WEB-INF/classes/samples/userguide/example3/Client.class 5 ./WEB-INF/classes/samples/userguide/example3 2 ./WEB-INF/classes/samples/userguide/example1/TestClient.class 3 ./WEB-INF/classes/samples/userguide/example1 4 ./WEB-INF/classes/samples/userguide/example5/Client.class 2 ./WEB-INF/classes/samples/userguide/example5/BeanService.class 2 ./WEB-INF/classes/samples/userguide/example5/Order.class 9 ./WEB-INF/classes/samples/userguide/example5 1 ./WEB-INF/classes/samples/userguide/example6/WidgetPrice.class 2 ./WEB-INF/classes/samples/userguide/example6 3 ./WEB-INF/classes/samples/userguide/example2/CalcClient.class 4 ./WEB-INF/classes/samples/userguide/example2 31 ./WEB-INF/classes/samples/userguide 1 ./WEB-INF/classes/samples/jaxrpc/hello/Hello.class 2 ./WEB-INF/classes/samples/jaxrpc/hello/ServerHandler.class 5 ./WEB-INF/classes/samples/jaxrpc/hello/HelloBindingStub.class 1 ./WEB-INF/classes/samples/jaxrpc/hello/HelloWorld.class 4 ./WEB-INF/classes/samples/jaxrpc/hello/HelloWorldLocator.class 1 ./WEB-INF/classes/samples/jaxrpc/hello/HelloBindingImpl.class 15 ./WEB-INF/classes/samples/jaxrpc/hello 8 ./WEB-INF/classes/samples/jaxrpc/address/AddressSoapBindingStub.class 1 ./WEB-INF/classes/samples/jaxrpc/address/AddressServiceService.class 4 ./WEB-INF/classes/samples/jaxrpc/address/AddressBean.class 1 ./WEB-INF/classes/samples/jaxrpc/address/AddressSoapBindingImpl.class 4 ./WEB-INF/classes/samples/jaxrpc/address/AddressServiceServiceLocator.class 1 ./WEB-INF/classes/samples/jaxrpc/address/AddressService.class 20 ./WEB-INF/classes/samples/jaxrpc/address 36 ./WEB-INF/classes/samples/jaxrpc 4 ./WEB-INF/classes/samples/addr/DOMUtils.class 4 ./WEB-INF/classes/samples/addr/AddressBookServiceLocator.class 8 ./WEB-INF/classes/samples/addr/AddressBookSOAPBindingStub.class 1 ./WEB-INF/classes/samples/addr/AddressBook.class 4 ./WEB-INF/classes/samples/addr/AddressBookSOAPBindingSkeleton.class 6 ./WEB-INF/classes/samples/addr/Address.class 1 ./WEB-INF/classes/samples/addr/AddressBookService.class 2 ./WEB-INF/classes/samples/addr/AddressBookSOAPBindingImpl.class 4 ./WEB-INF/classes/samples/addr/Phone.class 5 ./WEB-INF/classes/samples/addr/Main.class 2 ./WEB-INF/classes/samples/addr/StateType.class 42 ./WEB-INF/classes/samples/addr 3 ./WEB-INF/classes/samples/transport/tcp/AdminClient.class 5 ./WEB-INF/classes/samples/transport/tcp/GetQuote.class 3 ./WEB-INF/classes/samples/transport/tcp/TCPTransport.class 5 ./WEB-INF/classes/samples/transport/tcp/TCPListener$SocketHandler.class 1 ./WEB-INF/classes/samples/transport/tcp/Handler.class 4 ./WEB-INF/classes/samples/transport/tcp/TCPSender.class 5 ./WEB-INF/classes/samples/transport/tcp/TCPListener.class 27 ./WEB-INF/classes/samples/transport/tcp 4 ./WEB-INF/classes/samples/transport/FileTest.class 3 ./WEB-INF/classes/samples/transport/FileReader.class 3 ./WEB-INF/classes/samples/transport/FileSender.class 1 ./WEB-INF/classes/samples/transport/FileTransport.class 39 ./WEB-INF/classes/samples/transport 4 ./WEB-INF/classes/samples/message/TestMsg.class 1 ./WEB-INF/classes/samples/message/MessageService.class 6 ./WEB-INF/classes/samples/message 3 ./WEB-INF/classes/samples/stock/GetInfo.class 2 ./WEB-INF/classes/samples/stock/ComInfoService.class 3 ./WEB-INF/classes/samples/stock/StockQuoteService.class 4 ./WEB-INF/classes/samples/stock/GetQuote.class 3 ./WEB-INF/classes/samples/stock/GetQuote2.class 5 ./WEB-INF/classes/samples/stock/GetQuote1.class 21 ./WEB-INF/classes/samples/stock 1 ./WEB-INF/classes/samples/attachments/EchoAttachmentsService$MemoryOnlyDataSource.class 1 ./WEB-INF/classes/samples/attachments/TestRef$MemoryOnlyDataSource.class 10 ./WEB-INF/classes/samples/attachments/TestRef.class 7 ./WEB-INF/classes/samples/attachments/EchoAttachmentsService.class 10 ./WEB-INF/classes/samples/attachments/EchoAttachment.class 30 ./WEB-INF/classes/samples/attachments 5 ./WEB-INF/classes/samples/jms/JMSTest.class 6 ./WEB-INF/classes/samples/jms 3 ./WEB-INF/classes/samples/proxy/ProxyService.class 4 ./WEB-INF/classes/samples/proxy 3 ./WEB-INF/classes/samples/misc/TestClient.class 4 ./WEB-INF/classes/samples/misc 434 ./WEB-INF/classes/samples 435 ./WEB-INF/classes 2551 ./WEB-INF 58 ./SOAPMonitorApplet.java 4 ./StockQuoteService.jws 5 ./EchoHeaders.jws 10 ./fingerprint.jsp 2643 . burrowww.cs.indiana.edu%burrowww.cs.indiana.edu%
Make sure you also update your server.xml! Note: This looks like a lot of stuff but it does not take more than 2MB of space.
2. Step Two: Installing the Dependencies
$CATALINA_HOME/webapps/axis/WEB-INF
lib folder. In this folder
That means
xerces.jar from the xml-xerces distribution or
crimson.jar and jaxp.jar from the JAXP 1.1
reference implementaion
classes and lib
yourself. (That's easy).
xerces.jar might already be there. (That's good.)
Also note that
3. Step Three: Installing the Web Services
WEB-INF create a classes directory.
classes directory to see what's there already.)
4. Step Four: Starting the Web Server
You know what that means:
When your server is running:burrowww.cs.indiana.edu% ps -ef | grep dgerman dgerman 27045 26426 0 09:43:02 pts/52 0:00 grep dgerman dgerman 24937 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 26426 26421 0 09:18:38 pts/52 0:00 -csh dgerman 24917 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 27736 1 0 Oct 08 ? 0:05 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24867 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 26526 1 0 09:20:10 pts/52 0:16 /l/jdk/bin/../bin/sparc/native_threads/java -Djava.endorsed.dirs=/nfs/paca/home dgerman 24908 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24886 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd burrowww.cs.indiana.edu% $CATALINA_HOME/bin/shutdown.sh Using CATALINA_BASE: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4 Using CATALINA_HOME: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4 Using CATALINA_TMPDIR: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4/temp Using JAVA_HOME: /l/jdk burrowww.cs.indiana.edu% ps -ef | grep dgerman dgerman 27080 26426 0 09:43:31 pts/52 0:00 grep dgerman dgerman 24937 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 26426 26421 0 09:18:38 pts/52 0:00 -csh dgerman 24917 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 27736 1 0 Oct 08 ? 0:05 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24867 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24908 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24886 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd burrowww.cs.indiana.edu% $CATALINA_HOME/bin/startup.sh Using CATALINA_BASE: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4 Using CATALINA_HOME: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4 Using CATALINA_TMPDIR: /nfs/paca/home/user1/dgerman/tomcat/jakarta-tomcat-4.0.4/temp Using JAVA_HOME: /l/jdk burrowww.cs.indiana.edu% ps -ef | grep dgerman dgerman 24937 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 26426 26421 0 09:18:38 pts/52 0:00 -csh dgerman 24917 27736 0 08:00:05 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 27736 1 0 Oct 08 ? 0:05 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 27117 26426 0 09:43:47 pts/52 0:00 grep dgerman dgerman 24867 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 27091 1 10 09:43:40 pts/52 0:06 /l/jdk/bin/../bin/sparc/native_threads/java -Djava.endorsed.dirs=/nfs/paca/home dgerman 24908 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd dgerman 24886 27736 0 08:00:04 ? 0:00 /u/dgerman/apache/apache_1.3.26/bin/httpd burrowww.cs.indiana.edu%
Well, now you're basically done.
5. Step Five: Installation Testing.
You must perform the following checks:
When you validate make sure that
So you must not proceed until
Optional components are optional; install them when you need them.
If all looks well,
from the start page select the link that allows you to view the list of deployed services.
This will list all registered web services, unless the servlet is configured not to do so.
On this page you should be able to click on (wsdl) for each deplyed web service
to make sure that your web service is up and running. (Note though that you might have to
view the source of the returned document, as your browser may not be able to understand or
show the XML for the WSDL description).
6. Step Six: Deploying the Web Services.
The sequence of steps that we need to take is presented below.
7. Step Seven: Testing.
This step is optional, but highly recommended.
(For us, of course, it is mandatory).
Create a folder in which you place what you find in /u/dgerman/axis.
Then change your CLASSPATH to include all these files:burrowww.cs.indiana.edu% ls -ld * -rw-r--r-- 1 dgerman faculty 16755 Nov 18 01:15 axis-ant.jar -rw-r--r-- 1 dgerman faculty 1006221 Nov 18 01:15 axis.jar -rw-r--r-- 1 dgerman faculty 63515 Nov 18 01:15 commons-discovery.jar -rw-r--r-- 1 dgerman faculty 26342 Nov 18 01:15 commons-logging.jar -rw-r--r-- 1 dgerman faculty 35623 Nov 18 01:15 jaxrpc.jar -rw-r--r-- 1 dgerman faculty 378778 Nov 18 01:15 log4j-1.2.4.jar -rw-r--r-- 1 dgerman faculty 18459 Nov 18 01:15 saaj.jar -rw-r--r-- 1 dgerman faculty 109356 Nov 18 01:15 wsdl4j.jar -rw-r--r-- 1 dgerman faculty 1812019 Nov 18 01:15 xerces.jar burrowww.cs.indiana.edu%
(I assume that you will be using asetenv CLASSPATH /u/dgerman/axis/axis-ant.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/axis.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/commons-discovery.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/commons-logging.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/jaxrpc.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/log4j-1.2.4.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/saaj.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/wsdl4j.jar:$CLASSPATH setenv CLASSPATH /u/dgerman/axis/xerces.jar:$CLASSPATH
/u/username/axis folder).
Now copy /l/www/classes/a348/fall2002/samples/stock in the same folder.
(Again, this is only a few files, so the space taken is not that big.)
To run these samples we must do the following:burrowww.cs.indiana.edu% pwd /nfs/paca/home/user1/dgerman/axis burrowww.cs.indiana.edu% ls -l total 3440 -rw-r--r-- 1 dgerman faculty 16755 Nov 18 01:15 axis-ant.jar -rw-r--r-- 1 dgerman faculty 1006221 Nov 18 01:15 axis.jar -rw-r--r-- 1 dgerman faculty 63515 Nov 18 01:15 commons-discovery.jar -rw-r--r-- 1 dgerman faculty 26342 Nov 18 01:15 commons-logging.jar -rw-r--r-- 1 dgerman faculty 35623 Nov 18 01:15 jaxrpc.jar -rw-r--r-- 1 dgerman faculty 378778 Nov 18 01:15 log4j-1.2.4.jar -rw-r--r-- 1 dgerman faculty 18459 Nov 18 01:15 saaj.jar -rw-r--r-- 1 dgerman faculty 109356 Nov 18 01:15 wsdl4j.jar -rw-r--r-- 1 dgerman faculty 1812019 Nov 18 01:15 xerces.jar burrowww.cs.indiana.edu% cp -r /l/www/classes/a348/fall2002/samples/stock . burrowww.cs.indiana.edu% ls -ld * -rw-r--r-- 1 dgerman faculty 16755 Nov 18 01:15 axis-ant.jar -rw-r--r-- 1 dgerman faculty 1006221 Nov 18 01:15 axis.jar -rw-r--r-- 1 dgerman faculty 63515 Nov 18 01:15 commons-discovery.jar -rw-r--r-- 1 dgerman faculty 26342 Nov 18 01:15 commons-logging.jar -rw-r--r-- 1 dgerman faculty 35623 Nov 18 01:15 jaxrpc.jar -rw-r--r-- 1 dgerman faculty 378778 Nov 18 01:15 log4j-1.2.4.jar -rw-r--r-- 1 dgerman faculty 18459 Nov 18 01:15 saaj.jar drwxr-xr-x 2 dgerman faculty 1024 Nov 18 10:04 stock -rw-r--r-- 1 dgerman faculty 109356 Nov 18 01:15 wsdl4j.jar -rw-r--r-- 1 dgerman faculty 1812019 Nov 18 01:15 xerces.jar burrowww.cs.indiana.edu% du -a stock 1 stock/testit.sh 1 stock/client_deploy.xml 3 stock/GetInfo.class 4 stock/ComInfoService.java 1 stock/undeploy.wsdd 3 stock/build.xml 2 stock/ComInfoService.class 2 stock/deploy.wsdd 3 stock/StockQuoteService.class 3 stock/GetQuote2.class 6 stock/GetQuote2.java 4 stock/GetInfo.java 1 stock/testit.cmd 1 stock/users.lst 5 stock/GetQuote.java 5 stock/StockQuoteService.java 4 stock/GetQuote.class 11 stock/GetQuote1.java 3 stock/README 5 stock/GetQuote1.class 4 stock/StockQuoteService.jws 3 stock/GetQuote.wsdl 1 stock/perms.lst 77 stock burrowww.cs.indiana.edu%
To set up the CLASSPATH variable
~/.cshrc
source on the file
After that we need to realize the server is already running.
Then we need to deploy a service.
Let's deploy the stock quote service.
From the samples/stock folder we run the following:
Check to see that a new service has been deployed (onjava org.apache.axis.client.AdminClient \ -lhttp://burrowww.cs.indiana.edu:10600/acis/services/AdminService deploy.wsdd
happyAxis). To run the sample we simply need
javac -d . GetQuote.java
java samples.stock.GetQuote
java samples.stock.GetQuote \
-lhttp://burrowww.cs.indiana.edu:10600/axis/servlet/AxisServlet \
-uuser1 \
-wpass1 \
XXX
Now that all of this is working, the question is: how do we use it?
That's where SkatesTown comes in.
There are a few more notes (unfinished, but useful as they are) that I will list here:
There's also one more set of notes, on XML-RPC, that completes this class.