Author: dkulp Date: Thu Dec 10 20:00:09 2009 New Revision: 889397 URL: http://svn.apache.org/viewvc?rev=889397&view=rev Log: Merged revisions 889393 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.2.x-fixes
................ r889393 | dkulp | 2009-12-10 14:55:34 -0500 (Thu, 10 Dec 2009) | 9 lines Merged revisions 889383 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r889383 | dkulp | 2009-12-10 14:45:37 -0500 (Thu, 10 Dec 2009) | 1 line [CXF-1818] Make sure schemaLocations are set for the imported xsds ........ ................ Modified: cxf/branches/2.1.x-fixes/ (props changed) cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaSerializer.java cxf/branches/2.1.x-fixes/tools/javato/ws/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java cxf/branches/2.1.x-fixes/tools/javato/ws/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java Propchange: cxf/branches/2.1.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java?rev=889397&r1=889396&r2=889397&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java (original) +++ cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java Thu Dec 10 20:00:09 2009 @@ -114,6 +114,19 @@ public static Transformer newTransformer() throws TransformerConfigurationException { return getTransformerFactory().newTransformer(); } + public static Transformer newTransformer(int indent) throws TransformerConfigurationException { + if (indent > 0) { + TransformerFactory f = TransformerFactory.newInstance(); + try { + //sun way of setting indent + f.setAttribute("indent-number", Integer.toString(indent)); + } catch (Throwable t) { + //ignore + } + return f.newTransformer(); + } + return getTransformerFactory().newTransformer(); + } public static DocumentBuilder getParser() throws ParserConfigurationException { return getDocumentBuilderFactory().newDocumentBuilder(); @@ -161,6 +174,15 @@ public static void writeTo(Source src, OutputStream os) { writeTo(src, os, -1); } + public static void writeTo(Node node, Writer os) { + writeTo(new DOMSource(node), os); + } + public static void writeTo(Node node, Writer os, int indent) { + writeTo(new DOMSource(node), os, indent); + } + public static void writeTo(Source src, Writer os) { + writeTo(src, os, -1); + } public static void writeTo(Source src, OutputStream os, int indent) { String enc = null; if (src instanceof DOMSource @@ -169,6 +191,18 @@ } writeTo(src, os, indent, enc, "no"); } + public static void writeTo(Source src, Writer os, int indent) { + String enc = null; + if (src instanceof DOMSource + && ((DOMSource)src).getNode() instanceof Document) { + try { + enc = ((Document)((DOMSource)src).getNode()).getXmlEncoding(); + } catch (Exception ex) { + //ignore - not DOM level 3 + } + } + writeTo(src, os, indent, enc, "no"); + } public static void writeTo(Source src, OutputStream os, int indent, @@ -180,7 +214,7 @@ charset = "utf-8"; } - it = newTransformer(); + it = newTransformer(indent); it.setOutputProperty(OutputKeys.METHOD, "xml"); if (indent > -1) { it.setOutputProperty(OutputKeys.INDENT, "yes"); @@ -193,7 +227,31 @@ } catch (TransformerException e) { throw new RuntimeException("Failed to configure TRaX", e); } + } + public static void writeTo(Source src, + Writer os, + int indent, + String charset, + String omitXmlDecl) { + Transformer it; + try { + if (StringUtils.isEmpty(charset)) { + charset = "utf-8"; + } + it = newTransformer(indent); + it.setOutputProperty(OutputKeys.METHOD, "xml"); + if (indent > -1) { + it.setOutputProperty(OutputKeys.INDENT, "yes"); + it.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", + Integer.toString(indent)); + } + it.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, omitXmlDecl); + it.setOutputProperty(OutputKeys.ENCODING, charset); + it.transform(src, new StreamResult(os)); + } catch (TransformerException e) { + throw new RuntimeException("Failed to configure TRaX", e); + } } public static String toString(Source source) throws TransformerException, IOException { return toString(source, null); Modified: cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaSerializer.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaSerializer.java?rev=889397&r1=889396&r2=889397&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaSerializer.java (original) +++ cxf/branches/2.1.x-fixes/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaSerializer.java Thu Dec 10 20:00:09 2009 @@ -31,12 +31,13 @@ import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Node; +import org.apache.cxf.helpers.XMLUtils; + /** * A custom Schema serializer because WSDL4J's is buggy. */ @@ -52,9 +53,7 @@ } private void writeXml(Node n, PrintWriter pw) throws TransformerException { - TransformerFactory tf = TransformerFactory.newInstance(); - - Transformer t = tf.newTransformer(); + Transformer t = XMLUtils.newTransformer(2); t.setOutputProperty(OutputKeys.INDENT, "yes"); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); t.transform(new DOMSource(n), new StreamResult(pw)); Modified: cxf/branches/2.1.x-fixes/tools/javato/ws/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/tools/javato/ws/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java?rev=889397&r1=889396&r2=889397&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/tools/javato/ws/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java (original) +++ cxf/branches/2.1.x-fixes/tools/javato/ws/src/main/java/org/apache/cxf/tools/java2wsdl/generator/wsdl11/WSDL11Generator.java Thu Dec 10 20:00:09 2009 @@ -27,6 +27,7 @@ import java.io.OutputStream; import java.io.Writer; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import javax.wsdl.Definition; @@ -35,7 +36,12 @@ import javax.wsdl.factory.WSDLFactory; import javax.wsdl.xml.WSDLWriter; +import org.w3c.dom.Element; + +import org.apache.cxf.common.WSDLConstants; import org.apache.cxf.common.util.StringUtils; +import org.apache.cxf.helpers.DOMUtils; +import org.apache.cxf.helpers.XMLUtils; import org.apache.cxf.service.model.SchemaInfo; import org.apache.cxf.tools.common.ToolException; import org.apache.cxf.tools.java2wsdl.generator.AbstractGenerator; @@ -93,8 +99,10 @@ for (Map.Entry<String, SchemaInfo> imp : imports.entrySet()) { File impfile = new File(file.getParentFile(), imp.getKey()); + Element el = imp.getValue().getElement(); + updateImports(el, imports); os = FileWriterUtil.getWriter(impfile); - imp.getValue().getSchema().write(os); + XMLUtils.writeTo(el, os, 2); os.close(); } @@ -109,6 +117,20 @@ return def; } + private void updateImports(Element el, Map<String, SchemaInfo> imports) { + List<Element> imps = DOMUtils.getChildrenWithName(el, + WSDLConstants.NS_SCHEMA_XSD, + "import"); + for (Element e : imps) { + String ns = e.getAttribute("namespace"); + for (Map.Entry<String, SchemaInfo> ent : imports.entrySet()) { + if (ent.getValue().getNamespaceURI().equals(ns)) { + e.setAttribute("schemaLocation", ent.getKey()); + } + } + } + } + private void customizing(final File outputdir, final String wsdlName, final Set<String> imports) { Modified: cxf/branches/2.1.x-fixes/tools/javato/ws/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/tools/javato/ws/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java?rev=889397&r1=889396&r2=889397&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/tools/javato/ws/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java (original) +++ cxf/branches/2.1.x-fixes/tools/javato/ws/src/test/java/org/apache/cxf/tools/java2wsdl/processor/JavaToProcessorTest.java Thu Dec 10 20:00:09 2009 @@ -21,14 +21,21 @@ import java.io.File; import java.net.URI; +import java.util.List; import javax.wsdl.Definition; import javax.wsdl.Port; import javax.wsdl.Service; import javax.xml.namespace.QName; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + import org.apache.cxf.common.WSDLConstants; +import org.apache.cxf.common.util.StringUtils; +import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.helpers.WSDLHelper; +import org.apache.cxf.helpers.XMLUtils; import org.apache.cxf.tools.common.ProcessorTestBase; import org.apache.cxf.tools.common.ToolConstants; import org.apache.cxf.tools.common.ToolContext; @@ -49,6 +56,7 @@ public void startUp() throws Exception { env = new ToolContext(); env.put(ToolConstants.CFG_WSDL, ToolConstants.CFG_WSDL); + classPath = System.getProperty("java.class.path"); System.setProperty("java.class.path", getClassPath()); } @@ -328,9 +336,38 @@ assertTrue("Generate Wsdl Fail", wsdlFile.exists()); URI expectedFile = getClass().getResource("expected/xml-bare-expected.wsdl").toURI(); assertWsdlEquals(new File(expectedFile), new File(output, "/xml-bare.wsdl")); - } + @Test + public void testXSDImports() throws Exception { + //Testcase for CXF-1818 + env.put(ToolConstants.CFG_OUTPUTFILE, output.getPath() + "/xml-bare.wsdl"); + env.put(ToolConstants.CFG_CLASSNAME, "org.apache.xml_bare.Greeter"); + env.put(ToolConstants.CFG_CREATE_XSD_IMPORTS, ToolConstants.CFG_CREATE_XSD_IMPORTS); + processor.setEnvironment(env); + processor.process(); + File xsd1 = new File(output, "xml-bare_schema1.xsd"); + File xsd2 = new File(output, "xml-bare_schema2.xsd"); + assertTrue("Generate xsd1 Fail", xsd1.exists()); + assertTrue("Generate xsd2 Fail", xsd2.exists()); + Document doc1 = XMLUtils.parse(xsd1); + Document doc2 = XMLUtils.parse(xsd2); + String imp = findImport(doc2); + if (StringUtils.isEmpty(imp)) { + imp = findImport(doc1); + } + assertNotNull(imp); + assertTrue(imp.contains("xml-bare_schema")); + } + private String findImport(Document doc) { + List<Element> lst = DOMUtils.getChildrenWithName(doc.getDocumentElement(), + WSDLConstants.NS_SCHEMA_XSD, + "import"); + for (Element el : lst) { + return el.getAttribute("schemaLocation"); + } + return null; + } @Test public void testFault() throws Exception {
