Мы используем wsdl2java и плагин cxf codegen для создания клиента для службы, защищенной ws-защитой.Отмена маркера контекста безопасности (SCT/Cancel)
Вызов службы через автоматически генерируемой клиента класса (OrganisationsEinheitenCoreService) довольно легко:
OrganisationsEinheitenCoreService service = new OrganisationsEinheitenCoreService();
IOrganisationsEinheitenCoreService serviceEndpoint = service.getServiceEndpoint();
BindingProvider bindingProvider = (BindingProvider) serviceEndpoint;
Map<String, Object> ctx = bindingProvider.getRequestContext();
ctx.put("ws-security.username", "MyUsername");
ctx.put("ws-security.password", "MyPassword");
ArrayOfStaat staaten = serviceEndpoint.getStaaten();
При вызове метода «getStaaten» от службы, CXF автоматически обращается с запросом на SecurityContextToken с именем пользователя и паролем (action = http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT), перед вызовом фактического метода «getStaaten». После получения SCT из службы cxf сохраняет sct и использует его для следующего вызова (-ов).
По какой-то причине cxf никогда не вызывает http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT/Cancel, чтобы прервать SCT. Мы также не могли понять, как это сделать явно, мы попробовали несколько вещей, таких как try-with-resource с классом, или получить клиент и вызвать метод close.
SCTs обычно истекает через определенное количество времени, к сожалению, нам нужно закрыть их сразу после вызова службы.
Любые идеи?