[ 
https://issues.apache.org/jira/browse/CXF-3705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergey Zhemzhitsky updated CXF-3705:
------------------------------------

    Description: 
It's impossible to extend 
org.apache.cxf.ws.security.policy.model.AlgorithmSuite with a custom 
non-standad algorithms.

Sometimes it's needed to support non-standard algorithm suite. Now it's hardly 
possible to do.

The possible solution is to refactor 
org.apache.cxf.ws.security.policy.builders.AlgorithmSuiteBuilder to get all 
algorithm suites using cxf extension mechanism, for example, 

{code}
public class AlgorithmSuiteBuilder implements AssertionBuilder<Element> {

    private Bus bus;

    public AlgorithmSuiteBuilder(Bus bus) {
        this.bus = bus;
    }

    public Assertion build(Element element, AssertionBuilderFactory factory)
        throws IllegalArgumentException {

        SPConstants consts = 
SP11Constants.SP_NS.equals(element.getNamespaceURI())
            ? SP11Constants.INSTANCE : SP12Constants.INSTANCE;

        Element policyElem = DOMUtils.getFirstElement(element);

        String algoSuiteName = 
DOMUtils.getFirstElement(policyElem).getLocalName();

        AlgorithmSuiteLoader loader = 
bus.getExtension(AlgorithmSuiteLoader.class);
        AlgorithmSuite suite = loader.getAlgorithmSuite(algoSuiteName, consts);
        if(suite == null) {
            throw new IllegalArgumentException("Algorithm suite \"" + 
algoSuiteName + "\" is not registered");
        }

        return suite;
    }

    public QName[] getKnownElements() {
        return new QName[]{SP11Constants.ALGORITHM_SUITE, 
SP12Constants.ALGORITHM_SUITE};
    }

}
{code}

  was:
It's impossible to extend 
org.apache.cxf.ws.security.policy.model.AlgorithmSuite with a custom 
non-standad algorithms.

Sometimes it's needed to support non-standard algorithm suite. Now it's hardly 
possible to do.

The possible solution is to refactor 
org.apache.cxf.ws.security.policy.builders.AlgorithmSuiteBuilder to get all 
algorithm suites using cxf extension mechanism, for example, 

public class AlgorithmSuiteBuilder implements AssertionBuilder<Element> {

    private Bus bus;

    public AlgorithmSuiteBuilder(Bus bus) {
        this.bus = bus;
    }

    public Assertion build(Element element, AssertionBuilderFactory factory)
        throws IllegalArgumentException {

        SPConstants consts = 
SP11Constants.SP_NS.equals(element.getNamespaceURI())
            ? SP11Constants.INSTANCE : SP12Constants.INSTANCE;

        Element policyElem = DOMUtils.getFirstElement(element);

        String algoSuiteName = 
DOMUtils.getFirstElement(policyElem).getLocalName();

        AlgorithmSuiteLoader loader = 
bus.getExtension(AlgorithmSuiteLoader.class);
        AlgorithmSuite suite = loader.getAlgorithmSuite(algoSuiteName, consts);
        if(suite == null) {
            throw new IllegalArgumentException("Algorithm suite \"" + 
algoSuiteName + "\" is not registered");
        }

        return suite;
    }

    public QName[] getKnownElements() {
        return new QName[]{SP11Constants.ALGORITHM_SUITE, 
SP12Constants.ALGORITHM_SUITE};
    }

}


> It's impossible to extend 
> org.apache.cxf.ws.security.policy.model.AlgorithmSuite with a custom 
> non-standad algorithms.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-3705
>                 URL: https://issues.apache.org/jira/browse/CXF-3705
>             Project: CXF
>          Issue Type: Improvement
>          Components: WS-* Components
>    Affects Versions: 2.4.1
>            Reporter: Sergey Zhemzhitsky
>              Labels: ws-security
>
> It's impossible to extend 
> org.apache.cxf.ws.security.policy.model.AlgorithmSuite with a custom 
> non-standad algorithms.
> Sometimes it's needed to support non-standard algorithm suite. Now it's 
> hardly possible to do.
> The possible solution is to refactor 
> org.apache.cxf.ws.security.policy.builders.AlgorithmSuiteBuilder to get all 
> algorithm suites using cxf extension mechanism, for example, 
> {code}
> public class AlgorithmSuiteBuilder implements AssertionBuilder<Element> {
>     private Bus bus;
>     public AlgorithmSuiteBuilder(Bus bus) {
>         this.bus = bus;
>     }
>     public Assertion build(Element element, AssertionBuilderFactory factory)
>         throws IllegalArgumentException {
>         SPConstants consts = 
> SP11Constants.SP_NS.equals(element.getNamespaceURI())
>             ? SP11Constants.INSTANCE : SP12Constants.INSTANCE;
>         Element policyElem = DOMUtils.getFirstElement(element);
>         String algoSuiteName = 
> DOMUtils.getFirstElement(policyElem).getLocalName();
>         AlgorithmSuiteLoader loader = 
> bus.getExtension(AlgorithmSuiteLoader.class);
>         AlgorithmSuite suite = loader.getAlgorithmSuite(algoSuiteName, 
> consts);
>         if(suite == null) {
>             throw new IllegalArgumentException("Algorithm suite \"" + 
> algoSuiteName + "\" is not registered");
>         }
>         return suite;
>     }
>     public QName[] getKnownElements() {
>         return new QName[]{SP11Constants.ALGORITHM_SUITE, 
> SP12Constants.ALGORITHM_SUITE};
>     }
> }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to