// 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)