}
}
FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory wsdlFactory = modelFactories.getFactory(org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory.class);
XSDFactory xsdFactory = modelFactories.getFactory(XSDFactory.class);
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
schemaCollection.setSchemaResolver(new XSDURIResolverImpl(xmlMap));
ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);
final org.apache.tuscany.sca.contribution.Contribution contribution = contributionFactory.createContribution();
ProcessorContext processorContext = new ProcessorContext();
ExtensibleModelResolver extensibleResolver = new ExtensibleModelResolver(contribution, registry.getExtensionPoint(ModelResolverExtensionPoint.class), modelFactories);
ModelResolver wsdlResolver = (ModelResolver)extensibleResolver.getModelResolverInstance(WSDLDefinition.class);
XSDModelResolver xsdResolver = (XSDModelResolver)extensibleResolver.getModelResolverInstance(XSDefinition.class);
contribution.setURI("temp");
contribution.setLocation(topWSDLLocation);
contribution.setModelResolver(extensibleResolver);
// read
for (XMLString xmlString : xmlMap.values()){
if (xmlString instanceof WSDLInfo){
WSDLReader reader;
try {
reader = AccessController.doPrivileged(new PrivilegedExceptionAction<WSDLReader>() {
public WSDLReader run() throws WSDLException {
return javax.wsdl.factory.WSDLFactory.newInstance().newWSDLReader();
}
});
} catch (PrivilegedActionException e){
throw (WSDLException)e.getException();
}
reader.setFeature("javax.wsdl.verbose", false);
reader.setFeature("javax.wsdl.importDocuments", true);
final WSDLLocatorImpl locator = new WSDLLocatorImpl(xmlString.getBaseURI(), xmlMap);
final WSDLReader freader = reader;
Definition readDefinition;
try {
readDefinition = AccessController.doPrivileged(new PrivilegedExceptionAction<Definition>() {
public Definition run() throws WSDLException {
return freader.readWSDL(locator);
}
});
} catch (PrivilegedActionException e){
throw (WSDLException)e.getException();
}
WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
wsdlDefinition.setDefinition(readDefinition);
wsdlDefinition.setLocation(new URI(xmlString.getBaseURI()));
((WSDLInfo)xmlString).setWsdlDefintion(wsdlDefinition);
wsdlResolver.addModel(wsdlDefinition, processorContext);
} else {
InputStream inputStream = new ByteArrayInputStream(xmlString.getXmlString().getBytes());
InputSource inputSource = new InputSource(inputStream);
inputSource.setSystemId(xmlString.getBaseURI());
XmlSchema schema = schemaCollection.read(inputSource, null);
inputStream.close();
XSDefinition xsdDefinition = xsdFactory.createXSDefinition();
xsdDefinition.setSchema(schema);
((XSDInfo)xmlString).setXsdDefinition(xsdDefinition);
xsdResolver.addModel(xsdDefinition, processorContext);
}
}
// resolve
for (XMLString xmlString : xmlMap.values()){
if (xmlString instanceof WSDLInfo){
WSDLDefinition wsdlDefinition = ((WSDLInfo)xmlString).getWsdlDefintion();
// link to imports
for (Map.Entry<String, List<javax.wsdl.Import>> entry :
((Map<String, List<javax.wsdl.Import>>)wsdlDefinition.getDefinition().getImports()).entrySet()) {
for (javax.wsdl.Import imp : entry.getValue()) {
String wsdlName = imp.getDefinition().getDocumentBaseURI();
WSDLInfo wsdlInfo = (WSDLInfo)xmlMap.get(getFilenameWithoutPath(wsdlName));
wsdlDefinition.getImportedDefinitions().add(wsdlInfo.getWsdlDefintion());
}
}
// extract any in-line types in the Tuscany model
Types types = wsdlDefinition.getDefinition().getTypes();
if ( types != null){
/* read XSD from WSDL rather than from registry
for (int i=0; i < types.getExtensibilityElements().size(); i++){
String schemaName = xmlString.getBaseURI() + "#" + i++;
XSDInfo xsdInfo = (XSDInfo)xmlMap.get(getFilenameWithoutPath(schemaName));
if (xsdInfo != null){
wsdlDefinition.getXmlSchemas().add(xsdInfo.getXsdDefinition());
}
*/
int index = 0;
for (Object ext : types.getExtensibilityElements()) {
ExtensibilityElement extElement = (ExtensibilityElement)ext;
Element element = null;
if (extElement instanceof Schema) {
element = ((Schema)extElement).getElement();
}
if (element != null) {
XSDefinition xsDefinition = xsdFactory.createXSDefinition();
xsDefinition.setUnresolved(true);
xsDefinition.setNamespace(element.getAttribute("targetNamespace"));
xsDefinition.setDocument(element.getOwnerDocument());
XmlSchema schema = schemaCollection.read(element, null);
xsDefinition.setSchema(schema);