Я пытаюсь подключиться к веб-службе, используя WS-Security UsernameToken spec 1.0, используя apache cxf 2.4.0.
Я скопировал приведенный ниже код из документации CXF, но получаю: org.apache.cxf.ws.policy.PolicyException: имя пользователя недоступно
MyService_Service ss = new MyService_Service(wsdlURL, SERVICE_NAME);
MyService port = ss.getBasicHttpBindingMyService ();
Client client = ClientProxy.getClient(port);
Endpoint cxfEndpoint = client.getEndpoint();
Map<String,Object> outProps = new HashMap<String,Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "USERNAME");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,
ClientPasswordHandler.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
cxfEndpoint.getOutInterceptors().add(wssOut);
Я также реализовал класс ClientPasswordHandler, опять же из документов, но кажется, что имя пользователя никогда не отправляется (в соответствии сошибка).Вот обработчик пароля:
public class ClientPasswordHandler implements CallbackHandler {
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
pc.setPassword("Password");
}
}
Есть ли способ узнать, применяется ли WSS4Jinterceptor и отправлено ли имя пользователя Token?