Добавление BinarySecurityToken в заголовок cxf

Я выдергивал волосы из-за этого, и я просто не могу заставить его работать. У меня есть вызываемая мной веб-служба, которая генерирует токен безопасности, который затем необходимо передать последующим вызовам службы внутри заголовка SOAP. У меня эта часть работает нормально, но часть заголовка меня сбивает (я сгенерировал клиента с помощью cxf wsdl2java). Это часть, которую следует добавить:

<wsse:BinarySecurityToken ValueType="XXXX" EncodingType="wsse:Base64Binary" wsu:Id="SecurityToken">
  My token
</wsse:BinarySecurityToken>

Я пробовал использовать WSS4JOutInterceptor следующим образом:

Endpoint endpoint = client.getEndpoint();
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put("SecurityToken", MY-TOKEN);
endpoint.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));

, но это не сработало. И я попытался напрямую добавить его в заголовок следующим образом (согласно этот вопрос ):

List<Header> headers = new ArrayList<Header>();
SOAPFactory sf = SOAPFactory.newInstance();
SOAPElement authElement = sf.createElement(new QName(null, "wsse:BinarySecurityToken"));
authElement.setAttribute("ValueType", "XXXX");
authElement.setAttribute("EncodingType", "wsse:Base64Binary");
authElement.setAttribute("wsu:Id", "SecurityToken");
authElement.addTextNode(MY-TOKEN);
SoapHeader tokenHeader = new SoapHeader(
  new QName(null, "wsse:BinarySecurityToken"), authElement);
headers.add(tokenHeader);
((BindingProvider) service).getRequestContext().put(Header.HEADER_LIST, headers);

, и это выглядит почти нормально

<soap:Header><BinarySecurityToken EncodingType="wsse:Base64Binary" ValueType="XXXX" wsu:Id="SecurityToken">MY-TOKEN</BinarySecurityToken></soap:Header>

Однако в части BinarySecurityToken отсутствует префикс wsse: и вызов не выполняется.

Есть ли у кого-нибудь что-то похожее на работу - или я делаю это совершенно неправильно?

6
задан Community 23 May 2017 в 10:27
поделиться