⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsdlserviceconfigurator.java

📁 Xfire文件 用于开发web service 的一个开源工具 很好用的
💻 JAVA
字号:
package org.codehaus.xfire.wsdl11.parser;import java.io.IOException;import java.lang.reflect.Method;import java.net.URL;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import javax.wsdl.Binding;import javax.wsdl.BindingFault;import javax.wsdl.BindingOperation;import javax.wsdl.Definition;import javax.wsdl.Fault;import javax.wsdl.Operation;import javax.wsdl.Port;import javax.wsdl.PortType;import javax.wsdl.WSDLException;import javax.wsdl.extensions.ExtensibilityElement;import javax.wsdl.extensions.UnknownExtensibilityElement;import javax.wsdl.factory.WSDLFactory;import org.apache.ws.commons.schema.XmlSchemaCollection;import org.codehaus.xfire.XFireFactory;import org.codehaus.xfire.XFireRuntimeException;import org.codehaus.xfire.fault.SoapFaultSerializer;import org.codehaus.xfire.service.FaultInfo;import org.codehaus.xfire.service.OperationInfo;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.ServiceInfo;import org.codehaus.xfire.service.binding.BindingProvider;import org.codehaus.xfire.transport.TransportManager;import org.w3c.dom.Element;import org.xml.sax.InputSource;/** * Configures a prexisting Service via a WSDL. *  * @author Dan Diephouse */public class WSDLServiceConfigurator{    protected final Definition definition;    private List bindingAnnotators = new ArrayList();    private TransportManager transportManager =        XFireFactory.newInstance().getXFire().getTransportManager();        private ServiceInfo serviceInfo;    private BindingProvider bindingProvider;    private Service service;    private javax.wsdl.Service wservice;    private PortType portType;    private Collection ports;    private boolean initService = false;            public WSDLServiceConfigurator(Service service, URL url, TransportManager transportManager)        throws WSDLException, IOException    {        this(service,              WSDLFactory.newInstance().newWSDLReader().readWSDL(null, new InputSource(url.openStream())),              transportManager);    }        public WSDLServiceConfigurator(Service service, Definition def, TransportManager transportManager)    {        this.service = service;        this.serviceInfo = service.getServiceInfo();        this.bindingProvider = service.getBindingProvider();        this.transportManager = transportManager;                this.definition = def;                this.wservice = definition.getService(service.getName());                if (wservice == null)             throw new XFireRuntimeException("Could not find service in wsdl: " + service.getName());                setWrapped();                ports = new ArrayList();        for (Iterator itr = wservice.getPorts().values().iterator(); itr.hasNext();)        {            Port p = (Port) itr.next();                        if (p.getBinding().getPortType().getQName().equals(serviceInfo.getPortType()))            {                ports.add(p);            }        }                bindingAnnotators.add(new SoapBindingAnnotator());    }        private void setWrapped()    {        XmlSchemaCollection schemas = new XmlSchemaCollection();        if (definition.getTypes() == null)        {            service.getServiceInfo().setWrapped(false);            return;        }                for (Iterator itr = definition.getTypes().getExtensibilityElements().iterator(); itr.hasNext();)        {            ExtensibilityElement ee = (ExtensibilityElement) itr.next();                        if (ee instanceof UnknownExtensibilityElement)            {                UnknownExtensibilityElement uee = (UnknownExtensibilityElement) ee;                schemas.read(uee.getElement());            }            else            {                // if we are using wsdl4j >= 1.5.1, a specific extensibility                // element is defined for schemas, so try retrieve the element                try                 {                    Method mth = ee.getClass().getMethod("getElement", new Class[0]);                    Object val = mth.invoke(ee, new Object[0]);                    schemas.read((Element) val);                } catch (Exception e) {                    // Ignore exceptions ?                }            }        }                boolean wrapped = true;                PortType portType = definition.getPortType(service.getServiceInfo().getPortType());            if (portType == null)            throw new XFireRuntimeException("Could not find port type " + service.getServiceInfo().getPortType());                for (Iterator itr = portType.getOperations().iterator(); itr.hasNext();)        {            Operation op = (Operation) itr.next();            if (!WSDLServiceBuilder.isWrapped(op, schemas))            {                wrapped = false;                break;            }        }        service.getServiceInfo().setWrapped(wrapped);    }    public WSDLServiceConfigurator(ServiceInfo serviceInfo,                                   Definition definition,                                    javax.wsdl.Service wservice,                                   PortType portType,                                   Collection ports,                                   BindingProvider bindingProvider,                                   TransportManager transportManager)    {        this.definition = definition;        this.ports = ports;        this.wservice = wservice;        this.portType = portType;        this.bindingProvider = bindingProvider;        this.transportManager = transportManager;        this.serviceInfo = serviceInfo;                initService = true;           bindingAnnotators.add(new SoapBindingAnnotator());    }    public Definition getDefinition()    {        return definition;    }    public TransportManager getTransportManager()    {        return transportManager;    }    public void setTransportManager(TransportManager transportManager)    {        this.transportManager = transportManager;    }    public void configure() throws Exception    {        begin(wservice, portType);                for (Iterator iterator1 = ports.iterator(); iterator1.hasNext();)        {            Port port = (Port) iterator1.next();            Binding binding = port.getBinding();            visit(binding);                        visit(port);        }                end(wservice, portType);    }    protected void visit(Binding binding)    {        BindingAnnotator ann = getBindingAnnotator(binding);                if (ann != null)        {            ann.setBindingProvider(bindingProvider);            ann.setDefinition(definition);            ann.setService(service);            ann.setTransportManager(transportManager);                        ann.visit(binding);                        List bindingOperations = binding.getBindingOperations();            for (int i = 0; i < bindingOperations.size(); i++)            {                BindingOperation bindingOperation =                     (BindingOperation) bindingOperations.get(i);                String opName = bindingOperation.getOperation().getName();                OperationInfo opInfo = serviceInfo.getOperation(opName);                                if (opInfo == null)                {                    throw new XFireRuntimeException("Could not find operation " + opName + " in the service model.");                }                                ann.visit(bindingOperation, opInfo);                                ann.visit(bindingOperation.getBindingInput(),                           bindingOperation.getOperation().getInput(),                          opInfo.getInputMessage());                                if (opInfo.hasOutput())                {                    ann.visit(bindingOperation.getBindingOutput(),                               bindingOperation.getOperation().getOutput(),                              opInfo.getOutputMessage());                }                                Collection bindingFaults = bindingOperation.getBindingFaults().values();                for (Iterator iterator2 = bindingFaults.iterator(); iterator2.hasNext();)                {                    BindingFault bindingFault = (BindingFault) iterator2.next();                    Fault fault = bindingOperation.getOperation().getFault(bindingFault.getName());                    FaultInfo faultInfo = opInfo.getFault(fault.getName());                                        ann.visit(bindingFault, fault, faultInfo);                }            }        }    }    protected BindingAnnotator getBindingAnnotator(Binding binding)    {        for (Iterator itr = bindingAnnotators.iterator(); itr.hasNext();)        {            BindingAnnotator ann = (BindingAnnotator) itr.next();            if (ann.isUnderstood(binding))            {                ann.setService(service);                return ann;            }        }                return null;    }        protected void begin(javax.wsdl.Service wservice, PortType portType)    {        if (initService)        {            service = new Service(serviceInfo);            service.setName(wservice.getQName());        }    }    protected void end(javax.wsdl.Service wservice, PortType portType)    {        if (initService)        {            service.setFaultSerializer(new SoapFaultSerializer());            service.setBindingProvider(bindingProvider);        }    }        protected void visit(javax.wsdl.Port port)    {        BindingAnnotator ann = getBindingAnnotator(port.getBinding());        if (ann != null)        {            ann.visit(port);        }    }    public Service getService()    {        return service;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -