A Handler Chain with Two Handlers

In the predictionsSOAP service, three of the operations require the id of a Prediction: the getOne, edit, and delete operations. The id is a positive integer. What happens if the client, through oversight or mischief, submits a negative integer or zero as the id? The service throws a SOAP fault. A SOAP request with a bad id is a waste of time and bandwidth, and avoiding such a request would be a gain in efficiency.

To guard against an invalid id, a client-side handler could inspect every outgoing SOAP message to determine if it has an id and, if so, whether the id is a positive integer. If the id is negative, the handler could substitute the absolute value and let the request continue on its way to the service; if the id is zero, the handler could throw an exception immediately and thereby short-circuit a request that is doomed to fail on the service side. The client-side SOAPHandler already in place could be amended to do this work, as the SOAP handler has access to the entire SOAP message; however, a LogicalHandler is better suited to the proposed task because the id is part of the payload in the SOAP request’s body. The existing SOAPHandler can be left as is and a LogicalHandler can be added to the handler chain. Modular design recommends this approach, which is also an opportunity to show a two-member handler chain in action.

There are two ways in which the LogicalHandler can access the payload of a SOAP message: as a native Java object generated ...

Get Java Web Services: Up and Running, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.