Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.activiti.engine.impl.webservice;
 
 import java.util.List;
 import java.util.Map;
 
 import  javax.wsdl.Definition;
 import  javax.wsdl.Types;
 import  javax.wsdl.WSDLException;
 import  javax.wsdl.extensions.schema.Schema;
 
 import  org.activiti.bpmn.model.Import;
 import  org.activiti.engine.impl.bpmn.data.SimpleStructureDefinition;
 import  org.activiti.engine.impl.bpmn.data.StructureDefinition;
 import  org.activiti.engine.impl.bpmn.parser.BpmnParse;
 import  org.activiti.engine.impl.bpmn.parser.XMLImporter;
 import  org.activiti.engine.impl.util.ReflectUtil;
 import  org.apache.cxf.Bus;
 import  org.apache.cxf.BusFactory;
 import  org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
 import  org.apache.cxf.service.model.EndpointInfo;
 import  org.apache.cxf.service.model.OperationInfo;
 import  org.apache.cxf.service.model.ServiceInfo;
 import  org.apache.cxf.wsdl.WSDLManager;
 import  org.apache.cxf.wsdl11.WSDLServiceBuilder;
 
 import  com.ibm.wsdl.extensions.schema.SchemaImpl;
 import  com.sun.codemodel.JDefinedClass;
 import  com.sun.codemodel.JFieldVar;
 import  com.sun.tools.xjc.ConsoleErrorReporter;
 import  com.sun.tools.xjc.api.ErrorListener;
 import  com.sun.tools.xjc.api.Mapping;
 import  com.sun.tools.xjc.api.S2JJAXBModel;
 import  com.sun.tools.xjc.api.SchemaCompiler;
 import  com.sun.tools.xjc.api.XJC;

Author(s):
Esteban Robles Luna
 
 public class CxfWSDLImporter implements XMLImporter {
 
   protected Map<String, WSService> wsServices = new HashMap<String, WSService>();
   protected Map<String, WSOperation> wsOperations = new HashMap<String, WSOperation>();
   protected Map<String, StructureDefinition> structures = new HashMap<String, StructureDefinition>();
 
   protected String wsdlLocation;
   protected String namespace;
 
   public CxfWSDLImporter() {
     this. = "";
   }
   
   public void importFrom(Import theImport, BpmnParse parse) {
     this. = theImport.getNamespace() == null ? "" : theImport.getNamespace() + ":";
     this.importFrom(theImport.getLocation());
     this.transferImportsToParse(parse);
   }
   
   private void transferImportsToParse(BpmnParse parse) {
     if (parse != null) {
       for (StructureDefinition structure : this..values()) {
         parse.addStructure(structure);
       }
       for (WSService service : this..values()) {
         parse.addService(service);
       }
       for (WSOperation operation : this..values()) {
         parse.addOperation(operation);
       }
     }
   }
 
   public void importFrom(String url) {
     this..clear();
     this..clear();
     this..clear();
 
     this. = url;
 
     try {
       Bus bus = BusFactory.getDefaultBus();
       DynamicClientFactory.newInstance(bus).createClient(url);
       WSDLManager wsdlManager = bus.getExtension(WSDLManager.class);  
       Definition def = wsdlManager.getDefinition(url);
      WSDLServiceBuilder builder = new WSDLServiceBuilder(bus);
      List<ServiceInfo> services = builder.buildServices(def);
      
      for (ServiceInfo service : services) {
        WSService wsService = this.importService(service);
        this..put(this. + wsService.getName(), wsService);
      }
      
      if(def != null && def.getTypes() != null) {
        this.importTypes(def.getTypes());
      }
    } catch (WSDLException e) {
      e.printStackTrace();
    }
  }
  
  private WSService importService(ServiceInfo service) {
    String name = service.getName().getLocalPart();
    String location = "";
    
    for (EndpointInfo endpoint : service.getEndpoints()) {
      location = endpoint.getAddress();
    }
    
    WSService wsService = new WSService(this. + namelocationthis.);
    for (OperationInfo operation : service.getInterface().getOperations()) {
      WSOperation wsOperation = this.importOperation(operationwsService);
      wsService.addOperation(wsOperation);
      this..put(this. + operation.getName().getLocalPart(), wsOperation);
    }
    return wsService;
  }
  private WSOperation importOperation(OperationInfo operation, WSService service) {
    WSOperation wsOperation = new WSOperation(this. + operation.getName().getLocalPart(), operation.getName().getLocalPart(), service);
    return wsOperation;
  }
  
  private void importTypes(Types types) {
    SchemaCompiler compiler = XJC.createSchemaCompiler();
    ErrorListener elForRun = new ConsoleErrorReporter();
    compiler.setErrorListener(elForRun);
    SchemaImpl impl = (SchemaImpl) types.getExtensibilityElements().get(0);
    
    S2JJAXBModel intermediateModel = this.compileModel(typescompilerimpl.getElement());
    Collection<? extends Mapping> mappings = intermediateModel.getMappings();
    for (Mapping mapping : mappings){
      this.importStructure(mapping);
    }
  }
  
  private void importStructure(Mapping mapping) {
    QName qname = mapping.getElement();
    JDefinedClass theClass = (JDefinedClass) mapping.getType().getTypeClass();
    SimpleStructureDefinition structure = new SimpleStructureDefinition(this. + qname.getLocalPart());
    this..put(structure.getId(), structure);
    
    Map<String, JFieldVar> fields = theClass.fields();
    int index = 0;
    for (Entry<String, JFieldVar> entry : fields.entrySet()) {
      Class<?> fieldClass = ReflectUtil.loadClass(entry.getValue().type().boxify().fullName());
      structure.setFieldName(indexentry.getKey(), fieldClass);
      index++;
    }
  }
  
  private S2JJAXBModel compileModel(Types types, SchemaCompiler compilerorg.w3c.dom.Element rootTypes) {
    Schema schema = (Schema) types.getExtensibilityElements().get(0);
    compiler.parseSchema(schema.getDocumentBaseURI() + "#types1"rootTypes);
    S2JJAXBModel intermediateModel = compiler.bind();
    return intermediateModel;
  }
  public Collection<StructureDefinition> getStructures() {
    return this..values();
  }
  public Collection<WSService> getServices() {
    return this..values();
  }
  public Collection<WSOperation> getOperations() {
    return this..values();
  }
New to GrepCode? Check out our FAQ X