cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Arik Gorelik <arikg...@gmail.com>
Subject Re: set headers in soap response
Date Fri, 30 Oct 2009 19:04:51 GMT
I think I figured it out as well.

I looked at the generated code (from wsdl2java) and my TestServiceService
had a public static Qname called TestService which has the correct
targetNamespace. I am just using that QName to create the Header reference
and add to the list of headers in the SoapMessage...

I think that will work.

On Fri, Oct 30, 2009 at 11:52 AM, Arik Gorelik <arikgdev@gmail.com> wrote:

> Is there a way to retrieve the targetNamespace from the message, its QNames
> (from Version of the message)?
>
> For example if I have something like this on the service classt:
>
>
> @WebService
> (portName = "TestService",
>
> serviceName = "TestServiceService",
>
> *targetNamespace = **"http://example.test.com/services/v01"**, *
>
> endpointInterface = "com.test.services.v01.TestService"
>
> )
> Is the specific 'targetNamespace' retrievable from anywhere of the
> SoapMessage or its attributes?
>
> I've tried the namespaceURI from:
>
> 1. message.getVersion().getEnvelope().getNameSpaceURI() but that gives me "
> http://schemas.xmlsoap.org/soap/envelope/"
>  2. message.getVersion().getNamespace() but that gives me "
> http://schemas.xmlsoap.org/soap/envelope/"
>
> Seems like since I am creating the Header on the fly without binding it,
> the targetNamespace is not the one of the service. Maybe I am totally off
> here.
>
>
>   On Fri, Oct 30, 2009 at 10:59 AM, Arik Gorelik <arikgdev@gmail.com>wrote:
>
>> I figured out how to change the element name, it is just the 'localPart'
>> attribute of the QName. Still struggling on how to get the correct
>> targetNamespace (for the service endpoint) instead of the default one
>> xmlns="http://schemas.xmlsoap.org/soap/envelope/
>>
>>
>> On Fri, Oct 30, 2009 at 10:31 AM, Arik Gorelik <arikgdev@gmail.com>wrote:
>>
>>> That's awesome! I am able to get the value back in the header response.
>>> Just need to figure out how to set the name of the element (default is
>>> 'Header').
>>>
>>> Still, the header part seems kind of tricky to me. Perhaps the
>>> @WebParam(header=true) way is much simpler, but unfortunately I cannot use
>>> that.
>>>
>>>   On Fri, Oct 30, 2009 at 9:36 AM, Daniel Kulp <dkulp@apache.org> wrote:
>>>
>>>>
>>>> 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 <dkulp@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 <arikgdev@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 <
>>>> dkulp@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
>>>> > > > >> dkulp@apache.org
>>>> > > > >> http://www.dankulp.com/blog
>>>> > >
>>>> > > --
>>>> > >  Daniel Kulp
>>>> > > dkulp@apache.org
>>>> > > http://www.dankulp.com/blog
>>>> >
>>>>
>>>> --
>>>>  Daniel Kulp
>>>> dkulp@apache.org
>>>> http://www.dankulp.com/blog
>>>>
>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message