Ok, i found th solution.... I checked the AXIS2's SAAJ implementation and i copy the SOAPEnvelope.addHeader() method:
public SOAPHeader addHeader() throws SOAPException { org.apache.axiom.soap.SOAPHeader header = omSOAPEnvelope.getHeader(); if (header == null) { ... header = new SOAP11HeaderImpl(omSOAPEnvelope,(SOAPFactory)this.element.getOMFactory()); saajSOAPHeader = new SOAPHeaderImpl(header); saajSOAPHeader.setParentElement(this); .... ((NodeImpl)omSOAPEnvelope.getHeader()).setUserData(SAAJ_NODE, saajSOAPHeader, null); } ... } This still give null on omSOAPEnvelope.getHeader(). Debugging this code i found that the Header element is created after the Body Element, and not as first Envelope's child. So i fixed it adding those lines: NodeImpl body = (NodeImpl)omSOAPEnvelope.getFirstChild(); omSOAPEnvelope.setLastChild(body); omSOAPEnvelope.setFirstChild(header); ((NodeImpl)omSOAPEnvelope.getHeader()).setNextOMSibling(body); and now it works!! Should i have to open a bug? 2010/7/19 Cencio1980 <cencio1...@gmail.com> > There is no difference, but i tryed calling > > hdr = ((org.apache.axiom.soap.SOAPFactory) > soapMessage.getSOAPEnvelope().getOMFactory()).createSOAPHeader(soapMessage.getSOAPEnvelope()); > > as in the sample included in my last mail, with same result. > > > 2010/7/16 Andreas Veithen <andreas.veit...@gmail.com> > > You should not use the SOAP11HeaderImpl constructor directly, but >> instead use the corresponding method on SOAPFactory. Maybe that's the >> cause of the issue. >> >> Andreas >> >> On Fri, Jul 16, 2010 at 11:24, Cencio1980 <cencio1...@gmail.com> wrote: >> > Hi Andreas, >> > >> > i found that i was using a wrong way to add HeaderBlocks. Now, when i >> add >> > them to an existing SOAPHeader it works fine. >> > >> > Still remain the problems when the Envelope hasn't a Header. >> > >> > I create a new one with >> > new SOAP11HeaderImpl( >> > soapMessage.getSOAPEnvelope(), >> > (org.apache.axiom.soap.SOAPFactory) >> > soapMessage.getSOAPEnvelope().getOMFactory()); >> > >> > I can serialize the returned SOAPHeader as many time i want, but if i >> try to >> > get it from the envelope: >> > soapMessage.getSOAPEnvelope().getHeader() >> > it's null, and if i serialize the envelope, it will not appear. >> > >> > Seems i create it, but without attaching it to the envelope. >> > I checked the axiom source code, but i didn't find where the new >> SOAPHeader >> > is setted as envelope's first children.... >> > >> > Before opening a Jira, i want to be sure that i'm using the api in the >> right >> > way. >> > >> > Thanks for any help, >> > Lorenzo >> > >> > P.S. >> > In attachment a simple test case (look at README). >> > I tryed with axiom 1.2.8 and 1.2.9 on java 1.5 >> > >> > >> > >> > 2010/7/14 Andreas Veithen <andreas.veit...@gmail.com> >> >> >> >> Hi Lorenzo, >> >> >> >> Can you please open a JIRA issue [1] for this problem with the >> >> following additional information: >> >> >> >> * The Axiom version you are using. >> >> * A test case that reproduces the problem. >> >> >> >> Thanks, >> >> >> >> Andreas >> >> >> >> [1] https://issues.apache.org/jira/browse/WSCOMMONS >> >> >> >> On Wed, Jul 14, 2010 at 17:29, Cencio1980 <cencio1...@gmail.com> >> wrote: >> >> > Hi all, >> >> > >> >> > i have a servlet that works on SOAP 1.1 Message , but usually doesn't >> >> > need >> >> > to access to soap:Body content. >> >> > i obtain an org.apache.axiom.soap.impl.dom.SOAPMessageImpl in this >> way: >> >> > >> >> > XMLStreamReader xmlStreamReader = >> >> > >> >> > >> XMLInputFactory.newInstance().createXMLStreamReader(((HttpServletRequest) >> >> > req).getInputStream()); >> >> > org.apache.axiom.soap.SOAPFactory mf = new >> >> > org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory(); >> >> > org.apache.axiom.om.OMXMLParserWrapper parser = new >> >> > StAXSOAPModelBuilder(xmlStreamReader,mf,null); >> >> > org.apache.axiom.soap.impl.dom.SOAPMessageImpl soapMessage = >> >> > (org.apache.axiom.soap.impl.dom.SOAPMessageImpl) >> >> > ((StAXSOAPModelBuilder)parser).getSoapMessage(); >> >> > >> >> > then i tryed to add an HeaderBlock, but if i call method serialize() >> on >> >> > the >> >> > header several times, only first time i can see new HeaderBlock, then >> >> > i'll >> >> > loose it. >> >> > >> >> > After some tests i'll find that if i call build() method on the >> header >> >> > element: >> >> > soapMessage.getEnvelope().getHeader().build() >> >> > and i add new HeaderBlock, i can serialize the message header many >> times >> >> > without loosing new added HeaderBlock elements and without building >> the >> >> > message Body using very few memory. >> >> > >> >> > Now the problem: what if the message hasn't the Header element? >> >> > soapMessage.getEnvelope().getHeader() is null >> >> > I have to add a new Header, but if i don't call the build() on the >> >> > Envelope >> >> > i'll loose it first time i serialize it and if i build the envelope, >> >> > i'll >> >> > build also the Body with a huge memory load. >> >> > >> >> > There is a solution without building the entire soap:Body element? >> >> > >> >> > Thanks in advance for any help, >> >> > >> >> > - Lorenzo >> >> > >> > >> > >> > >