Search in sources :

Example 1 with SOAPBindingImpl

use of com.sun.xml.ws.binding.SOAPBindingImpl in project metro-jax-ws by eclipse-ee4j.

the class SAAJMessageHeaders method getNotUnderstoodHeaders.

@Override
public Set<QName> getNotUnderstoodHeaders(Set<String> roles, Set<QName> knownHeaders, WSBinding binding) {
    Set<QName> notUnderstoodHeaderNames = new HashSet<>();
    if (notUnderstoodCount == null) {
        return notUnderstoodHeaderNames;
    }
    for (Map.Entry<QName, Integer> header : notUnderstoodCount.entrySet()) {
        QName headerName = header.getKey();
        int count = header.getValue();
        if (count <= 0) {
            continue;
        }
        SOAPHeaderElement hdrElem = find(headerName);
        if (!hdrElem.getMustUnderstand()) {
            continue;
        }
        SAAJHeader hdr = new SAAJHeader(hdrElem);
        // mustUnderstand attribute is true - but there may be
        // additional criteria
        boolean understood = false;
        if (roles != null) {
            understood = !roles.contains(hdr.getRole(soapVersion));
        }
        if (understood) {
            continue;
        }
        // or is in knownheaders
        if (binding instanceof SOAPBindingImpl) {
            understood = ((SOAPBindingImpl) binding).understandsHeader(headerName);
            if (!understood) {
                if (knownHeaders != null && knownHeaders.contains(headerName)) {
                    understood = true;
                }
            }
        }
        if (!understood) {
            notUnderstoodHeaderNames.add(headerName);
        }
    }
    return notUnderstoodHeaderNames;
}
Also used : SOAPHeaderElement(jakarta.xml.soap.SOAPHeaderElement) QName(javax.xml.namespace.QName) SAAJHeader(com.sun.xml.ws.message.saaj.SAAJHeader) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet)

Example 2 with SOAPBindingImpl

use of com.sun.xml.ws.binding.SOAPBindingImpl in project metro-jax-ws by eclipse-ee4j.

the class EndpointFactory method create.

public <T> WSEndpoint<T> create(Class<T> implType, boolean processHandlerAnnotation, @Nullable Invoker invoker, @Nullable QName serviceName, @Nullable QName portName, @Nullable Container container, @Nullable WSBinding binding, @Nullable SDDocumentSource primaryWsdl, @Nullable Collection<? extends SDDocumentSource> metadata, EntityResolver resolver, boolean isTransportSynchronous, boolean isStandard) {
    if (implType == null)
        throw new IllegalArgumentException();
    MetadataReader metadataReader = getExternalMetadatReader(implType, binding);
    if (isStandard) {
        verifyImplementorClass(implType, metadataReader);
    }
    if (invoker == null) {
        invoker = InstanceResolver.createDefault(implType).createInvoker();
    }
    // Performance analysis indicates that reading and parsing imported schemas is
    // a major component of Endpoint creation time.  Therefore, modify SDDocumentSource
    // handling to delay iterating collection as long as possible.
    Collection<SDDocumentSource> md = new CollectionCollection<>();
    if (primaryWsdl != null) {
        if (metadata != null) {
            Iterator<? extends SDDocumentSource> it = metadata.iterator();
            if (it.hasNext() && primaryWsdl.equals(it.next()))
                md.addAll(metadata);
            else {
                md.add(primaryWsdl);
                md.addAll(metadata);
            }
        } else
            md.add(primaryWsdl);
    } else if (metadata != null)
        md.addAll(metadata);
    if (container == null)
        container = ContainerResolver.getInstance().getContainer();
    if (serviceName == null)
        serviceName = getDefaultServiceName(implType, metadataReader);
    if (portName == null)
        portName = getDefaultPortName(serviceName, implType, metadataReader);
    {
        // error check
        String serviceNS = serviceName.getNamespaceURI();
        String portNS = portName.getNamespaceURI();
        if (!serviceNS.equals(portNS)) {
            throw new ServerRtException("wrong.tns.for.port", portNS, serviceNS);
        }
    }
    // setting a default binding
    if (binding == null)
        binding = BindingImpl.create(BindingID.parse(implType));
    if (isStandard && primaryWsdl != null) {
        verifyPrimaryWSDL(primaryWsdl, serviceName);
    }
    QName portTypeName = null;
    if (isStandard && implType.getAnnotation(WebServiceProvider.class) == null) {
        portTypeName = RuntimeModeler.getPortTypeName(implType, metadataReader);
    }
    // Categorises the documents as WSDL, Schema etc
    Collection<SDDocumentImpl> docList = categoriseMetadata(md.iterator(), serviceName, portTypeName);
    // Finds the primary WSDL and makes sure that metadata doesn't have
    // two concrete or abstract WSDLs
    SDDocumentImpl primaryDoc = primaryWsdl != null ? SDDocumentImpl.create(primaryWsdl, serviceName, portTypeName) : findPrimary(docList);
    EndpointAwareTube terminal;
    WSDLPort wsdlPort = null;
    AbstractSEIModelImpl seiModel = null;
    // create WSDL model
    if (primaryDoc != null) {
        wsdlPort = getWSDLPort(primaryDoc, docList, serviceName, portName, container, resolver);
    }
    WebServiceFeatureList features = ((BindingImpl) binding).getFeatures();
    if (isStandard) {
        features.parseAnnotations(implType);
    }
    PolicyMap policyMap = null;
    // create terminal pipe that invokes the application
    if (isUseProviderTube(implType, isStandard)) {
        // TODO incase of Provider, provide a way to User for complete control of the message processing by giving
        // ability to turn off the WSDL/Policy based features and its associated tubes.
        // Even in case of Provider, merge all features configured via WSDL/Policy or deployment configuration
        Iterable<WebServiceFeature> configFtrs;
        if (wsdlPort != null) {
            policyMap = wsdlPort.getOwner().getParent().getPolicyMap();
            // Merge features from WSDL and other policy configuration
            configFtrs = wsdlPort.getFeatures();
        } else {
            // No WSDL, so try to merge features from Policy configuration
            policyMap = PolicyResolverFactory.create().resolve(new PolicyResolver.ServerContext(null, container, implType, false));
            configFtrs = PolicyUtil.getPortScopedFeatures(policyMap, serviceName, portName);
        }
        features.mergeFeatures(configFtrs, true);
        terminal = createProviderInvokerTube(implType, binding, invoker, container);
    } else {
        // Create runtime model for non Provider endpoints
        seiModel = createSEIModel(wsdlPort, implType, serviceName, portName, binding, primaryDoc);
        if (binding instanceof SOAPBindingImpl) {
            // set portKnownHeaders on Binding, so that they can be used for MU processing
            ((SOAPBindingImpl) binding).setPortKnownHeaders(((SOAPSEIModel) seiModel).getKnownHeaders());
        }
        // Generate WSDL for SEI endpoints(not for Provider endpoints)
        if (primaryDoc == null) {
            primaryDoc = generateWSDL(binding, seiModel, docList, container, implType);
            // create WSDL model
            wsdlPort = getWSDLPort(primaryDoc, docList, serviceName, portName, container, resolver);
            seiModel.freeze(wsdlPort);
        }
        policyMap = wsdlPort.getOwner().getParent().getPolicyMap();
        // New Features might have been added in WSDL through Policy.
        // Merge features from WSDL and other policy configuration
        // This sets only the wsdl features that are not already set(enabled/disabled)
        features.mergeFeatures(wsdlPort.getFeatures(), true);
        terminal = createSEIInvokerTube(seiModel, invoker, binding);
    }
    // Process @HandlerChain, if handler-chain is not set via Deployment Descriptor
    if (processHandlerAnnotation) {
        processHandlerAnnotation(binding, implType, serviceName, portName);
    }
    // Selects only required metadata for this endpoint from the passed-in metadata
    if (primaryDoc != null) {
        docList = findMetadataClosure(primaryDoc, docList, resolver);
    }
    ServiceDefinitionImpl serviceDefiniton = (primaryDoc != null) ? new ServiceDefinitionImpl(docList, primaryDoc) : null;
    return create(serviceName, portName, binding, container, seiModel, wsdlPort, implType, serviceDefiniton, terminal, isTransportSynchronous, policyMap);
}
Also used : BindingImpl(com.sun.xml.ws.binding.BindingImpl) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl) AbstractSEIModelImpl(com.sun.xml.ws.model.AbstractSEIModelImpl) QName(javax.xml.namespace.QName) MetadataReader(com.sun.xml.ws.api.databinding.MetadataReader) WebServiceFeatureList(com.sun.xml.ws.binding.WebServiceFeatureList) WSDLPort(com.sun.xml.ws.api.model.wsdl.WSDLPort) SDDocumentSource(com.sun.xml.ws.api.server.SDDocumentSource) PolicyMap(com.sun.xml.ws.policy.PolicyMap) WebServiceFeature(jakarta.xml.ws.WebServiceFeature) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl)

Example 3 with SOAPBindingImpl

use of com.sun.xml.ws.binding.SOAPBindingImpl in project metro-jax-ws by eclipse-ee4j.

the class HeaderList method getNotUnderstoodHeaders.

@Override
public Set<QName> getNotUnderstoodHeaders(Set<String> roles, Set<QName> knownHeaders, WSBinding binding) {
    Set<QName> notUnderstoodHeaders = null;
    if (roles == null) {
        roles = new HashSet<>();
    }
    SOAPVersion effectiveSoapVersion = getEffectiveSOAPVersion(binding);
    roles.add(effectiveSoapVersion.implicitRole);
    for (int i = 0; i < size(); i++) {
        if (!isUnderstood(i)) {
            Header header = get(i);
            if (!header.isIgnorable(effectiveSoapVersion, roles)) {
                QName qName = new QName(header.getNamespaceURI(), header.getLocalPart());
                if (binding == null) {
                    // check above
                    if (notUnderstoodHeaders == null) {
                        notUnderstoodHeaders = new HashSet<>();
                    }
                    notUnderstoodHeaders.add(qName);
                } else {
                    // if the binding is not null, see if the binding can understand it
                    if (binding instanceof SOAPBindingImpl && !((SOAPBindingImpl) binding).understandsHeader(qName)) {
                        if (!knownHeaders.contains(qName)) {
                            // logger.info("Element not understood=" + qName);
                            if (notUnderstoodHeaders == null) {
                                notUnderstoodHeaders = new HashSet<>();
                            }
                            notUnderstoodHeaders.add(qName);
                        }
                    }
                }
            }
        }
    }
    return notUnderstoodHeaders;
}
Also used : QName(javax.xml.namespace.QName) SOAPVersion(com.sun.xml.ws.api.SOAPVersion) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl)

Example 4 with SOAPBindingImpl

use of com.sun.xml.ws.binding.SOAPBindingImpl in project metro-jax-ws by eclipse-ee4j.

the class SEIPortInfoTest method testCreateBindingWSFList.

public void testCreateBindingWSFList() throws MalformedURLException {
    SEIPortInfo seiPortInfo = createSEIPortInfo();
    BindingImpl b = seiPortInfo.createBinding(new WebServiceFeatureList(), PORT_INTERFACE);
    boolean understands = ((SOAPBindingImpl) b).understandsHeader(EXTRA_HEADER);
    assertTrue("header " + EXTRA_HEADER + " must be understood", understands);
}
Also used : BindingImpl(com.sun.xml.ws.binding.BindingImpl) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl) WebServiceFeatureList(com.sun.xml.ws.binding.WebServiceFeatureList)

Example 5 with SOAPBindingImpl

use of com.sun.xml.ws.binding.SOAPBindingImpl in project metro-jax-ws by eclipse-ee4j.

the class SEIPortInfoTest method testCreateBindingWSFArray.

public void testCreateBindingWSFArray() throws MalformedURLException {
    SEIPortInfo seiPortInfo = createSEIPortInfo();
    BindingImpl b = seiPortInfo.createBinding(new WebServiceFeature[] {}, PORT_INTERFACE);
    boolean understands = ((SOAPBindingImpl) b).understandsHeader(EXTRA_HEADER);
    assertTrue("header " + EXTRA_HEADER + " must be understood", understands);
}
Also used : BindingImpl(com.sun.xml.ws.binding.BindingImpl) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl) SOAPBindingImpl(com.sun.xml.ws.binding.SOAPBindingImpl)

Aggregations

SOAPBindingImpl (com.sun.xml.ws.binding.SOAPBindingImpl)5 BindingImpl (com.sun.xml.ws.binding.BindingImpl)3 QName (javax.xml.namespace.QName)3 WebServiceFeatureList (com.sun.xml.ws.binding.WebServiceFeatureList)2 SOAPVersion (com.sun.xml.ws.api.SOAPVersion)1 MetadataReader (com.sun.xml.ws.api.databinding.MetadataReader)1 WSDLPort (com.sun.xml.ws.api.model.wsdl.WSDLPort)1 SDDocumentSource (com.sun.xml.ws.api.server.SDDocumentSource)1 SAAJHeader (com.sun.xml.ws.message.saaj.SAAJHeader)1 AbstractSEIModelImpl (com.sun.xml.ws.model.AbstractSEIModelImpl)1 PolicyMap (com.sun.xml.ws.policy.PolicyMap)1 SOAPHeaderElement (jakarta.xml.soap.SOAPHeaderElement)1 WebServiceFeature (jakarta.xml.ws.WebServiceFeature)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1