You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/09/25 13:20:48 UTC

svn commit: r1389808 - in /cxf/branches/2.6.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ rt...

Author: sergeyb
Date: Tue Sep 25 11:20:47 2012
New Revision: 1389808

URL: http://svn.apache.org/viewvc?rev=1389808&view=rev
Log:
Merged revisions 1389791-1389792 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1389791 | sergeyb | 2012-09-25 11:58:08 +0100 (Tue, 25 Sep 2012) | 1 line
  
  [CXF-4519] Adding an option to set type-specific schemas on JAXB providers
........
  r1389792 | sergeyb | 2012-09-25 11:58:45 +0100 (Tue, 25 Sep 2012) | 1 line
  
  [CXF-4519] Adding an option to set type-specific schemas on JAXB providers, one more commit
........

Modified:
    cxf/branches/2.6.x-fixes/   (props changed)
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
    cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
    cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/trunk:r1389791-1389792

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Tue Sep 25 11:20:47 2012
@@ -111,8 +111,11 @@ public abstract class AbstractJAXBProvid
     private Map<Class<?>, JAXBContext> classContexts = new HashMap<Class<?>, JAXBContext>();
     
     private MessageContext mc;
+    
     private Schema schema;
     private String catalogLocation;
+    private Map<String, SchemaHandler> schemaHandlers;
+    
     private String collectionWrapperName;
     private Map<String, String> collectionWrapperMap;
     private List<String> jaxbElementClassNames = Collections.emptyList();
@@ -370,6 +373,11 @@ public abstract class AbstractJAXBProvid
         return unmarshalAsJaxbElement && type != Response.class;
     }
     
+    @Deprecated
+    public void setSchemas(List<String> locations) {
+        setSchemaLocations(locations);
+    }
+    
     public void setSchemaLocations(List<String> locations) {
         schema = SchemaHandler.createSchema(locations, catalogLocation, getBus());    
     }
@@ -378,7 +386,15 @@ public abstract class AbstractJAXBProvid
         this.catalogLocation = name;
     }
     
-    public void setSchema(Schema s) {
+    public void setSchemaHandler(SchemaHandler handler) {
+        setSchema(handler.getSchema());
+    }
+    
+    public void setSchemaHandlers(Map<String, SchemaHandler> handlers) {
+        schemaHandlers = handlers;
+    }
+    
+    protected void setSchema(Schema s) {
         schema = s;    
     }
     
@@ -490,8 +506,9 @@ public abstract class AbstractJAXBProvid
         JAXBContext context = isCollection ? getCollectionContext(cls) 
                                            : getJAXBContext(cls, genericType);
         Unmarshaller unmarshaller = context.createUnmarshaller();
-        if (schema != null) {
-            unmarshaller.setSchema(schema);
+        Schema theSchema = getSchema(cls);
+        if (theSchema != null) {
+            unmarshaller.setSchema(theSchema);
         }
         if (eventHandler != null) {
             unmarshaller.setEventHandler(eventHandler);
@@ -521,18 +538,21 @@ public abstract class AbstractJAXBProvid
         if (marshallerListener != null) {
             marshaller.setListener(marshallerListener);
         }
-        validateObjectIfNeeded(marshaller, obj);
+        validateObjectIfNeeded(marshaller, cls, obj);
         return marshaller;
     }
     
-    protected void validateObjectIfNeeded(Marshaller marshaller, Object obj) 
+    protected void validateObjectIfNeeded(Marshaller marshaller, Class<?> cls, Object obj) 
         throws JAXBException {
-        if (validateOutput && schema != null) {
-            marshaller.setEventHandler(eventHandler);
-            marshaller.setSchema(schema);
-            if (validateBeforeWrite) {
-                marshaller.marshal(obj, new DefaultHandler());
-                marshaller.setSchema(null);
+        if (validateOutput) {
+            Schema theSchema = getSchema(cls);
+            if (theSchema != null) {
+                marshaller.setEventHandler(eventHandler);
+                marshaller.setSchema(theSchema);
+                if (validateBeforeWrite) {
+                    marshaller.marshal(obj, new DefaultHandler());
+                    marshaller.setSchema(null);
+                }
             }
         }
     }
@@ -556,7 +576,21 @@ public abstract class AbstractJAXBProvid
     }
     
     protected Schema getSchema() {
-        return schema;
+        return getSchema(null);
+    }
+    
+    protected Schema getSchema(Class<?> cls) {
+        // deal with the typical default case first
+        if (schema == null && schemaHandlers == null) {
+            return null;
+        }
+        
+        if (schema != null) {
+            return schema;
+        } else {
+            SchemaHandler handler = schemaHandlers.get(cls.getName());
+            return handler != null ? handler.getSchema() : null; 
+        }
     }
 
     

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Tue Sep 25 11:20:47 2012
@@ -66,7 +66,6 @@ import org.apache.cxf.jaxrs.utils.Annota
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.JAXBUtils;
-import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
 import org.apache.cxf.message.Attachment;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.staxutils.DepthExceededStaxException;
@@ -131,14 +130,6 @@ public class JAXBElementProvider<T> exte
         super.setProduceMediaTypes(types);
     }
     
-    public void setSchemas(List<String> locations) {
-        super.setSchemaLocations(locations);
-    }
-    
-    public void setSchemaHandler(SchemaHandler handler) {
-        super.setSchema(handler.getSchema());
-    }
-    
     public void setMarshallerProperties(Map<String, Object> marshallProperties) {
         mProperties = marshallProperties;
     }

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Tue Sep 25 11:20:47 2012
@@ -847,12 +847,12 @@ public final class ProviderFactory {
     public void setSchemaLocations(List<String> schemas) {
         boolean schemasMethodAvailable = false;
         for (ProviderInfo<MessageBodyReader<?>> r : messageReaders) {
-            schemasMethodAvailable = injectProviderProperty(r.getProvider(), "setSchemas", 
+            schemasMethodAvailable = injectProviderProperty(r.getProvider(), "setSchemaLocations", 
                                                             List.class, schemas);
         }
         if (!schemasMethodAvailable) {
             for (ProviderInfo<MessageBodyReader<?>> r : jaxbReaders) {
-                schemasMethodAvailable = injectProviderProperty(r.getProvider(), "setSchemas", 
+                schemasMethodAvailable = injectProviderProperty(r.getProvider(), "setSchemaLocations", 
                                                                 List.class, schemas);
             }
         }

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java Tue Sep 25 11:20:47 2012
@@ -63,7 +63,12 @@ public class SchemaHandler {
         bus = b;
     }
     
+    @Deprecated
     public void setSchemas(List<String> locations) {
+        setSchemaLocations(locations);
+    }
+    
+    public void setSchemaLocations(List<String> locations) {
         schema = createSchema(locations, catalogLocation, 
                               bus == null ? BusFactory.getThreadDefaultBus() : bus);
     }

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java Tue Sep 25 11:20:47 2012
@@ -1169,7 +1169,7 @@ public class JAXBElementProviderTest ext
         JAXBElementProvider<?> provider = new JAXBElementProvider<Object>();
         List<String> locations = new ArrayList<String>();
         locations.add("classpath:/test.xsd");
-        provider.setSchemas(locations);
+        provider.setSchemaLocations(locations);
         Schema s = provider.getSchema();
         assertNotNull("schema can not be read from classpath", s);
     }
@@ -1181,7 +1181,7 @@ public class JAXBElementProviderTest ext
         String loc = getClass().getClassLoader().getResource("test.xsd").toURI().getPath();
         
         locations.add("file:" + loc);
-        provider.setSchemas(locations);
+        provider.setSchemaLocations(locations);
         Schema s = provider.getSchema();
         assertNotNull("schema can not be read from disk", s);
     }
@@ -1192,7 +1192,7 @@ public class JAXBElementProviderTest ext
         List<String> locations = new ArrayList<String>();
         String loc = getClass().getClassLoader().getResource("book1.xsd").toURI().getPath();
         locations.add(loc);
-        provider.setSchemas(locations);
+        provider.setSchemaLocations(locations);
         Schema s = provider.getSchema();
         assertNotNull("schema can not be read from disk", s);
         
@@ -1214,7 +1214,7 @@ public class JAXBElementProviderTest ext
         List<String> locations = new ArrayList<String>();
         String loc = getClass().getClassLoader().getResource("test.xsd").toURI().getPath();
         locations.add("file:" + loc);
-        provider.setSchemas(locations);
+        provider.setSchemaLocations(locations);
         Schema s = provider.getSchema();
         assertNotNull("schema can not be read from disk", s);
         

Modified: cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java (original)
+++ cxf/branches/2.6.x-fixes/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java Tue Sep 25 11:20:47 2012
@@ -68,7 +68,6 @@ import org.apache.cxf.jaxrs.utils.Annota
 import org.apache.cxf.jaxrs.utils.HttpUtils;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.JAXBUtils;
-import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
 import org.apache.cxf.message.MessageUtils;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.staxutils.W3CDOMStreamWriter;
@@ -174,14 +173,6 @@ public class JSONProvider<T> extends Abs
         super.setProduceMediaTypes(types);
     }
     
-    public void setSchemas(List<String> locations) {
-        super.setSchemaLocations(locations);
-    }
-    
-    public void setSchemaHandler(SchemaHandler handler) {
-        super.setSchema(handler.getSchema());
-    }
-    
     public void setSerializeAsArray(boolean asArray) {
         this.serializeAsArray = asArray;
     }

Modified: cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml?rev=1389808&r1=1389807&r2=1389808&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml (original)
+++ cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml Tue Sep 25 11:20:47 2012
@@ -265,7 +265,7 @@ http://cxf.apache.org/schemas/core.xsd">
   </bean>
   
   <bean id="schemaHolder" class="org.apache.cxf.jaxrs.utils.schemas.SchemaHandler">
-      <property name="schemas" ref="theSchemas"/>
+      <property name="schemaLocations" ref="theSchemas"/>
   </bean>
   
   <util:list id="theSchemas">