You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by ychawla <pr...@yahoo.com> on 2012/12/21 21:09:42 UTC

Inject camel resources into Spring bean

Hello All,
I am working on a WS-Policy implementation that requires a SAML token to be
passed in the security header.  CXF provides a SAML callback handler to
support adding the token.  I am using an STS so I call a web service to
obtain the token.  I obtain the token and set it in a header:

<camel:setHeader headerName="token">
	<camel:xpath
resultType="org.w3c.dom.Element">//saml2:Assertion</camel:xpath>
</camel:setHeader>

I now want to obtain the token in my callback handler:

<entry key="ws-security.saml-callback-handler"
value-ref="mySamlCallbackHandler"/>

	@Override
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {

		for (int i = 0; i < callbacks.length; i++) {
			if (callbacks[i] instanceof SAMLCallback) {
				SAMLCallback callback = (SAMLCallback) callbacks[i];

				Element assertionElement;
				//I WANT TO GET THE ASSERTION HERE FROM A CAMEL HEADER OR OTHER
MECHANISM

				callback.setAssertionElement(assertionElement);
			}
		}

	}

Does anyone know how I can access the Camel header 'token' inside of my
callback?  I have tried injecting a bean into the callback handler that
would read a hashmap to obtain the token, however, I have no messageID or
other mechanism to use as the 'key' to the hashmap.  I also injected a
CamelContext thinking I could use that in some fashion.

Any ideas on what I can do here?  I want to use the CXF framework and not
use a manual interceptor to somehow inject the token into the Soap header.

Thanks,
Yogesh



--
View this message in context: http://camel.465427.n5.nabble.com/Inject-camel-resources-into-Spring-bean-tp5724524.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: Inject camel resources into Spring bean

Posted by ychawla <pr...@yahoo.com>.
Hello,
To solve this issue, you can access the CXF message like this:

Message message = PhaseInterceptorChain.getCurrentMessage(); 

Camel will copy Camel headers to CXF headers.  You can set your 'key' to
your map as a Camel Header and then grab it off the CXF message.

Thanks,
Yogesh



--
View this message in context: http://camel.465427.n5.nabble.com/Inject-camel-resources-into-Spring-bean-tp5724524p5724572.html
Sent from the Camel - Users mailing list archive at Nabble.com.