public void generateSchema() throws IOException, XMLStreamException, JAXBException { if (_schemaGenerated) return; // We write to DOM so that we can pretty print it. Since this only // happens once, it's not too much of a burden. DOMResult result = new DOMResult(); XMLOutputFactory factory = getXMLOutputFactory(); XMLStreamWriter out = factory.createXMLStreamWriter(result); out.writeStartDocument("UTF-8", "1.0"); writeSchema(out); _schemaBuffer = new CharArrayWriter(); XmlPrinter printer = new XmlPrinter(_schemaBuffer); printer.setPrintDeclaration(true); printer.setStandalone("true"); printer.printPrettyXml(result.getNode()); _schemaGenerated = true; }
/** * To be accurate, all of the actions must have been added before this method is run for the first * time. */ public void generateWSDL() throws IOException, XMLStreamException, JAXBException { if (_wsdlGenerated) return; // We write to DOM so that we can pretty print it. Since this only // happens once, it's not too much of a burden. DOMResult result = new DOMResult(); XMLOutputFactory factory = getXMLOutputFactory(); XMLStreamWriter out = factory.createXMLStreamWriter(result); out.writeStartDocument("UTF-8", "1.0"); // <definitions> out.setDefaultNamespace(WSDL_NAMESPACE); out.writeStartElement(WSDL_NAMESPACE, "definitions"); out.writeAttribute("targetNamespace", _namespace); out.writeAttribute("name", _serviceName); out.writeNamespace(TARGET_NAMESPACE_PREFIX, _namespace); out.writeNamespace("soap", _soapNamespaceURI); // <types> out.writeStartElement(WSDL_NAMESPACE, "types"); if (_separateSchema) { out.writeStartElement(W3C_XML_SCHEMA_NS_URI, "schema"); out.writeEmptyElement(W3C_XML_SCHEMA_NS_URI, "import"); out.writeAttribute("namespace", _namespace); out.writeAttribute("schemaLocation", _serviceName + "_schema1.xsd"); out.writeEndElement(); // schema } else writeSchema(out); out.writeEndElement(); // types // <messages> for (AbstractAction action : _actionNames.values()) action.writeWSDLMessages(out, _soapNamespaceURI); // <portType> out.writeStartElement(WSDL_NAMESPACE, "portType"); out.writeAttribute("name", _portType); for (AbstractAction action : _actionNames.values()) action.writeWSDLOperation(out, _soapNamespaceURI); out.writeEndElement(); // portType // <binding> out.writeStartElement(WSDL_NAMESPACE, "binding"); out.writeAttribute("name", _portName + "Binding"); out.writeAttribute("type", TARGET_NAMESPACE_PREFIX + ':' + _portType); out.writeEmptyElement(_soapNamespaceURI, "binding"); out.writeAttribute("transport", _soapTransport); out.writeAttribute("style", _soapStyle); for (AbstractAction action : _actionNames.values()) action.writeWSDLBindingOperation(out, _soapNamespaceURI); out.writeEndElement(); // binding // <service> out.writeStartElement(WSDL_NAMESPACE, "service"); out.writeAttribute("name", _serviceName); out.writeStartElement(WSDL_NAMESPACE, "port"); out.writeAttribute("name", _portName); out.writeAttribute("binding", TARGET_NAMESPACE_PREFIX + ':' + _portName + "Binding"); out.writeEmptyElement(_soapNamespaceURI, "address"); out.writeAttribute("location", _wsdlLocation); out.writeEndElement(); // port out.writeEndElement(); // service out.writeEndElement(); // definitions _wsdlBuffer = new CharArrayWriter(); XmlPrinter printer = new XmlPrinter(_wsdlBuffer); printer.setPrintDeclaration(true); printer.setStandalone("true"); printer.printPrettyXml(result.getNode()); _wsdlGenerated = true; }