class Wsdl {

    public void init() throws IOException, XMLStreamException, ConfigurationException {
        inputXsds = new HashSet<XSD>();
        outputXsds = new HashSet<XSD>();
        xsds = new HashSet<XSD>();
        rootXsds = new HashSet<XSD>();
        Set<XSD> inputRootXsds = new HashSet<XSD>();
        inputRootXsds.addAll(getXsds(inputValidator));
        rootXsds.addAll(inputRootXsds);
        inputXsds.addAll(SchemaUtils.getXsdsRecursive(inputRootXsds));
        xsds.addAll(inputXsds);
        if (outputValidator != null) {
            Set<XSD> outputRootXsds = new HashSet<XSD>();
            outputRootXsds.addAll(getXsds(outputValidator));
            rootXsds.addAll(outputRootXsds);
            outputXsds.addAll(SchemaUtils.getXsdsRecursive(outputRootXsds));
            xsds.addAll(outputXsds);
        }
        prefixByXsd = new LinkedHashMap<XSD, String>();
        namespaceByPrefix = new LinkedHashMap<String, String>();
        int prefixCount = 1;
        xsdsGroupedByNamespace =
                SchemaUtils.getXsdsGroupedByNamespace(xsds, true);
        for (String namespace: xsdsGroupedByNamespace.keySet()) {
            // When a schema has targetNamespace="http://www.w3.org/XML/1998/namespace"
            // it needs to be ignored as prefix xml is the only allowed prefix
            // for namespace http://www.w3.org/XML/1998/namespace. The xml
            // prefix doesn't have to be declared as the prefix xml is by
            // definition bound to the namespace name http://www.w3.org/XML/1998/namespace
            // (see http://www.w3.org/TR/xml-names/#ns-decl).
            if (!"http://www.w3.org/XML/1998/namespace".equals(namespace)) {
                for (XSD xsd: xsdsGroupedByNamespace.get(namespace)) {
                    prefixByXsd.put(xsd, "ns" + prefixCount);
                }
                namespaceByPrefix.put("ns" + prefixCount, namespace);
                prefixCount++;
            }
        }
        for (XSD xsd : xsds) {
            if (StringUtils.isEmpty(xsd.getTargetNamespace())
                    && !xsd.isAddNamespaceToSchema()) {
                warn("XSD '" + xsd
                        + "' doesn't have a targetNamespace and addNamespaceToSchema is false");
            }
        }
        inputRoot = getRoot(inputValidator);
        inputHeaderElement = getHeaderElement(inputValidator, inputXsds);
    	inputHeaderIsOptional = isHeaderOptional(inputValidator);
        inputBodyElement = getBodyElement(inputValidator, inputXsds, "inputValidator");
        if (outputValidator != null) {
            outputRoot = getRoot(outputValidator);
            outputHeaderElement = getHeaderElement(outputValidator, outputXsds);
        	outputHeaderIsOptional = isHeaderOptional(outputValidator);
            outputBodyElement = getBodyElement(outputValidator, outputXsds, "outputValidator");
        }
        for (IListener listener : WsdlUtils.getListeners(pipeLine.getAdapter())) {
            if (listener instanceof WebServiceListener) {
                httpActive = true;
            } else if (listener instanceof JmsListener) {
                jmsActive = true;
            } else if (listener instanceof JavaListener) {
            	JavaListener jl = (JavaListener) listener;
            	if (jl.isHttpWsdl())
            	httpActive = true;
            }
        }
    }

    public  Wsdl(PipeLine pipeLine);
    public  Wsdl(PipeLine pipeLine, String generationInfo);

}