Listing 1 DDL for MySQL (createdb.sql)
CREATE DATABASE IF NOT EXISTS authprovider;

USE authprovider;

CREATE TABLE principal (
id int(11) NOT NULL auto_increment,
username varchar(32) NOT NULL default '',
password varchar(32) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY username (username)
) TYPE=MyISAM;

INSERT INTO principal VALUES (1,'markr','Jsdh8qSD');
INSERT INTO principal VALUES (2,'johns','iJ823hdV');
INSERT INTO principal VALUES (3,'linust','js89PndVs');
INSERT INTO principal VALUES (4,'larryw','58Jnfjh4g');

CREATE TABLE principal_webservice_map (
p_id int(11) NOT NULL default '0',
ws_id int(11) NOT NULL default '0',
PRIMARY KEY (p_id,ws_id)
) TYPE=MyISAM;

INSERT INTO principal_webservice_map VALUES (1,1);
INSERT INTO principal_webservice_map VALUES (1,2);
INSERT INTO principal_webservice_map VALUES (1,3);
INSERT INTO principal_webservice_map VALUES (1,4);
INSERT INTO principal_webservice_map VALUES (1,5);
INSERT INTO principal_webservice_map VALUES (1,6);
INSERT INTO principal_webservice_map VALUES (1,7);
INSERT INTO principal_webservice_map VALUES (1,8);
INSERT INTO principal_webservice_map VALUES (1,9);
INSERT INTO principal_webservice_map VALUES (1,10);
INSERT INTO principal_webservice_map VALUES (1,11);
INSERT INTO principal_webservice_map VALUES (2,2);
INSERT INTO principal_webservice_map VALUES (2,4);
INSERT INTO principal_webservice_map VALUES (2,7);
INSERT INTO principal_webservice_map VALUES (2,11);
INSERT INTO principal_webservice_map VALUES (3,4);
INSERT INTO principal_webservice_map VALUES (3,5);
INSERT INTO principal_webservice_map VALUES (3,9);
INSERT INTO principal_webservice_map VALUES (4,1);
INSERT INTO principal_webservice_map VALUES (4,2);
INSERT INTO principal_webservice_map VALUES (4,4);
INSERT INTO principal_webservice_map VALUES (4,7);
INSERT INTO principal_webservice_map VALUES (4,11);

CREATE TABLE webservice (
id int(11) NOT NULL auto_increment,
uri varchar(64) NOT NULL default '',
PRIMARY KEY (id,uri)
) TYPE=MyISAM;

INSERT INTO webservice VALUES (1,'urn:test-authprovider');
INSERT INTO webservice VALUES (2,'urn:AddressFetcher');
INSERT INTO webservice VALUES (3,'urn:AddressFetcher2');
INSERT INTO webservice VALUES (4,'urn:xml-soap-demo-calculator'); INSERT INTO webservice VALUES (5,'urn:sum-COM');
INSERT INTO webservice VALUES (6,'urn:adder-COM');
INSERT INTO webservice VALUES (7,'urn:po-processor');
INSERT INTO webservice VALUES (8,'urn:mimetestprocessor');
INSERT INTO webservice VALUES (9,'urn:mimetest');
INSERT INTO webservice VALUES (10,'urn:xmltoday-delayed-quotes');
INSERT INTO webservice VALUES (11,'urn:ejbhello');
INSERT INTO webservice VALUES (12,'urn:soap-unauthorized');

Listing 2 Provider.java
package org.apache.soap.util;

import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
import org.apache.soap.server.*;

public interface Provider {
public void locate(DeploymentDescriptor dd,
Envelope      env,
Call          call,
String      methodName,
String      targetObjectURI,
SOAPContext     reqContext)
throws SOAPException;
public void invoke(SOAPContext req, SOAPContext res)
throws SOAPException;
}

Listing 3 AuthProviderDB.java
public boolean isAuthenticated(String username, String
password) {
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT password FROM " +
"principal WHERE username = '" + username + "'");
if (rs.next()) {
if(rs.getString("password").equals(password)) {
return true;
}
}
return false;
}
catch (SQLException e) {
return false;
}
}

public boolean isAuthorized(String username, String uri) {
try {
PreparedStatement pstmt =
con.prepareStatement("SELECT p.username FROM " +
"principal_webservice_map pwm, " +
"principal p, webservice ws " +
"WHERE pwm.p_id = p.id " +
"AND pwm.ws_id = ws.id " +
"AND p.username = ? AND ws.uri = ?");

pstmt.setString(1,username);
pstmt.setString(2,uri);

ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
if(rs.getString("username").equals(username)) {
return true;
}
}
return false;
}
catch (SQLException e) {
System.err.println("SQLException: " + e.getMessage());
return false;
}
}

Listing 4 HelloWorld.java
package com.empsoft.soap.services;

public class HelloWorld {
public String sayHello() {
return("Hello, world!");
}
}

Listing 5 DeploymentDescriptor.xml
id="urn:com-empsoft-soap-services-
HelloWorld">
scope="Application"
methods="sayHello">




Listing 6 AuthProviderClient.java
String username = "markr";
String password = "Jsdh8qSD";

URL url = new URL(args[0]); // SOAP listener's URL from the
command line
Call call = new Call();
call.setTargetObjectURI("urn:test-authprovider");
call.setMethodName("sayHello");

SOAPHTTPConnection hc = new SOAPHTTPConnection();
hc.setUserName(username);
hc.setPassword(password);
call.setSOAPTransport(hc);

Vector params = new Vector();
call.setParams(params);
Response resp = call.invoke(url, "");

if (resp.generatedFault()) {
Fault fault = resp.getFault();
System.out.println ("Ouch, the call failed: ");
System.out.println ("Fault Code = " +
fault.getFaultCode());
System.out.println ("Fault String = " +
fault.getFaultString()); } else {
Parameter result = resp.getReturnValue();
System.out.println(result.getValue());
}