Thx a lot!! You're my hero :D

On Wed, Mar 21, 2012 at 3:54 PM, Daniel Kulp <dk...@apache.org> wrote:

> On Wednesday, March 21, 2012 03:22:11 PM Jose Noheda wrote:
> > Hi,
> >
> > Thx, that was it. Unfortunately I can't use your preferred solution
> > because I'm porting a legacy JAX-RPC handler and I need to reuse an
> > abstract class. The class in question generates a SOAPElement and then in
> > JAX-RPC, it was appended using
> >
> > *header.addChildElement(soapElement);*
> >
> > I'm replicating the exact behavior in CXF/JAX-WS but SOAPOutInterceptor
> is
> > throwing an exception in the *writeSoapEnvelopeStart(message);* method
> > (same problem I was facing when using the jaxws handler):
> >
> > *Caused by: org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt
> > was made to insert a node where it is not permitted*
> >
> > Is there any problem I'm not aware of here? How should I add an element
> to
> > the header tag?
>
> You're likely using an old version of SAAJ.   Can you check your SAAJ
> implementation?   Update to the latest saaj-impl if at all possible.
>
> You can also TRY with the latest CXF 2.6.0-SNAPSHOT code.   I made a bunch
> of changes for 2.6.0 to allow it to better tolerate older SAAJ
> implementations.   That may help.
>
> Alternatively, if you have the soapElement, just do:
>
>  message.getHeaders().add(
>     new Header(soapElement.getQName(), soapElement));
>
> and don't deal with the SAAJ stuff at all.
>
>
> Dan
>
>
>
> >
> > Regards
> >
> > On Wed, Mar 21, 2012 at 2:53 PM, Daniel Kulp <dk...@apache.org> wrote:
> > > On Wednesday, March 21, 2012 02:09:56 PM Jose Noheda wrote:
> > > > Hi,
> > > >
> > > > Looking at
> > > > http://www.jroller.com/gmazza/entry/jaxwshandlers_to_cxfinterceptors
> > > > it
> > > > should be very simple to add a new header to a SOAP message.
> > > > Unfortunately, my CXF message always return null when I ask for the
> > > > SOAPMessage. Here's the code:
> > > >
> > > > *    public SecurityOutInterceptor() {
> > > >
> > > >         super(Phase.PRE_PROTOCOL); // Tried other Phases as well
> > > >
> > > >     }
> > > >
> > > >     protected SOAPHeader getSOAPHeader(SoapMessage message) throws
> > > >
> > > > SOAPException {
> > > >
> > > >         SOAPMessage soapMessage =
> > > >         message.getContent(SOAPMessage.class);
> > > >         return soapMessage.getSOAPHeader();
> > > >
> > > >     }*
> > > >
> > > > It always throws a NullPointerException. I've tried using a Handler
> > > > instead of an interceptor to no avail (*SoapOutInterceptor* throws an
> > > > exception when wirting the envelope for some unkown reason). Can
> > > > someone
> > > > spot the problem?
> > >
> > > This would only work if you also configure in the SAAJOutInterceptors.
> > > By default, we don't create the SOAPMessage unless asked for.
> > >
> > > The best option is  to just do:
> > >
> > > message.getHeaders().add(
> > >
> > >   new Header(qname, domElement));
> > >
> > > if you do that fairly early in the interceptor chain, the domElement
> > > would be streamed out at the appropriate time.
> > >
> > > Dan
> > >
> > > > Any help is appreciatted, thanks in advance.
> > > >
> > > > Regards
> > > >
> > > > PS: The client is created
> > > >
> > > >     <jaxws:client id="fooClientProxy" serviceClass="foo.Bar"
> > > >
> > > > address="..."> <jaxws:outInterceptors>
> > > >
> > > >             <bean class="foo.BarOutInterceptor" />
> > > >
> > > >         </jaxws:outInterceptors>
> > > >
> > > >     </jaxws:client>
> > >
> > > --
> > > Daniel Kulp
> > > dk...@apache.org - http://dankulp.com/blog
> > > Talend Community Coder - http://coders.talend.com
> --
> Daniel Kulp
> dk...@apache.org - http://dankulp.com/blog
> Talend Community Coder - http://coders.talend.com
>
>

Reply via email to