You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by AshAce <as...@hotmail.com> on 2009/10/09 12:12:02 UTC

Adding SOAPHeader using an Interceptor

I'm trying to add a SOAPHeader to my request using a custom soap header
OutInterceptor. I don't want to use ((BindingProvider)
proxy).getRequestContext().put(Header.HEADER_LIST, headers);

The class is a such :

public class CustomSoapHeaderOutInterceptor extends AbstractSoapInterceptor
{
	
	public CustomSoapHeaderOutInterceptor() {
		super(Phase.WRITE);
		
	}

	@Override
	public void handleMessage(SoapMessage message) throws Fault{
	
			
			SoapMessage soapMessage = (SoapMessage) message;
			List<Header> list = message.getHeaders();
			
			QName q = new QName("http://commons.cxf.learning.com/", "HeaderService");
			Person person = new Person();
			person.setName("one person");
			JAXBDataBinding dataBinding = null;
				try {
					dataBinding = new JAXBDataBinding(person.getClass());
				} catch (JAXBException e1) {
					e1.printStackTrace();
				}
				
				SoapHeader header = new SoapHeader(q,person, dataBinding);
			list.add(header);
			
	}
}


This seems to work just fine. I just want to know if this is the correct way
of doing it or do we need to extend some other specific interceptor.
-- 
View this message in context: http://www.nabble.com/Adding-SOAPHeader-using-an-Interceptor-tp25818665p25818665.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Adding SOAPHeader using an Interceptor

Posted by Ashvin Ramanjooloo <as...@hotmail.com>.
Thanks Dan


dkulp wrote:
> 
> 
> That's the perfect way to do it.   
> 
> The only issue MIGHT be super(Phase.WRITE);     That's the same phase as
> the 
> SoapOutInterceptor which would be writing the headers.   Thus, if your 
> interceptor happens to run after the SoapOutInterceptor, your header
> wouldn't 
> get written.   I would suggest moving it to an earlier phase (PRE_PROTOCOL 
> maybe) or add a "addBefore(SoapOutInterceptor.class.getName())"
> 
> 
> Dan
> 
> 
> 
> On Fri October 9 2009 6:12:02 am AshAce wrote:
>> I'm trying to add a SOAPHeader to my request using a custom soap header
>> OutInterceptor. I don't want to use ((BindingProvider)
>> proxy).getRequestContext().put(Header.HEADER_LIST, headers);
>> 
>> The class is a such :
>> 
>> public class CustomSoapHeaderOutInterceptor extends
>> AbstractSoapInterceptor
>> {
>> 
>> 	public CustomSoapHeaderOutInterceptor() {
>> 		super(Phase.WRITE);
>> 
>> 	}
>> 
>> 	@Override
>> 	public void handleMessage(SoapMessage message) throws Fault{
>> 
>> 
>> 			SoapMessage soapMessage = (SoapMessage) message;
>> 			List<Header> list = message.getHeaders();
>> 
>> 			QName q = new QName("http://commons.cxf.learning.com/",
>>  "HeaderService"); Person person = new Person();
>> 			person.setName("one person");
>> 			JAXBDataBinding dataBinding = null;
>> 				try {
>> 					dataBinding = new JAXBDataBinding(person.getClass());
>> 				} catch (JAXBException e1) {
>> 					e1.printStackTrace();
>> 				}
>> 
>> 				SoapHeader header = new SoapHeader(q,person, dataBinding);
>> 			list.add(header);
>> 
>> 	}
>> }
>> 
>> 
>> This seems to work just fine. I just want to know if this is the correct
>>  way of doing it or do we need to extend some other specific interceptor.
>> 
> 
> -- 
> Daniel Kulp
> dkulp@apache.org
> http://www.dankulp.com/blog
> 
> 

-- 
View this message in context: http://www.nabble.com/Adding-SOAPHeader-using-an-Interceptor-tp25818665p26064017.html
Sent from the cxf-user mailing list archive at Nabble.com.


Re: Adding SOAPHeader using an Interceptor

Posted by Daniel Kulp <dk...@apache.org>.
That's the perfect way to do it.   

The only issue MIGHT be super(Phase.WRITE);     That's the same phase as the 
SoapOutInterceptor which would be writing the headers.   Thus, if your 
interceptor happens to run after the SoapOutInterceptor, your header wouldn't 
get written.   I would suggest moving it to an earlier phase (PRE_PROTOCOL 
maybe) or add a "addBefore(SoapOutInterceptor.class.getName())"


Dan



On Fri October 9 2009 6:12:02 am AshAce wrote:
> I'm trying to add a SOAPHeader to my request using a custom soap header
> OutInterceptor. I don't want to use ((BindingProvider)
> proxy).getRequestContext().put(Header.HEADER_LIST, headers);
> 
> The class is a such :
> 
> public class CustomSoapHeaderOutInterceptor extends AbstractSoapInterceptor
> {
> 
> 	public CustomSoapHeaderOutInterceptor() {
> 		super(Phase.WRITE);
> 
> 	}
> 
> 	@Override
> 	public void handleMessage(SoapMessage message) throws Fault{
> 
> 
> 			SoapMessage soapMessage = (SoapMessage) message;
> 			List<Header> list = message.getHeaders();
> 
> 			QName q = new QName("http://commons.cxf.learning.com/",
>  "HeaderService"); Person person = new Person();
> 			person.setName("one person");
> 			JAXBDataBinding dataBinding = null;
> 				try {
> 					dataBinding = new JAXBDataBinding(person.getClass());
> 				} catch (JAXBException e1) {
> 					e1.printStackTrace();
> 				}
> 
> 				SoapHeader header = new SoapHeader(q,person, dataBinding);
> 			list.add(header);
> 
> 	}
> }
> 
> 
> This seems to work just fine. I just want to know if this is the correct
>  way of doing it or do we need to extend some other specific interceptor.
> 

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