Return-Path: Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: (qmail 10081 invoked from network); 12 Mar 2010 15:17:15 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 12 Mar 2010 15:17:15 -0000 Received: (qmail 61607 invoked by uid 500); 12 Mar 2010 15:16:38 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 61490 invoked by uid 500); 12 Mar 2010 15:16:38 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 61483 invoked by uid 99); 12 Mar 2010 15:16:38 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Mar 2010 15:16:38 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Mar 2010 15:16:36 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 63C2F23889B2; Fri, 12 Mar 2010 15:16:16 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r922289 - in /cxf/trunk: api/src/main/java/org/apache/cxf/wsdl/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/core/src/test/java/org/apache/cxf/wsdl11/ Date: Fri, 12 Mar 2010 15:16:16 -0000 To: commits@cxf.apache.org From: dkulp@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100312151616.63C2F23889B2@eris.apache.org> Author: dkulp Date: Fri Mar 12 15:16:13 2010 New Revision: 922289 URL: http://svn.apache.org/viewvc?rev=922289&view=rev Log: [CXF-2708] Add more work to find schemas to create the schema for validation Modified: cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java cxf/trunk/rt/core/src/test/java/org/apache/cxf/wsdl11/WSDLServiceBuilderTest.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=922289&r1=922288&r2=922289&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 Mar 12 15:16:13 2010 @@ -67,6 +67,7 @@ import org.w3c.dom.ls.LSResourceResolver import org.xml.sax.InputSource; import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.common.WSDLConstants; import org.apache.cxf.common.i18n.Message; import org.apache.cxf.common.logging.LogUtils; @@ -78,6 +79,7 @@ import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.helpers.LoadingByteArrayOutputStream; import org.apache.cxf.helpers.XMLUtils; import org.apache.cxf.resource.ExtendedURIResolver; +import org.apache.cxf.resource.ResourceManager; import org.apache.cxf.service.model.SchemaInfo; import org.apache.cxf.service.model.ServiceInfo; import org.apache.cxf.staxutils.StaxUtils; @@ -111,9 +113,11 @@ public final class EndpointReferenceUtil private final Map schemas; private final Set done = new HashSet(); private final ExtendedURIResolver resolver = new ExtendedURIResolver(); + private final Bus bus; - private SchemaLSResourceResolver(Map schemas) { + private SchemaLSResourceResolver(Map schemas, Bus b) { this.schemas = schemas; + this.bus = b; } public LSInput resolveResource(String type, String namespaceURI, String publicId, @@ -139,38 +143,71 @@ public final class EndpointReferenceUtil if (done.contains(newId + ":" + namespaceURI)) { return null; } + LSInputImpl impl = null; + if (schemas.containsKey(newId + ":" + namespaceURI)) { byte[] ds = schemas.remove(newId + ":" + namespaceURI); - LSInputImpl impl = new LSInputImpl(); + impl = new LSInputImpl(); impl.setSystemId(newId); impl.setBaseURI(newId); impl.setByteStream(new ByteArrayInputStream(ds)); done.add(newId + ":" + namespaceURI); - return impl; } - if (schemas.containsKey(newId + ":null")) { + if (impl == null && schemas.containsKey(newId + ":null")) { byte[] ds = schemas.get(newId + ":null"); - LSInputImpl impl = new LSInputImpl(); + impl = new LSInputImpl(); impl.setSystemId(newId); impl.setBaseURI(newId); impl.setByteStream(new ByteArrayInputStream(ds)); done.add(newId + ":" + namespaceURI); - return impl; } - + if (impl == null && bus != null) { + ResourceManager rm = bus.getExtension(ResourceManager.class); + URL url = rm == null ? null : rm.resolveResource(systemId, URL.class); + if (url != null) { + newId = url.toString(); + if (done.contains(newId + ":" + namespaceURI)) { + return null; + } + if (schemas.containsKey(newId + ":" + namespaceURI)) { + byte[] ds = schemas.remove(newId + ":" + namespaceURI); + impl = new LSInputImpl(); + impl.setSystemId(newId); + impl.setBaseURI(newId); + impl.setByteStream(new ByteArrayInputStream(ds)); + done.add(newId + ":" + namespaceURI); + } + } + } + if (impl != null) { + return impl; + } + for (Map.Entry ent : schemas.entrySet()) { + if (ent.getKey().endsWith(systemId + ":" + namespaceURI)) { + schemas.remove(ent.getKey()); + impl = new LSInputImpl(); + impl.setSystemId(newId); + impl.setBaseURI(newId); + impl.setCharacterStream( + new InputStreamReader( + new ByteArrayInputStream(ent.getValue()))); + done.add(newId + ":" + namespaceURI); + return impl; + } + } // handle case where given systemId is null (so that // direct key lookup fails) by scanning through map // searching for a namespace match - // for (Map.Entry ent : schemas.entrySet()) { if (ent.getKey().endsWith(namespaceURI)) { schemas.remove(ent.getKey()); - LSInputImpl impl = new LSInputImpl(); + impl = new LSInputImpl(); impl.setSystemId(newId); impl.setBaseURI(newId); impl.setCharacterStream( new InputStreamReader( new ByteArrayInputStream(ent.getValue()))); + done.add(newId + ":" + namespaceURI); return impl; } } @@ -182,15 +219,14 @@ public final class EndpointReferenceUtil if (systemId != null) { InputSource source = resolver.resolve(systemId, baseURI); if (source != null) { - LSInputImpl impl = new LSInputImpl(); + impl = new LSInputImpl(); impl.setByteStream(source.getByteStream()); impl.setSystemId(source.getSystemId()); impl.setPublicId(source.getPublicId()); - return impl; } } LOG.warning("Could not resolve Schema for " + systemId); - return null; + return impl; } } @@ -605,7 +641,10 @@ public final class EndpointReferenceUtil } - private static Schema createSchema(ServiceInfo serviceInfo) { + private static Schema createSchema(ServiceInfo serviceInfo, Bus b) { + if (b == null) { + b = BusFactory.getThreadDefaultBus(false); + } Schema schema = serviceInfo.getProperty(Schema.class.getName(), Schema.class); if (schema == null) { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); @@ -665,17 +704,17 @@ public final class EndpointReferenceUtil } - factory.setResourceResolver(new SchemaLSResourceResolver(schemaSourcesMap)); + factory.setResourceResolver(new SchemaLSResourceResolver(schemaSourcesMap, b)); 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); + LOG.log(Level.WARNING, "SAXException for newSchema()", ex); for (SchemaInfo schemaInfo : serviceInfo.getSchemas()) { String s = XMLUtils.toString(schemaInfo.getElement(), 4); - LOG.log(Level.WARNING, "Schema for: " + schemaInfo.getNamespaceURI() + "\n" + s); + LOG.log(Level.INFO, "Schema for: " + schemaInfo.getNamespaceURI() + "\n" + s); } } serviceInfo.setProperty(Schema.class.getName(), schema); @@ -684,13 +723,16 @@ public final class EndpointReferenceUtil } public static Schema getSchema(ServiceInfo serviceInfo) { + return getSchema(serviceInfo, null); + } + public static Schema getSchema(ServiceInfo serviceInfo, Bus b) { if (serviceInfo == null) { return null; } Schema schema = serviceInfo.getProperty(Schema.class.getName(), Schema.class); if (schema == null && !serviceInfo.hasProperty(Schema.class.getName())) { synchronized (serviceInfo) { - return createSchema(serviceInfo); + return createSchema(serviceInfo, b); } } return schema; Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java?rev=922289&r1=922288&r2=922289&view=diff ============================================================================== --- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java (original) +++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java Fri Mar 12 15:16:13 2010 @@ -105,7 +105,8 @@ public abstract class AbstractInDatabind private void setSchemaInMessage(Service service, Message message, DataReader reader) { if (MessageUtils.getContextualBoolean(message, Message.SCHEMA_VALIDATION_ENABLED, Boolean.FALSE)) { //all serviceInfos have the same schemas - Schema schema = EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0)); + Schema schema = EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0), + message.getExchange().getBus()); reader.setSchema(schema); } } Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java?rev=922289&r1=922288&r2=922289&view=diff ============================================================================== --- cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java (original) +++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractOutDatabindingInterceptor.java Fri Mar 12 15:16:13 2010 @@ -175,7 +175,8 @@ public abstract class AbstractOutDatabin private void setSchemaOutMessage(Service service, Message message, DataWriter writer) { if (shouldValidate(message)) { - Schema schema = EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0)); + Schema schema = EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0), + message.getExchange().getBus()); writer.setSchema(schema); } } Modified: cxf/trunk/rt/core/src/test/java/org/apache/cxf/wsdl11/WSDLServiceBuilderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/test/java/org/apache/cxf/wsdl11/WSDLServiceBuilderTest.java?rev=922289&r1=922288&r2=922289&view=diff ============================================================================== --- cxf/trunk/rt/core/src/test/java/org/apache/cxf/wsdl11/WSDLServiceBuilderTest.java (original) +++ cxf/trunk/rt/core/src/test/java/org/apache/cxf/wsdl11/WSDLServiceBuilderTest.java Fri Mar 12 15:16:13 2010 @@ -459,7 +459,7 @@ public class WSDLServiceBuilderTest exte assertNotNull(serviceInfo.getSchemas()); Element ele = serviceInfo.getSchemas().iterator().next().getElement(); assertNotNull(ele); - Schema schema = EndpointReferenceUtils.getSchema(serviceInfo); + Schema schema = EndpointReferenceUtils.getSchema(serviceInfo, null); assertNotNull(schema); control.verify(); }