I am writing a CXF client and using interceptor to add security headers in Java
code. It used to work fine with 2.0.4, but broken when I upgrade to 2.1 jar
(the only thing changed is cxf-2.1.jar). In the following getSecurityHeader()
method, it now returns null but used to return header element.
Does any one have any clue?
// This method add interceptor: AuthenticationInterceptor extends
WSS4JOutInterceptor
private static void addHeaders(MyService port) throws Exception {
Client cli = ClientProxy.getClient(port);
Endpoint endpoint = cli.getEndpoint();
Map<String, Object> outprops = new HashMap<String, Object>();
outprops.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outprops.put(WSHandlerConstants.USER, "myname");
outprops.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outprops.put(WSHandlerConstants.PW_CALLBACK_CLASS,
ClientPasswordCallbackHandler.class.getName());
AuthenticationInterceptor wssout = new AuthenticationInterceptor(outprops);
endpoint.getOutInterceptors().add(new SAAJOutInterceptor());
endpoint.getOutInterceptors().add(wssout);
}
// This method try to get security header, and I will do something with it
later. This is in AuthenticationInterceptor
private Element getSecurityHeader(SoapMessage message) throws SOAPException
{
SOAPMessage doc = message.getContent(SOAPMessage.class);
String actor = (String)getOption(WSHandlerConstants.ACTOR);
SOAPConstants sc =
WSSecurityUtil.getSOAPConstants(doc.getSOAPPart().getDocumentElement());
return WSSecurityUtil.getSecurityHeader(doc.getSOAPPart(), actor, sc);
}
Thanks,
Boxiong