Hi, I am running Axis2 on Geronimo 3.0, and in the latest JAX-WS TCK testing, I got a NPE for some cases. The cause for it is that some cases will check whether those elements are not in the SOAP headers, while those soap message has no header element.
>From the Java doc of SOAPMessage, it writes :


public SOAPHeader getSOAPHeader()
                         throws SOAPException
Gets the SOAP Header contained in this SOAPMessage object.

the SOAPHeader object contained by this SOAPMessage object
SOAPException - if the SOAP Header does not exist or cannot be retrieved
SAAJ 1.2

From the Java Doc of SOAPEnvelop, it wirtes:


SOAPHeader getHeader()
                     throws SOAPException
Returns the SOAPHeader object for this SOAPEnvelope object.

A new SOAPMessage object is by default created with a SOAPEnvelope object that contains an empty SOAPHeader object. As a result, the method getHeader will always return a SOAPHeader object unless the header has been removed and a new one has not been added.

the SOAPHeader object or null if there is none
SOAPException - if there is a problem obtaining the SOAPHeader object

It seems that there is different behavior for SOAPMessage.getSOAPHeader() and SOAPEnvelop.getHeader(). and in current axis2-saaj implementation, it always returns null while no header element exists.
Personally, I thought it is an issue of saaj spec, it is not user-friendly to throw an exception while no header exists. Actually, I also test this with the ri saaj implementation, and it seems to have the same behavior with axis2-saaj.
Another possible solution is to add an empty header element for those soap message if no header element exists, I could see it could be done in the SAAJConverter.

Thoughts ?