If it's something as simple as just a String, it's probably easier to just use 
a DOM and don't bother with the Databinding stuff.   Using some CXF utils:

Document doc = XMLUtils.newDocument();
Element el  = XMLUtils.createElementNS(doc, qname);
el.appendChild(XMLUtils.createTextNode(doc, "12345-67890");

new Header(qname, el)

If there isn't a databinding, it assumes a DOM.

Dan



On Fri October 30 2009 12:08:27 pm Arik Gorelik wrote:
> Great. Thank you for the pointers. I am able to get the 'SoapMessage'
> reference and call getHeaders, get the List, etc, etc. My interceptor is in
> the PRE_STREAM phase and I am also experimenting in the MARSHAL phase as
> well.
> 
> However, I cannot seem to figure out how to bind my string literal "id" to
> the actual header element. Is there a utility or an easy way to create a
> 'Header' instance? I am using the constructor, but not 100% sure what I
>  need to pass for the DataBinding. Here is my code:
> 
> QName qname = new QName(message.getVersion().getHeader());
> Object obj = "12345-67890";
> DataBinding db = ?; // where can I get this?
> 
> message.getHeaders().add(*new* Header(qname, obj, db));
> 
> I really appreciate your help.
> Arik.
> 
> On Fri, Oct 30, 2009 at 7:06 AM, Daniel Kulp <dk...@apache.org> wrote:
> > On Thu October 29 2009 9:07:16 pm Arik Gorelik wrote:
> > > Basically, I am wondering if it is possible to set something in the
> > > soap response header in the interceptor (not in the service method
> > > implementation) during PRE_STREAM phase.
> >
> > Well, yea, but in an interceptor you have two options:
> >
> > 1) Exactly the same way as in (4).
> > message.get(Header.HEADER_LIST)
> > returns the List<Header> (or null in which case you create a List<Header>
> > and
> > add it)
> >
> > 2) If you interceptor is Interceptor<SoapMessage> or if you cast the
> > passed in
> > Message to a SoapMessage, there is a getHeaders() call on soapmessage.
> >
> >
> > Dan
> >
> > > On Thu, Oct 29, 2009 at 2:09 PM, Arik Gorelik <arikg...@gmail.com>
> >
> > wrote:
> > > > Seems like if there is a heavy dependency on CXF in the project (as
> > > > in
> >
> > my
> >
> > > > case), the best option is this one:
> > > >
> > > > 4. CXF proprietary way: In the context
> > > > (BindingProvider.getRequestContext() on client, WebServiceContext on
> > > > server), you can add a
> > > > List<org.apache.cxf.headers.Header> with the key Header.HEADER_LIST.
> >
> > The
> >
> > > > headers in the list are streamed at the appropriate time to the wire
> > > > according to the databinding object found in the Header object. Like
> > > > option 1, this doesn't require changes to wsdl or method signatures.
> > > > However, it's much faster as it doesn't break streaming and the
> > > > memory overhead is less.
> > > >
> > > > Let's say I want to return an ID in the header with every response,
> > > > is that something I can do in the PRE_STREAM interceptor on the OUT
> > > > scope?
> > > >
> > > > Arik.
> > > >
> > > >   On Thu, Oct 29, 2009 at 10:48 AM, Daniel Kulp <dk...@apache.org>
> >
> > wrote:
> > > >>  On Thu October 29 2009 1:01:20 pm Arik Gorelik wrote:
> > > >> > Hello,
> > > >> >
> > > >> > I cannot seem to find any example of how to include/set
> >
> > headers/values
> >
> > > >> in
> > > >>
> > > >> > the SOAP response. Is there a CXF example on that? I can think of
> >
> > few
> >
> > > >> ways
> > > >>
> > > >> > to do this, but was wondering if anyone has a best practice
> > > >> > sample.
> > > >>
> > > >> See the faq:
> > > >>
> > > >> http://cxf.apache.org/faq.html
> > > >>
> > > >>
> > > >>
> > > >> --
> > > >> Daniel Kulp
> > > >> dk...@apache.org
> > > >> http://www.dankulp.com/blog
> >
> > --
> >  Daniel Kulp
> > dk...@apache.org
> > http://www.dankulp.com/blog
> 

-- 
Daniel Kulp
dk...@apache.org
http://www.dankulp.com/blog

Reply via email to