Excellent! That was it. Strange that the api says that you need to put in an
Object instead of an Element... Anyway it works like fine now. I implemented
it like so:

DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.newDocument();
Element version = doc.createElement("api-version");
version.setTextContent("2.0");

and the response is now:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
   <soap:Header>
      <api-version>2.0</api-version>
   </soap:Header>
   <soap:Body>
     ...
   </soap:Body>
</soap:Envelope>

Thnx a lot. Good start of the weekend for me :-)


Ulhas Bhole wrote:
> 
> Hi Ronald,
> 
> I take back my statement from first mail that the header you are setting 
> is ok. I had a quick look through the code.
> 
> Header expects the data binding that can marshal the header object you 
> set or if no databinding specified then the DOM element.
> So, instead of adding simple string create a DOM element and add the DOM 
> element to the header and you should see the exception disappearing.
> 
> Regards,
> 
> Ulhas Bhole
> 
> Ronald Pieterse wrote:
>> Ok, at least it seems to respond now but I get a ClassCast exception on
>> the
>> Object I try to put in the header. I try to do something like this:
>>
>> soapMsg.getHeaders().add(new Header(new QName("http://api.tripolis.com";),
>> "version=2.0"));
>>
>> for (Header header : soapMsg.getHeaders()) {
>>      System.out.println("header: " + header.getName());
>> }
>>
>> After setting the header I read it out of the message and it looks
>> alright
>> but further on the exception is thrown like this:
>>
>> [16:04:59.764] Interceptor has thrown exception, unwinding now
>> [16:04:59.764] java.lang.ClassCastException: java.lang.String
>> [16:04:59.764]       at
>> org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:120)
>> ...
>>
>> I'm almost there - I can feel it...
>>
>>
>> Ulhas Bhole wrote:
>>   
>>> Are you checking for the DOM elements? Don't expect to see it in string 
>>> format.
>>>
>>> you need to get the handle onto the Header list and go through the list 
>>> to check the DOM elements and you would find it there.
>>>
>>> Sorry, didn;t read the complete message it looks like your interceptor 
>>> kicks in after the header processing is done. If you have no dependency 
>>> on any interceptors to be finished you can add it before Phase.WRITE.
>>>
>>> you can add following lines to your interceptor's constructor and it 
>>> should make sure that the interceptor gets called before the header 
>>> processing happens.
>>>
>>> super(Phase.WRITE);
>>> addBefore(SoapOutInterceptor.class.getName());
>>>
>>>
>>> Regards,
>>>
>>> Ulhas
>>>
>>> Ronald Pieterse wrote:
>>>     
>>>> Right, The header I'm setting is not appearing when I check the
>>>> response
>>>> in
>>>> e.g. SoapUI. The only requirement I have is that I would like to see
>>>> the
>>>> header in my response one way or the other :-)
>>>> I also have a System.out.println in my interceptor so I know it kicks
>>>> in
>>>> and
>>>> no exceptions are thrown so I wonder where the header went...
>>>> The response looks like this:
>>>>
>>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>>>>    <soap:Body>
>>>>       <ns1:getDatabaseFieldsResponse
>>>> xmlns:ns1="http://some.namespace/";>
>>>>          <databaseFields>
>>>>           ...
>>>>          </databaseFields>
>>>>       </ns1:getDatabaseFieldsResponse>
>>>>    </soap:Body>
>>>> </soap:Envelope>
>>>>
>>>>
>>>> As you can see there's no headers available at all. Any ideas?
>>>>
>>>>
>>>> Ulhas Bhole wrote:
>>>>   
>>>>       
>>>>> Hi Roland,
>>>>>
>>>>> It's upto your requirement at which phase it should be added. I don't 
>>>>> see any problem in the way you are setting header. Do you mean to say 
>>>>> that interceptor kicks in but you don't see soap header other side?
>>>>>
>>>>> Regards,
>>>>>
>>>>> Ulhas Bhole
>>>>>
>>>>> Ronald Pieterse wrote:
>>>>>     
>>>>>         
>>>>>> Hello,
>>>>>>
>>>>>> I'm trying to set a header in the SOAP response of all my calls.This
>>>>>> header
>>>>>> must just contain the version of my service implementation. I'm
>>>>>> trying
>>>>>> to
>>>>>> do
>>>>>> this using an OUT interceptor (extends AbstractSoapInterceptor) which
>>>>>> is
>>>>>> defined in my spring file:
>>>>>>
>>>>>>
>>>>>>         <bean id="soapHeaderSetter"
>>>>>>          class="my.package.SoapHeaderSetter" />
>>>>>>
>>>>>>  <cxf:bus>
>>>>>>          <cxf:inInterceptors />
>>>>>>          <cxf:outInterceptors>
>>>>>>                  <ref bean="soapHeaderSetter" />
>>>>>>          </cxf:outInterceptors>
>>>>>>          <cxf:inFaultInterceptors />
>>>>>>  </cxf:bus>
>>>>>>
>>>>>>
>>>>>> The interceptor kicks in alright when I go back to the client but
>>>>>> it's
>>>>>> unclear which Phase I need to be in to add the header and also how to
>>>>>> set
>>>>>> the header. Do I just get the headers (btw there are no response
>>>>>> headers
>>>>>> available - is that correct?) and then add one to the list like this:
>>>>>>
>>>>>>
>>>>>>         soapMsg.getHeaders().add(new Header(new
>>>>>> QName("http://some.namespace";), "api.version=1.7"));
>>>>>>
>>>>>>
>>>>>> I suspect that the way I set this header is not entirely correct :-)
>>>>>> I
>>>>>> could
>>>>>> use some help here. THNX
>>>>>>
>>>>>>   
>>>>>>       
>>>>>>           
>>>>> ----------------------------
>>>>> IONA Technologies PLC (registered in Ireland)
>>>>> Registered Number: 171387
>>>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>>>> Ireland
>>>>>
>>>>>
>>>>>     
>>>>>         
>>>>   
>>>>       
>>> ----------------------------
>>> IONA Technologies PLC (registered in Ireland)
>>> Registered Number: 171387
>>> Registered Address: The IONA Building, Shelbourne Road, Dublin 4,
>>> Ireland
>>>
>>>
>>>     
>>
>>   
> 
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Setting-SOAP-header-in-SOAP-response-tf4697009.html#a13428591
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to