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 2009/07/01 11:55:21 UTC
svn commit: r790094 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/
systests/src/test/resources/jaxrs/WEB-INF/
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"