Search in sources :

Example 1 with HandlerChainInfo

use of com.sun.xml.rpc.spi.tools.HandlerChainInfo in project Payara by payara.

the class WsCompile method setupServiceHandlerChain.

private void setupServiceHandlerChain() {
    Model model = wscompile.getProcessor().getModel();
    Collection endpoints = webService.getEndpoints();
    for (Iterator eIter = endpoints.iterator(); eIter.hasNext(); ) {
        WebServiceEndpoint nextEndpoint = (WebServiceEndpoint) eIter.next();
        if (!nextEndpoint.hasHandlers()) {
            continue;
        }
        Port port = wsUtil.getPortFromModel(model, nextEndpoint.getWsdlPort());
        if (port == null) {
            throw new IllegalStateException("Model port for endpoint " + nextEndpoint.getEndpointName() + " not found");
        }
        List handlerChain = nextEndpoint.getHandlers();
        HandlerChainInfo modelHandlerChain = port.getServerHCI();
        List handlerInfoList = new ArrayList();
        // Insert an container handler as the first element.
        // This is needed to perform method authorization checks.
        HandlerInfo preHandler = rpcFactory.createHandlerInfo();
        String handlerClassName = nextEndpoint.implementedByEjbComponent() ? "org.glassfish.webservices.EjbContainerPreHandler" : "org.glassfish.webservices.ServletPreHandler";
        preHandler.setHandlerClassName(handlerClassName);
        handlerInfoList.add(preHandler);
        // Collect all roles defined on each handler and set them on
        // handler chain. NOTE : There is a bit of a mismatch here between
        // 109 and JAXRPC.  JAXRPC only defines roles at the handler chain
        // level, whereas 109 descriptors put roles at the handler level.
        Collection soapRoles = new HashSet();
        for (Iterator hIter = handlerChain.iterator(); hIter.hasNext(); ) {
            WebServiceHandler nextHandler = (WebServiceHandler) hIter.next();
            HandlerInfo handlerInfo = createHandlerInfo(nextHandler);
            handlerInfoList.add(handlerInfo);
            soapRoles.addAll(nextHandler.getSoapRoles());
        }
        // Insert a container handler as the last element in the chain.
        HandlerInfo postHandler = rpcFactory.createHandlerInfo();
        handlerClassName = nextEndpoint.implementedByEjbComponent() ? "org.glassfish.webservices.EjbContainerPostHandler" : "org.glassfish.webservices.ServletPostHandler";
        postHandler.setHandlerClassName(handlerClassName);
        handlerInfoList.add(postHandler);
        // @@@ should probably use addHandler api instead once
        // == bug is fixed.
        modelHandlerChain.setHandlersList(handlerInfoList);
        for (Iterator roleIter = soapRoles.iterator(); roleIter.hasNext(); ) {
            modelHandlerChain.addRole((String) roleIter.next());
        }
    }
}
Also used : HandlerChainInfo(com.sun.xml.rpc.spi.tools.HandlerChainInfo) Port(com.sun.xml.rpc.spi.model.Port) ArrayList(java.util.ArrayList) WebServiceEndpoint(com.sun.enterprise.deployment.WebServiceEndpoint) Model(com.sun.xml.rpc.spi.model.Model) Iterator(java.util.Iterator) Collection(java.util.Collection) ArrayList(java.util.ArrayList) List(java.util.List) HandlerInfo(com.sun.xml.rpc.spi.tools.HandlerInfo) HashSet(java.util.HashSet) WebServiceHandler(com.sun.enterprise.deployment.WebServiceHandler)

Aggregations

WebServiceEndpoint (com.sun.enterprise.deployment.WebServiceEndpoint)1 WebServiceHandler (com.sun.enterprise.deployment.WebServiceHandler)1 Model (com.sun.xml.rpc.spi.model.Model)1 Port (com.sun.xml.rpc.spi.model.Port)1 HandlerChainInfo (com.sun.xml.rpc.spi.tools.HandlerChainInfo)1 HandlerInfo (com.sun.xml.rpc.spi.tools.HandlerInfo)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1