Search in sources :

Example 1 with ReliabilityConfig

use of com.sun.enterprise.deployment.runtime.ws.ReliabilityConfig in project Payara by payara.

the class WSServletContextListener method registerEndpoint.

private void registerEndpoint(WebServiceEndpoint endpoint, ServletContext servletContext) throws Exception {
    ClassLoader classLoader = servletContext.getClassLoader();
    WsUtil wsu = new WsUtil();
    // Complete all the injections that are required
    Class serviceEndpointClass = Class.forName(endpoint.getServletImplClass(), true, classLoader);
    // Get the proper binding using BindingID
    String givenBinding = endpoint.getProtocolBinding();
    // TODO Rama
    // if(endpoint.getWsdlExposed() != null) {
    // wsdlExposed = Boolean.parseBoolean(endpoint.getWsdlExposed());
    // }
    // Get list of all wsdls and schema
    SDDocumentSource primaryWsdl = null;
    Collection docs = null;
    if (endpoint.getWebService().hasWsdlFile()) {
        URL pkgedWsdl = null;
        try {
            pkgedWsdl = servletContext.getResource('/' + endpoint.getWebService().getWsdlFileUri());
        } catch (MalformedURLException e) {
            logger.log(Level.SEVERE, LogUtils.CANNOT_LOAD_WSDL_FROM_APPLICATION, e.getMessage());
        }
        if (pkgedWsdl == null) {
            pkgedWsdl = endpoint.getWebService().getWsdlFileUrl();
        }
        if (pkgedWsdl != null) {
            primaryWsdl = SDDocumentSource.create(pkgedWsdl);
            docs = wsu.getWsdlsAndSchemas(pkgedWsdl);
            if (logger.isLoggable(Level.FINE)) {
                logger.log(Level.FINE, LogUtils.CREATING_ENDPOINT_FROM_PACKAGED_WSDL, primaryWsdl.getSystemId().toString());
                logger.log(Level.FINE, LogUtils.METADATA_DOCS);
                for (Object source : docs) {
                    logger.log(Level.FINE, ((SDDocumentSource) source).getSystemId().toString());
                }
            }
        }
    }
    // Create a Container to pass ServletContext and also inserting the pipe
    JAXWSContainer container = new JAXWSContainer(servletContext, endpoint);
    // Get catalog info
    java.net.URL catalogURL = servletContext.getResource('/' + endpoint.getBundleDescriptor().getDeploymentDescriptorDir() + File.separator + "jax-ws-catalog.xml");
    // Create Binding and set service side handlers on this binding
    boolean mtomEnabled = wsu.getMtom(endpoint);
    WSBinding binding = null;
    // Only if MTOm is enabled create the Binding with the MTOMFeature
    ArrayList<WebServiceFeature> wsFeatures = new ArrayList<WebServiceFeature>();
    // Only if MTOm is enabled create the Binding with the MTOMFeature
    if (mtomEnabled) {
        int mtomThreshold = endpoint.getMtomThreshold() != null ? Integer.parseInt(endpoint.getMtomThreshold()) : 0;
        MTOMFeature mtom = new MTOMFeature(true, mtomThreshold);
        wsFeatures.add(mtom);
    }
    Addressing addressing = endpoint.getAddressing();
    if (addressing != null) {
        AddressingFeature addressingFeature = new AddressingFeature(addressing.isEnabled(), addressing.isRequired(), getResponse(addressing.getResponses()));
        wsFeatures.add(addressingFeature);
    }
    RespectBinding rb = endpoint.getRespectBinding();
    if (rb != null) {
        RespectBindingFeature rbFeature = new RespectBindingFeature(rb.isEnabled());
        wsFeatures.add(rbFeature);
    }
    if (endpoint.getValidateRequest() != null && Boolean.parseBoolean(endpoint.getValidateRequest())) {
        // enable SchemaValidationFeature
        wsFeatures.add(new SchemaValidationFeature());
    }
    if (endpoint.getStreamAttachments() != null && Boolean.parseBoolean(endpoint.getStreamAttachments())) {
        // enable StreamingAttachmentsFeature
        wsFeatures.add(new StreamingAttachmentFeature());
    }
    if (endpoint.getReliabilityConfig() != null) {
        // TODO Revisit later after Metro provides generic method to pass partial configuration to Metro runtime.
        // Only partial configuration is specified in webservices DD, but the information for creating complete RM feature should be gathered
        // from wsdl policy, annotation or metro configuration file. For ex: RmProtocolVersion would be decided by  policy assertion.
        // For now, the feature would be constructed from default values, overriding any configuration specified in wsdl or metro configuration file..
        ReliabilityConfig rxConfig = endpoint.getReliabilityConfig();
        ReliableMessagingFeatureBuilder rmbuilder = new ReliableMessagingFeatureBuilder(RmProtocolVersion.getDefault());
        if (rxConfig.getInactivityTimeout() != null) {
            rmbuilder.sequenceInactivityTimeout(Long.parseLong(rxConfig.getInactivityTimeout().trim()));
        }
        if (endpoint.getHttpResponseBufferSize() != null) {
            rmbuilder.destinationBufferQuota(Long.parseLong(endpoint.getHttpResponseBufferSize().trim()));
        }
        if (rxConfig.getBaseRetransmissionInterval() != null) {
            rmbuilder.messageRetransmissionInterval(Long.parseLong(rxConfig.getBaseRetransmissionInterval().trim()));
        }
        if (rxConfig.getRetransmissionExponentialBackoff() != null) {
            rmbuilder.retransmissionBackoffAlgorithm(Boolean.parseBoolean(rxConfig.getRetransmissionExponentialBackoff()) ? ReliableMessagingFeature.BackoffAlgorithm.EXPONENTIAL : ReliableMessagingFeature.BackoffAlgorithm.getDefault());
        }
        if (rxConfig.getAcknowledgementInterval() != null) {
            rmbuilder.acknowledgementTransmissionInterval(Long.parseLong(rxConfig.getAcknowledgementInterval().trim()));
        }
        if (rxConfig.getSequenceExpiration() != null) {
            logger.log(Level.INFO, LogUtils.CONFIGURATION_IGNORE_IN_WLSWS, new Object[] { endpoint.getEndpointName(), "<sequence-expiration>" });
        }
        if (rxConfig.getBufferRetryCount() != null) {
            rmbuilder.maxMessageRetransmissionCount(Long.parseLong(rxConfig.getBufferRetryCount().trim()));
        }
        if (rxConfig.getBufferRetryDelay() != null) {
            logger.log(Level.INFO, LogUtils.CONFIGURATION_IGNORE_IN_WLSWS, new Object[] { endpoint.getEndpointName(), "<buffer-retry-delay>" });
        }
        wsFeatures.add(rmbuilder.build());
    } else {
        if (endpoint.getHttpResponseBufferSize() != null) {
            logger.log(Level.WARNING, LogUtils.CONFIGURATION_UNSUPPORTED_IN_WLSWS, new Object[] { endpoint.getEndpointName(), "<http-response-buffersize>" });
        }
    }
    if (wsFeatures.size() > 0) {
        binding = BindingID.parse(givenBinding).createBinding(wsFeatures.toArray(new WebServiceFeature[wsFeatures.size()]));
    } else {
        binding = BindingID.parse(givenBinding).createBinding();
    }
    wsu.configureJAXWSServiceHandlers(endpoint, givenBinding, binding);
    // See if it is configured with JAX-WS extension InstanceResolver annotation like
    // @com.sun.xml.ws.developer.servlet.HttpSessionScope or @com.sun.xml.ws.developer.Stateful
    InstanceResolver ir = InstanceResolver.createFromInstanceResolverAnnotation(serviceEndpointClass);
    // TODO - Implement 109 StatefulInstanceResolver ??
    if (ir == null) {
        // use our own InstanceResolver that does not call @PostConstuct method before
        // @Resource injections have happened.
        ir = new InstanceResolverImpl(serviceEndpointClass);
    }
    Invoker inv = ir.createInvoker();
    WSEndpoint wsep = WSEndpoint.create(// The endpoint class
    serviceEndpointClass, // we do not want JAXWS to process @HandlerChain
    false, inv, // the service QName
    endpoint.getServiceName(), // the port
    endpoint.getWsdlPort(), // Our container with info on security/monitoring pipe
    container, // Derive binding
    binding, // primary WSDL
    primaryWsdl, // Collection of imported WSDLs and schema
    docs, catalogURL);
    // Fix for 6852 Add the ServletAdapter which implements the BoundEndpoint
    // container.addEndpoint(wsep);
    // For web components, this will be relative to the web app
    // context root.  Make sure there is a leading slash.
    String uri = endpoint.getEndpointAddressUri();
    String urlPattern = uri.startsWith("/") ? uri : "/" + uri;
    // The whole web app should have a single adapter list
    // This is to enable JAXWS publish WSDLs with proper addresses
    ServletAdapter adapter;
    synchronized (this) {
        ServletAdapterList list = (ServletAdapterList) servletContext.getAttribute("ADAPTER_LIST");
        if (list == null) {
            list = new ServletAdapterList();
            servletContext.setAttribute("ADAPTER_LIST", list);
        }
        adapter = ServletAdapter.class.cast(list.createAdapter(endpoint.getName(), urlPattern, wsep));
        container.addEndpoint(adapter);
    }
    registerEndpointUrlPattern(urlPattern, adapter);
}
Also used : WSBinding(com.sun.xml.ws.api.WSBinding) MalformedURLException(java.net.MalformedURLException) ReliabilityConfig(com.sun.enterprise.deployment.runtime.ws.ReliabilityConfig) AddressingFeature(javax.xml.ws.soap.AddressingFeature) URL(java.net.URL) ArrayList(java.util.ArrayList) URL(java.net.URL) RespectBindingFeature(javax.xml.ws.RespectBindingFeature) ServletAdapterList(com.sun.xml.ws.transport.http.servlet.ServletAdapterList) ServletAdapter(com.sun.xml.ws.transport.http.servlet.ServletAdapter) MTOMFeature(javax.xml.ws.soap.MTOMFeature) StreamingAttachmentFeature(com.sun.xml.ws.developer.StreamingAttachmentFeature) WebServiceFeature(javax.xml.ws.WebServiceFeature) Collection(java.util.Collection) ReliableMessagingFeatureBuilder(com.sun.xml.ws.rx.rm.api.ReliableMessagingFeatureBuilder) SchemaValidationFeature(com.sun.xml.ws.developer.SchemaValidationFeature)

Aggregations

ReliabilityConfig (com.sun.enterprise.deployment.runtime.ws.ReliabilityConfig)1 WSBinding (com.sun.xml.ws.api.WSBinding)1 SchemaValidationFeature (com.sun.xml.ws.developer.SchemaValidationFeature)1 StreamingAttachmentFeature (com.sun.xml.ws.developer.StreamingAttachmentFeature)1 ReliableMessagingFeatureBuilder (com.sun.xml.ws.rx.rm.api.ReliableMessagingFeatureBuilder)1 ServletAdapter (com.sun.xml.ws.transport.http.servlet.ServletAdapter)1 ServletAdapterList (com.sun.xml.ws.transport.http.servlet.ServletAdapterList)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 RespectBindingFeature (javax.xml.ws.RespectBindingFeature)1 WebServiceFeature (javax.xml.ws.WebServiceFeature)1 AddressingFeature (javax.xml.ws.soap.AddressingFeature)1 MTOMFeature (javax.xml.ws.soap.MTOMFeature)1