You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/05/30 21:10:31 UTC
svn commit: r661821 -
/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java
Author: dkulp
Date: Fri May 30 12:10:31 2008
New Revision: 661821
URL: http://svn.apache.org/viewvc?rev=661821&view=rev
Log:
Collect all the schemas in the schemaCollection upfront to create the schema for validation.
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java?rev=661821&r1=661820&r2=661821&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java Fri May 30 12:10:31 2008
@@ -24,7 +24,7 @@
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
-import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
@@ -569,20 +569,46 @@
Schema schema = serviceInfo.getProperty(Schema.class.getName(), Schema.class);
if (schema == null) {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
- List<Source> schemaSources = new ArrayList<Source>();
- for (SchemaInfo schemaInfo : serviceInfo.getSchemas()) {
- Source source = new DOMSource(schemaInfo.getElement());
- String baseURI = schemaInfo.getElement().getBaseURI();
- if (baseURI != null) {
- source.setSystemId(baseURI);
- } else {
- source.setSystemId(schemaInfo.getSystemId());
+ Map<String, Source> schemaSourcesMap = new LinkedHashMap<String, Source>();
+ for (SchemaInfo si : serviceInfo.getSchemas()) {
+ Element el = si.getElement();
+ String baseURI = el.getBaseURI();
+ if (baseURI == null) {
+ baseURI = si.getSystemId();
}
- schemaSources.add(source);
+ DOMSource ds = new DOMSource(el, baseURI);
+ schemaSourcesMap.put(si.getSystemId() + ":" + si.getNamespaceURI(), ds);
}
+
+ for (XmlSchema sch : serviceInfo.getXmlSchemaCollection().getXmlSchemas()) {
+ if (sch.getSourceURI() != null
+ && !schemaSourcesMap.containsKey(sch.getSourceURI() + ":"
+ + sch.getTargetNamespace())) {
+
+ InputStream ins = null;
+ try {
+ URL url = new URL(sch.getSourceURI());
+ ins = url.openStream();
+ } catch (Exception e) {
+ //ignore, we'll just use what we have. (though
+ //bugs in XmlSchema could make this less useful)
+ }
+
+ if (ins == null) {
+ LoadingByteArrayOutputStream out = new LoadingByteArrayOutputStream();
+ sch.write(out);
+ ins = out.createInputStream();
+ }
+ StreamSource ss = new StreamSource(ins, sch.getSourceURI());
+ schemaSourcesMap.put(sch.getSourceURI() + ":"
+ + sch.getTargetNamespace(), ss);
+ }
+ }
+
try {
factory.setResourceResolver(new SchemaLSResourceResolver(serviceInfo));
- schema = factory.newSchema(schemaSources.toArray(new Source[schemaSources.size()]));
+ schema = factory.newSchema(schemaSourcesMap.values()
+ .toArray(new Source[schemaSourcesMap.size()]));
} catch (SAXException ex) {
// Something not right with the schema from the wsdl.
LOG.log(Level.WARNING, "SAXException for newSchema() on ", ex);