The use of WS-Addressing EPRs is redefining the difference between SOAP body and SOAP headers. The way the SOAP spec looks at it, the difference is that a header element can be targeted at an intermediary, while the body is meant only for the ultimate receiver. But very often, contract designers seem to decide what to put in headers versus body less based on SOAP intermediaries than on the ability to create EPRs. Basically, parts of the message are put in headers just so that an EPR can be built that constrains that message element. To the point sometimes of putting the entire content of the message in headers and leaving an empty body (as Gudge points out and as several specs from his company do). And to the contrary, a wary contract designer might very well put info in the body rather than a header just for the sake of “protecting” it form being hard-coded in an EPR (the contract requires that the sender understands this element, it can’t be sent just because “an EPR told me to”).
This brings up the question: rather than twisting SOAP messages to accommodate the EPR mechanism, should the EPR mechanism be made more flexible in the way it constrains the content of a SOAP message?