Author: sergeyb Date: Wed Jul 1 09:55:21 2009 New Revision: 790094 URL: http://svn.apache.org/viewvc?rev=790094&view=rev Log: JAX-RS : fixing issue with jaxrs:schemaLocations being ignored
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java?rev=790094&r1=790093&r2=790094&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java Wed Jul 1 09:55:21 2009 @@ -549,15 +549,30 @@ } public void setSchemaLocations(List<String> schemas) { + boolean schemasMethodAvailable = false; for (ProviderInfo<MessageBodyReader> r : messageReaders) { try { Method m = r.getProvider().getClass().getMethod("setSchemas", new Class[]{List.class}); + schemasMethodAvailable = true; m.invoke(r.getProvider(), new Object[]{schemas}); } catch (Exception ex) { // ignore } } + if (!schemasMethodAvailable) { + for (ProviderInfo<MessageBodyReader> r : SHARED_FACTORY.messageReaders) { + try { + Method m = r.getProvider().getClass().getMethod("setSchemas", + new Class[]{List.class}); + Object provider = r.getProvider().getClass().newInstance(); + m.invoke(provider, new Object[]{schemas}); + registerUserProvider(provider); + } catch (Exception ex) { + // ignore + } + } + } } private static class ExceptionMapperComparator implements Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java?rev=790094&r1=790093&r2=790094&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryTest.java Wed Jul 1 09:55:21 2009 @@ -54,6 +54,7 @@ import org.apache.cxf.jaxrs.ext.ParameterHandler; import org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper; import org.apache.cxf.jaxrs.model.ProviderInfo; +import org.apache.cxf.jaxrs.resources.Book; import org.apache.cxf.jaxrs.utils.JAXRSUtils; import org.apache.cxf.message.Exchange; import org.apache.cxf.message.ExchangeImpl; @@ -81,6 +82,32 @@ } @Test + public void testSchemaLocations() { + ProviderFactory pf = ProviderFactory.getInstance(); + pf.setSchemaLocations(Collections.singletonList("classpath:/test.xsd")); + MessageBodyReader customJaxbReader = pf.createMessageBodyReader((Class<?>)Book.class, null, null, + MediaType.TEXT_XML_TYPE, new MessageImpl()); + assertTrue(customJaxbReader instanceof JAXBElementProvider); + MessageBodyReader jaxbReader = ProviderFactory.getSharedInstance().createMessageBodyReader( + (Class<?>)Book.class, null, null, MediaType.TEXT_XML_TYPE, new MessageImpl()); + assertTrue(jaxbReader instanceof JAXBElementProvider); + assertNotSame(jaxbReader, customJaxbReader); + + assertNull(((JAXBElementProvider)jaxbReader).getSchema()); + assertNotNull(((JAXBElementProvider)customJaxbReader).getSchema()); + + MessageBodyReader customJsonReader = pf.createMessageBodyReader((Class<?>)Book.class, null, null, + MediaType.APPLICATION_JSON_TYPE, new MessageImpl()); + assertTrue(customJsonReader instanceof JSONProvider); + MessageBodyReader jsonReader = ProviderFactory.getSharedInstance().createMessageBodyReader( + (Class<?>)Book.class, null, null, MediaType.APPLICATION_JSON_TYPE, new MessageImpl()); + assertTrue(jsonReader instanceof JSONProvider); + assertNotSame(jsonReader, customJsonReader); + assertNull(((JSONProvider)jsonReader).getSchema()); + assertNotNull(((JSONProvider)customJsonReader).getSchema()); + } + + @Test public void testGetFactoryInboundMessage() { ProviderFactory factory = ProviderFactory.getInstance(); Message m = new MessageImpl(); Modified: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml?rev=790094&r1=790093&r2=790094&view=diff ============================================================================== --- cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml (original) +++ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/beans.xml Wed Jul 1 09:55:21 2009 @@ -28,13 +28,16 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd http://cxf.apache.org/jaxrs -http://cxf.apache.org/schemas/jaxrs.xsd"> +http://cxf.apache.org/schemas/jaxrs.xsd +http://cxf.apache.org/core +http://cxf.apache.org/schemas/core.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> @@ -51,7 +54,6 @@ <ref bean="jaxbProvider"/> <ref bean="jsonProvider"/> </jaxrs:providers> - </jaxrs:server> <jaxrs:server id="bookservice2" @@ -75,7 +77,9 @@ <ref bean="jaxbProvider"/> <ref bean="jsonProvider"/> </jaxrs:providers> - + <jaxrs:features> + <cxf:logging/> + </jaxrs:features> </jaxrs:server> <jaxrs:server id="bookservice4"