1 package org.objectweb.celtix.tools.generators.java2; 2 3 4 import java.util.Iterator ; 5 import java.util.Map ; 6 import java.util.Set ; 7 import java.util.logging.Level ; 8 import java.util.logging.Logger ; 9 10 import javax.wsdl.Definition; 11 import javax.wsdl.Types; 12 import javax.wsdl.extensions.ExtensionRegistry; 13 import javax.wsdl.extensions.schema.Schema; 14 import javax.xml.bind.SchemaOutputResolver; 15 import javax.xml.namespace.QName ; 16 import javax.xml.parsers.DocumentBuilder ; 17 import javax.xml.parsers.DocumentBuilderFactory ; 18 19 import org.w3c.dom.Document ; 20 import org.w3c.dom.Element ; 21 22 import org.objectweb.celtix.common.i18n.Message; 23 import org.objectweb.celtix.common.logging.LogUtils; 24 import org.objectweb.celtix.tools.common.ProcessorEnvironment; 25 import org.objectweb.celtix.tools.common.ToolException; 26 import org.objectweb.celtix.tools.common.WSDLConstants; 27 import org.objectweb.celtix.tools.common.model.WSDLModel; 28 import org.objectweb.celtix.tools.processors.java2.JavaToWSDLProcessor; 29 public class TypesGenerator { 30 private static final Logger LOG = LogUtils.getL7dLogger(JavaToWSDLProcessor.class); 31 private WSDLModel wmodel; 32 private Definition definition; 33 private ExtensionRegistry extensionRegistry; 34 private ProcessorEnvironment env; 35 36 public TypesGenerator(WSDLModel model , ProcessorEnvironment penv) { 37 this.definition = model.getDefinition(); 38 this.wmodel = model; 39 env = penv; 40 extensionRegistry = definition.getExtensionRegistry(); 41 42 } 43 public void generate() { 44 Message msg = new Message("GENERATE_TYPES_ERROR", LOG); 45 try { 46 wmodel.createJAXBContext(); 47 } catch (Exception e) { 48 LOG.log(Level.SEVERE, "Create jaxbContext error"); 49 throw new ToolException(msg, e); 50 } 51 52 SchemaOutputResolver resolver = new WSDLOutputResolver(env, wmodel); 53 54 try { 55 wmodel.getJaxbContext().generateSchema(resolver); 56 } catch (Exception e2) { 57 throw new ToolException(msg, e2); 58 } 59 60 Types types = definition.createTypes(); 61 62 try { 63 Schema schema; 64 65 schema = (Schema)extensionRegistry.createExtension(Types.class, 66 new QName ("http://www.w3.org/2001/XMLSchema", 67 "schema")); 68 69 DocumentBuilder docBuilder; 70 docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 71 Document doc = docBuilder.newDocument(); 72 Element element = doc.createElement("xsd:schema"); 73 Map <String , String > schemafileMap = wmodel.getSchemaNSFileMap(); 74 75 Set <Map.Entry <String , String >> entryset = schemafileMap.entrySet(); 76 Iterator <Map.Entry <String , String >> ite = entryset.iterator(); 77 while (ite.hasNext()) { 78 Map.Entry <String , String > entry = (Map.Entry <String , String >)ite.next(); 79 Element importelement = doc.createElement("xsd:import"); 80 importelement.setAttribute("namespace", entry.getKey()); 81 importelement.setAttribute("schemaLocation", entry.getValue()); 82 element.appendChild(importelement); 83 } 84 schema.setElement(element); 85 types.addExtensibilityElement(schema); 86 definition.setTypes(types); 87 } catch (Exception e) { 88 throw new ToolException(msg, e); 89 } 90 91 definition.setTargetNamespace(wmodel.getTargetNameSpace()); 92 93 definition.addNamespace(WSDLConstants.WSDL_PREFIX, WSDLConstants.NS_WSDL); 94 definition.addNamespace(WSDLConstants.XSD_PREFIX, WSDLConstants.XSD_NAMESPACE); 95 definition.addNamespace(WSDLConstants.SOAP_PREFIX, WSDLConstants.SOAP11_NAMESPACE); 96 definition.addNamespace(WSDLConstants.TNS_PREFIX, wmodel.getTargetNameSpace()); 97 int i = 0; 98 for (String s : wmodel.getJaxbContext().getKnownNamespaceURIs()) { 99 definition.addNamespace("ns" + (++i), s); 100 } 101 102 } 103 104 105 } 106 | Popular Tags |