[
https://issues.apache.org/jira/browse/CXF-7363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15997315#comment-15997315
]
Romain Manni-Bucau commented on CXF-7363:
-----------------------------------------
Well, it can be in cxf (as in previous patch, taking the responsability of part
of the dom), wss4j (wss4j-ws-security-dom) or saaj-impl (which surely could
make the Document behaving as before). Finaly goal is CXF WSS configuration
should work wherever it is fixed :).
> Support saaj-impl 1.4
> ---------------------
>
> Key: CXF-7363
> URL: https://issues.apache.org/jira/browse/CXF-7363
> Project: CXF
> Issue Type: Bug
> Reporter: Romain Manni-Bucau
>
> org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor (and actions like
> UsernameTokenAction) don't build the dom correctly and it fails with
> saaj(impl 1.4, here a way to build correctly the dom for the header appending:
> {code}
> new WSS4JOutInterceptor(outProps) {
> @Override
> protected void doSenderAction(final Document doc, final
> RequestData reqData,
> final List<HandlerAction> actions,
> final boolean isRequest) throws WSSecurityException {
> final String soapNamespace =
> WSSecurityUtil.getSOAPNamespace(doc.getDocumentElement());
> Element header =
> XMLUtils.getDirectChildElement(doc.getDocumentElement(),
> WSConstants.ELEM_HEADER, soapNamespace);
> final Element envelope = doc.getDocumentElement();
> if (header == null) {
> header =
> createElementInSameNamespace(envelope.getOwnerDocument(), envelope,
> WSConstants.ELEM_HEADER);
> final Node firstChild = envelope.getFirstChild();
> if (firstChild == null) {
> envelope.appendChild(header);
> } else {
> envelope.insertBefore(header, firstChild);
> }
> }
> Element securityHeader =
> WSSecurityUtil.getSecurityHeader(header, getString(WSHandlerConstants.ACTOR,
> reqData.getMsgContext()), WSConstants.URI_SOAP12_ENV.equals(soapNamespace));
> if (securityHeader == null) {
> securityHeader =
> header.getOwnerDocument().createElementNS(WSConstants.WSSE_NS,
> "wsse:Security");
> securityHeader.setAttributeNS(WSConstants.XMLNS_NS,
> "xmlns:wsse", WSConstants.WSSE_NS);
> final Node firstChild = header.getFirstChild();
> if (firstChild == null) {
> header.appendChild(securityHeader);
> } else {
> header.insertBefore(securityHeader, firstChild);
> }
> }
> super.doSenderAction(doc, reqData, actions, isRequest);
> }
> private Element createElementInSameNamespace(final Document doc,
> final Element parent, final String localName) {
> String qName = localName;
> String prefix = parent.getPrefix();
> if (prefix != null && prefix.length() > 0) {
> qName = prefix + ":" + localName;
> }
> String nsUri = parent.getNamespaceURI();
> return doc.createElementNS(nsUri, qName);
> }
> }
> {code}
> Same kind of document fix should be done on the actions.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)