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 2010/03/12 16:16:16 UTC
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/
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<String, byte[]> schemas;
private final Set<String> done = new HashSet<String>();
private final ExtendedURIResolver resolver = new ExtendedURIResolver();
+ private final Bus bus;
- private SchemaLSResourceResolver(Map<String, byte[]> schemas) {
+ private SchemaLSResourceResolver(Map<String, byte[]> 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<String, byte[]> 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<String, byte[]> 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();
}