Listing 1: ClientRequestSigningHandler

public class ClientRequestSigningHandler extends BasicHandler {
static {
// Initialize the xml-security library
org.apache.xml.security.Init.init(); 


public void invoke(MessageContext msgContext) throws AxisFault { 
try {
msgContext.getService(); 
Message requestMessage = msgContext.getRequestMessage();
SOAPEnvelope unsignedEnvelope = requestMessage.getSOAPEnvelope();
SOAPEnvelope signedEnvelope = 
signTheEnvelope(msgContext,unsignedEnvelope); 
requestMessage = new Message(signedEnvelope); 
msgContext.setCurrentMessage(requestMessage); 
} catch (Exception e) { 
e.printStackTrace();
throw AxisFault.makeFault(e);
}
}
}

Listing 2: SupplierServiceClient

String endpointURL = "http://localhost:8080/axis/services/AcmeSupplier"; 
// Set up the call to the service
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpointURL));
SOAPBodyElement[] reqSOAPBodyElements = new SOAPBodyElement[1];
// Fill out the SOAP body here

// Create and set the client request handler
ClientRequestSigningHandler clientReqHandler =
new ClientRequestSigningHandler();
clientReqHandler.setOption("keystore","acmekeystore.jks");
call.setClientHandlers(clientReqHandler,null);
// Invoke the service
Vector resSOAPBodyElements =
(Vector) call.invoke(reqSOAPBodyElements);

Listing 3:ServerRequestSigningHandler 

public class ServerRequestSigningHandler extends BasicHandler {
static {
org.apache.xml.security.Init.init();
}

public void invoke(MessageContext msgContext) throws AxisFault {
try {
Message inMsg = msgContext.getRequestMessage();
Message outMsg = msgContext.getResponseMessage();

// verify signed message
Document doc = inMsg.getSOAPEnvelope().getAsDocument();
CachedXPathAPI xpathAPI = new CachedXPathAPI();
Element nsctx = doc.createElement("nsctx");
nsctx.setAttribute("xmlns:ds", Constants.SignatureSpecNS);

Element signatureElem = 
(Element) xpathAPI.selectSingleNode(doc,"//ds:Signature", nsctx);

XMLSignature sig = 
new XMLSignature(signatureElem,"http://acmesupplier.com");

boolean valid =
sig.checkSignatureValue(sig.getKeyInfo().getPublicKey());

if (! valid) {
System.out.println("The signature is invalid");
throw AxisFault.makeFault(new Exception("Validation Failed"));
}
System.out.println("Signature validation succeeded");
} catch (Exception e) {
System.out.println("Exception caught: " + e);
throw AxisFault.makeFault(e);
}
}
}

Listing 4: Axis server deployment file

<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<!-- Define the Signature Handler for the request -->
<handler name="requestHandler" type="ServerRequestSigningHandler">
<parameter name="filename" value="MyService.log"/>
</handler>

<!-- Services from SupplierService WSDL service -->
<service name="AcmeSupplier" provider="java:RPC" style="document">
<operation name="getQuote" qname="operNS:QuoteRequest" />
<parameter name="allowedMethods" value="getQuote"/>

<requestFlow>
<handler type="requestHandler"/>
</requestFlow>
</service>
</deployment>