Author: dkulp Date: Wed Nov 4 18:15:24 2009 New Revision: 832828 URL: http://svn.apache.org/viewvc?rev=832828&view=rev Log: Merged revisions 832135 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.2.x-fixes
................ r832135 | dkulp | 2009-11-02 17:08:25 -0500 (Mon, 02 Nov 2009) | 10 lines Merged revisions 832126 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r832126 | dkulp | 2009-11-02 17:02:47 -0500 (Mon, 02 Nov 2009) | 2 lines [CXF-2516] Make more attempts to get the schema loaded for use with validation. ........ ................ Modified: cxf/branches/2.1.x-fixes/ (props changed) cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java Propchange: cxf/branches/2.1.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java?rev=832828&r1=832827&r2=832828&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java (original) +++ cxf/branches/2.1.x-fixes/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java Wed Nov 4 18:15:24 2009 @@ -23,13 +23,15 @@ import java.io.InputStream; import java.io.Reader; import java.io.StringReader; -import java.io.StringWriter; +import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -51,7 +53,6 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; @@ -77,6 +78,7 @@ import org.apache.cxf.resource.ExtendedURIResolver; import org.apache.cxf.service.model.SchemaInfo; import org.apache.cxf.service.model.ServiceInfo; +import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.staxutils.W3CDOMStreamWriter; import org.apache.cxf.transport.Destination; import org.apache.cxf.transport.MultiplexDestination; @@ -104,24 +106,14 @@ * the code in here. */ private static final class SchemaLSResourceResolver implements LSResourceResolver { - private final Map<String, DOMSource> schemas; + private final Map<String, String> schemas; + private final Set<String> done = new HashSet<String>(); private final ExtendedURIResolver resolver = new ExtendedURIResolver(); - private SchemaLSResourceResolver(Map<String, DOMSource> schemas) { + private SchemaLSResourceResolver(Map<String, String> schemas) { this.schemas = schemas; } - private Reader getSchemaAsStream(DOMSource source) { - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - try { - TransformerFactory.newInstance().newTransformer().transform(source, result); - } catch (Exception e) { - throw new RuntimeException(e); - } - return new StringReader(writer.toString()); - } - public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { @@ -131,28 +123,37 @@ URI uri = new URI(baseURI); uri = uri.resolve(systemId); newId = uri.toString(); + if (newId.equals(systemId)) { + URL url = new URL(baseURI); + url = new URL(url, systemId); + newId = url.toExternalForm(); + } } catch (URISyntaxException e) { //ignore + } catch (MalformedURLException e) { + //ignore } } + if (done.contains(newId + ":" + namespaceURI)) { + return null; + } if (schemas.containsKey(newId + ":" + namespaceURI)) { - DOMSource ds = schemas.remove(newId + ":" + namespaceURI); + String ds = schemas.remove(newId + ":" + namespaceURI); LSInputImpl impl = new LSInputImpl(); impl.setSystemId(newId); impl.setBaseURI(newId); - impl.setCharacterStream(getSchemaAsStream(ds)); + impl.setCharacterStream(new StringReader(ds)); + done.add(newId + ":" + namespaceURI); return impl; } - - for (Map.Entry<String, DOMSource> ent : schemas.entrySet()) { - if (ent.getKey().endsWith(namespaceURI)) { - schemas.remove(ent.getKey()); - LSInputImpl impl = new LSInputImpl(); - impl.setSystemId(newId); - impl.setBaseURI(newId); - impl.setCharacterStream(getSchemaAsStream(ent.getValue())); - return impl; - } + if (schemas.containsKey(newId + ":null")) { + String ds = schemas.get(newId + ":null"); + LSInputImpl impl = new LSInputImpl(); + impl.setSystemId(newId); + impl.setBaseURI(newId); + impl.setCharacterStream(new StringReader(ds)); + done.add(newId + ":" + namespaceURI); + return impl; } //REVIST - we need to get catalogs in here somehow :-( @@ -585,18 +586,24 @@ Schema schema = serviceInfo.getProperty(Schema.class.getName(), Schema.class); if (schema == null) { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Map<String, DOMSource> schemaSourcesMap = new LinkedHashMap<String, DOMSource>(); - for (SchemaInfo si : serviceInfo.getSchemas()) { - Element el = si.getElement(); - String baseURI = el.getBaseURI(); - if (baseURI == null) { - baseURI = si.getSystemId(); - } - DOMSource ds = new DOMSource(el, baseURI); - schemaSourcesMap.put(si.getSystemId() + ":" + si.getNamespaceURI(), ds); - } + Map<String, String> schemaSourcesMap = new LinkedHashMap<String, String>(); + Map<String, Source> schemaSourcesMap2 = new LinkedHashMap<String, Source>(); try { + for (SchemaInfo si : serviceInfo.getSchemas()) { + Element el = si.getElement(); + String baseURI = el.getBaseURI(); + if (baseURI == null) { + baseURI = si.getSystemId(); + } + DOMSource ds = new DOMSource(el, baseURI); + schemaSourcesMap2.put(si.getSystemId() + ":" + si.getNamespaceURI(), ds); + + String s = StaxUtils.toString(el); + schemaSourcesMap.put(si.getSystemId() + ":" + si.getNamespaceURI(), s); + } + + for (XmlSchema sch : serviceInfo.getXmlSchemaCollection().getXmlSchemas()) { if (sch.getSourceURI() != null && !schemaSourcesMap.containsKey(sch.getSourceURI() + ":" @@ -622,16 +629,22 @@ } catch (IOException ex) { //ignore } - - DOMSource ss = new DOMSource(doc, sch.getSourceURI()); + String s = StaxUtils.toString(doc); schemaSourcesMap.put(sch.getSourceURI() + ":" - + sch.getTargetNamespace(), ss); + + sch.getTargetNamespace(), s); + + Source source = new StreamSource(new StringReader(s), sch.getSourceURI()); + schemaSourcesMap2.put(sch.getSourceURI() + ":" + + sch.getTargetNamespace(), source); } } + factory.setResourceResolver(new SchemaLSResourceResolver(schemaSourcesMap)); - schema = factory.newSchema(schemaSourcesMap.values() - .toArray(new Source[schemaSourcesMap.size()])); + schema = factory.newSchema(schemaSourcesMap2.values() + .toArray(new Source[schemaSourcesMap2.size()])); + + } catch (Exception ex) { // Something not right with the schema from the wsdl. LOG.log(Level.WARNING, "SAXException for newSchema() on ", ex); Modified: cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?rev=832828&r1=832827&r2=832828&view=diff ============================================================================== --- cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java (original) +++ cxf/branches/2.1.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java Wed Nov 4 18:15:24 2009 @@ -22,6 +22,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; +import java.io.StringWriter; import java.io.Writer; import java.util.Iterator; import java.util.concurrent.BlockingQueue; @@ -1174,4 +1175,19 @@ //shouldn't get here } } + public static String toString(Document doc) throws XMLStreamException { + StringWriter sw = new StringWriter(1024); + XMLStreamWriter writer = createXMLStreamWriter(sw); + copy(doc, writer); + writer.flush(); + return sw.toString(); + } + public static String toString(Element el) throws XMLStreamException { + StringWriter sw = new StringWriter(1024); + XMLStreamWriter writer = createXMLStreamWriter(sw); + copy(el, writer); + writer.flush(); + return sw.toString(); + } + }
