SOA in Practice: Errata 


Now available:

Nicolai M. Josuttis

SOA in Practice
The Art of Distributed System Design


ISBN-10: 0-596-52955-4
ISBN-13: 978-0-596-52955-0

This is the page for the known errata of the book "SOA in Practice" by Nicolai M. Josuttis.

For further updates and feedback please send an email to (if you click on it to reply, you have to replace "_AT_" by "@"). Note however that I get a lot of emails so that I might not be able to answer immediately. In addition, we have the problem of spamming. For this reason, please use a proper subject, use plain text, and keep the size of the email below 100kB. If you don't get an answer after a certain period of time, you might try it again (with different wording) to make sure the email was not caught by a spam filter.

The errata is organized in the following way:
- The first part lists technical errors
- The second part lists typos

Last Update: June 3, 2009


Page 9 / 238: An entry for the referenced book [Brooks74] is missing in the reference appendix. However, currently it's [Brooks95]. So:

Page 9: replace [Brooks74] by [Brooks95]

Page 286 between [BPMN] and [BrownEllis04] add:
 Brooks, Frederick P. 1995. The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition). Reading, MA: Addison-Wesley.

Page 89: The BPEL example uses invalid XML comments (they should start with "<!--" instead of "<!-") and the dots "..." are placeholders for concrete stuff so that a proportional font such as "..." would be better for them.

Page 160, end of first paragraph: Replace "in the opposite order" by "in the opposite direction"

Page 192, pseudocode: Of course, the service should have the customer id as an additional parameter, which has to be used internally to identify the customer:

string changeAddress (custID, newAddress)
    oldAddress = backend_1.getAddress(custID);

    status = backend_1.changeAddress(custID,newAddress);
    if (status == failure) {
        return "couldn't modify address in backend 1";

    status = backend_2.changeAddress(custID,newAddress);
    if (status == failure) {
        // compensation: restore old address to keep consistency
        status = backend_1.changeAddress(custID,oldAddress);
        if (status == failure) {
        return "couldn't modify address in backend 2";
    return "OK";


Page iv: s/by Nicloai M. Josuttis/by Nicolai M. Josuttis/

Page xiv: Alan Lenton is listed twice in the second paragraph of the acknowledgments

Page 32, 3.3.7: s/contain a category of “s services”/contain a category of “composed services”/

Page 48: s/As [Chappel04] states:/As [Chappell04] states:/

Page 58: s/Or, as [Chappel04] states:/Or, as [Chappell04] states:/

Page 59, 2nd list item: s/(connectivity, data mapping, and routing)/(connectivity, data transformation, and routing)/

Page 94, 7.5.1: s/:servmodifying/modifying/

Page 111, 9.1.1: s/"s department" /"process department"/

Page 112, Figure 9-2: s/BMP Engine/BPM Engine/

Page 113, Figure 9-3: s/BMP Engine/BPM Engine/

Page 160, Figure 13-1, on the right side: s/Serialize request/Serialize response/

Page 195: s/shopping cart (or session) isn the backend/shopping cart (or session) in the backend/

Page 204, NOTE: s/a key, a value, a type of information for the value/a key, a value, a type information for the value/

Page 210, s/Discovery, and Innovation (UDDI)/Discovery, and Integration (UDDI)/

Page 240, Figure 18-2: s/setContractData/getContractData/

Page 256, bottom code: s/setContractData()/getContractData()/

Page 257, top code and Figure 18-13: order of lastname and isActive should be reversed

Page 265, 19.2.2: s/and it might by steered by a/and it might be steered by a/

Page 274, 19.5.1: s/Ann Thomas Manes/Anne Thomas Manes/

Page 286: s/[Chappel04] Chappel,/[Chappell04] Chappell/

Page 295, "Compensation": s/In contract to/In contrast to/

Home of "SOA in Practice"

Copyright 2009 by Nicolai M. Josuttis