Those all sound good, but unfortunately I am pretty much
a web-services newbie, I don't have a clue how to
implement that, especially the @WebParam sugestion.
Do I need some entries in the WSDL, etc?

the old implementation was basically outputing this:

<soap:Envelope ...
xmlns:h="http://www.foobar.com/connector-1.5/headers_ns.xsd";>
    <soap:Header>
        <h:overflow soap:mustUnderstand="0">false</h:overflow>
    </soap:Header>
    ...

or
    ...
    <h:overflow soap:mustUnderstand="0">true</h:overflow>
    ...

so there are a few involved: a namespace, a node, and
an attribute.  I don't have to keep it the same, so maybe
I can make it a lot simplier, I just need to basically
communicate overflow=[true|false] somehow.

Thanks,
Dan

On Friday 29 February 2008, Daniel Kulp wrote:
> 
> Of course, I typed all that and forgot the most obvious way:
> 
> Just add a parameter to your method like:
> 
> @WebParam(header = true, mode = Mode.OUT)
> Holder<String> header
> 
> Dan
> 
> 
> 
> On Friday 29 February 2008, Daniel Kulp wrote:
> > OK.   This is turning into another FAQ type thing that 
> possibly needs
> > a sample....
> >
> > There are a couple options open to you:
> >
> > First, you need the context injected in:
> > @Resource
> > WebServiceContext context;
> >
> > 1) Standard JAX-WS API's:  throw the value in the WebServiceContext
> > and in a SoapHandler, use it to modify the SAAJ object model.   This
> > is pure JAXWS and would work on any JAX-WS implementation.  The
> > "problem" is that with the SAAJ model, it breaks streaming and
> > performance suffers.
> >
> > 2) context + CXF interceptor: again, from your impl, throw 
> a value in
> > the WebServiceContext and then grab that from the message in your
> > interceptor.   You can then call the 
> soapMessage.getHeaders() thing to
> > get the list of headers and add a Header object to it.
> >
> > 3) Context only: no interceptors needed.  In you impl do:
> >
> > context.
> > ... build a org.apache.cxf.headers.Header object ...
> > List<Header> hdrList = (List<Header>)ctx.get(Header.HEADER_LIST));
> > hdrList.add(hdr);
> >
> > And example of this would be our system test that test this:
> > 
> http://svn.apache.org/repos/asf/incubator/cxf/trunk/systests/src/test/
> >java/org/apache/cxf/systest/outofband/header/
> >
> >
> > 3 is definitely the simplest.   No interceptors needed.  Nothing
> > really to configure, etc....
> >
> >
> > Dan
> >
> > On Friday 29 February 2008, Daniel Lipofsky wrote:
> > > I have a csae where I want to set something in the SOAP
> > > response header based on what happened in the execution of
> > > the method implementation.
> > >
> > > I suppose I want to extend AbstractSoapInterceptor, but what
> > > I can't figure out is how to pass a flag from the method
> > > to the interceptor.  I thought about sticking it in the
> > > ServletRequest attribute map but I don't see a way to access
> > > that from the interceptor.  Any way to do it would be fine.
> > >
> > > also is there an example of adding an element to a SOAP header?
> > >
> > > Thanks,
> > > Dan

Reply via email to