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