Author: sergeyb Date: Wed Jul 1 14:37:32 2009 New Revision: 790188 URL: http://svn.apache.org/viewvc?rev=790188&view=rev Log: JAXRS : support for ResourceManager lookups
Added: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml (with props) cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd (with props) cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl (with props) Removed: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/bookid.xsd cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/resources/template.xsl Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.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/AbstractJAXRSFactoryBean.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/AbstractJAXRSFactoryBean.java Wed Jul 1 14:37:32 2009 @@ -232,6 +232,7 @@ if (entityProviders != null) { factory.setUserProviders(entityProviders); } + factory.setBus(getBus()); if (schemaLocations != null) { factory.setSchemaLocations(schemaLocations); } @@ -252,14 +253,14 @@ } public void setModelRef(String modelRef) { - List<UserResource> resources = ResourceUtils.getUserResources(modelRef); + List<UserResource> resources = ResourceUtils.getUserResources(modelRef, getBus()); if (resources != null) { serviceFactory.setUserResources(resources); } } public void setModelRefWithServiceClass(String modelRef, Class<?> sClass) { - List<UserResource> resources = ResourceUtils.getUserResources(modelRef); + List<UserResource> resources = ResourceUtils.getUserResources(modelRef, getBus()); if (resources != null) { serviceFactory.setUserResourcesWithServiceClass(resources, sClass); } Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractConfigurableProvider.java Wed Jul 1 14:37:32 2009 @@ -21,11 +21,25 @@ import java.util.List; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; + public abstract class AbstractConfigurableProvider { private List<String> consumeMediaTypes; private List<String> produceMediaTypes; private boolean enableBuffering; + private Bus bus; + + public void setBus(Bus b) { + if (bus != null) { + bus = b; + } + } + + public Bus getBus() { + return bus != null ? bus : BusFactory.getThreadDefaultBus(); + } public void setConsumeMediaTypes(List<String> types) { consumeMediaTypes = types; Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Wed Jul 1 14:37:32 2009 @@ -81,7 +81,7 @@ } public void setSchemaLocations(List<String> locations) { - schema = SchemaHandler.createSchema(locations); + schema = SchemaHandler.createSchema(locations, getBus()); } public void setSchema(Schema s) { 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=790188&r1=790187&r2=790188&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 14:37:32 2009 @@ -36,6 +36,7 @@ import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; +import org.apache.cxf.Bus; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.jaxrs.client.ResponseExceptionMapper; @@ -548,17 +549,32 @@ responseExceptionMappers.clear(); } + public void setBus(Bus bus) { + if (bus == null) { + return; + } + for (ProviderInfo<MessageBodyReader> r : messageReaders) { + injectProviderProperty(r.getProvider(), "setBus", Bus.class, bus); + } + } + + private boolean injectProviderProperty(Object provider, String mName, Class<?> pClass, + Object pValue) { + try { + Method m = provider.getClass().getMethod(mName, new Class[]{pClass}); + m.invoke(provider, new Object[]{pValue}); + return true; + } catch (Exception ex) { + // ignore + } + return false; + } + 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 - } + schemasMethodAvailable = injectProviderProperty(r.getProvider(), "setSchemas", + List.class, schemas); } if (!schemasMethodAvailable) { for (ProviderInfo<MessageBodyReader> r : SHARED_FACTORY.messageReaders) { Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java Wed Jul 1 14:37:32 2009 @@ -60,9 +60,9 @@ import org.xml.sax.InputSource; import org.xml.sax.XMLFilter; -import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.jaxrs.ext.MessageContext; +import org.apache.cxf.jaxrs.utils.ResourceUtils; @Produces({"application/xml", "application/*+xml", "text/xml", "text/html" }) @Consumes({"application/xml", "application/*+xml", "text/xml", "text/html" }) @@ -273,7 +273,7 @@ InputStream is = null; if (loc.startsWith("classpath:")) { String path = loc.substring("classpath:".length()); - is = ClassLoaderUtils.getResourceAsStream(path, this.getClass()); + is = ResourceUtils.getClasspathResourceStream(path, this.getClass(), this.getBus()); } else { File f = new File(loc); if (f.exists()) { Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/ResourceUtils.java Wed Jul 1 14:37:32 2009 @@ -48,6 +48,8 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.i18n.BundleUtils; import org.apache.cxf.common.logging.LogUtils; @@ -62,6 +64,7 @@ import org.apache.cxf.jaxrs.model.URITemplate; import org.apache.cxf.jaxrs.model.UserOperation; import org.apache.cxf.jaxrs.model.UserResource; +import org.apache.cxf.resource.ResourceManager; public final class ResourceUtils { @@ -332,12 +335,13 @@ } } - public static List<UserResource> getUserResources(String loc) { + + public static List<UserResource> getUserResources(String loc, Bus bus) { try { InputStream is = null; if (loc.startsWith("classpath:")) { String path = loc.substring("classpath:".length()); - is = ClassLoaderUtils.getResourceAsStream(path, ResourceUtils.class); + is = getClasspathResourceStream(path, ResourceUtils.class, bus); } else { File f = new File(loc); if (f.exists()) { @@ -356,6 +360,21 @@ return null; } + public static InputStream getClasspathResourceStream(String path, Class<?> callingClass, Bus bus) { + InputStream is = ClassLoaderUtils.getResourceAsStream(path, callingClass); + if (is == null && bus != null) { + ResourceManager rm = bus.getExtension(ResourceManager.class); + if (rm != null) { + is = rm.getResourceAsStream(path); + } + } + return is; + } + + public static List<UserResource> getUserResources(String loc) { + return getUserResources(loc, BusFactory.getThreadDefaultBus()); + } + public static List<UserResource> getUserResources(InputStream is) throws Exception { Document doc = DOMUtils.readXml(new InputStreamReader(is, "UTF-8")); return getResourcesFromElement(doc.getDocumentElement()); Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/schemas/SchemaHandler.java Wed Jul 1 14:37:32 2009 @@ -35,8 +35,10 @@ import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; -import org.apache.cxf.common.classloader.ClassLoaderUtils; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.jaxrs.utils.ResourceUtils; public class SchemaHandler { @@ -44,20 +46,25 @@ private static final String CLASSPATH_PREFIX = "classpath:"; private Schema schema; + private Bus bus; public SchemaHandler() { } + public void setBus(Bus b) { + bus = b; + } + public void setSchemas(List<String> locations) { - schema = createSchema(locations); + schema = createSchema(locations, bus == null ? BusFactory.getThreadDefaultBus() : bus); } public Schema getSchema() { return schema; } - public static Schema createSchema(List<String> locations) { + public static Schema createSchema(List<String> locations, Bus bus) { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema s = null; @@ -67,7 +74,7 @@ InputStream is = null; if (loc.startsWith(CLASSPATH_PREFIX)) { String path = loc.substring(CLASSPATH_PREFIX.length()); - is = ClassLoaderUtils.getResourceAsStream(path, SchemaHandler.class); + is = ResourceUtils.getClasspathResourceStream(path, SchemaHandler.class, bus); if (is == null) { LOG.warning("No schema resource " + loc + " is available on classpath"); return null; Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java?rev=790188&r1=790187&r2=790188&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/wadl/WadlGeneratorTest.java Wed Jul 1 14:37:32 2009 @@ -18,8 +18,6 @@ */ package org.apache.cxf.jaxrs.model.wadl; -import java.io.File; -import java.io.FileOutputStream; import java.io.StringReader; import java.util.ArrayList; import java.util.List; @@ -82,14 +80,14 @@ assertNotNull(r); assertEquals(WadlGenerator.WADL_TYPE.toString(), r.getMetadata().getFirst(HttpHeaders.CONTENT_TYPE)); - File f = new File("test.xml"); - f.delete(); - f.createNewFile(); - System.out.println(f.getAbsolutePath()); - FileOutputStream fos = new FileOutputStream(f); - fos.write(r.getEntity().toString().getBytes()); - fos.flush(); - fos.close(); +// File f = new File("test.xml"); +// f.delete(); +// f.createNewFile(); +// System.out.println(f.getAbsolutePath()); +// FileOutputStream fos = new FileOutputStream(f); +// fos.write(r.getEntity().toString().getBytes()); +// fos.flush(); +// fos.close(); } @Test 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=790188&r1=790187&r2=790188&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 14:37:32 2009 @@ -117,7 +117,7 @@ </jaxrs:server> <util:map id="outTemplates"> - <entry key="application/xhtml+xml" value="classpath:/org/apache/cxf/systest/jaxrs/resources/template.xsl"/> + <entry key="application/xhtml+xml" value="classpath:/WEB-INF/templates/template.xsl"/> <entry key="application/xml" value="classpath:/org/apache/cxf/systest/jaxrs/resources/template2.xsl"/> </util:map> @@ -134,7 +134,7 @@ <bean id="uriResolver" class="org.apache.cxf.systest.jaxrs.URIResolverImpl"/> <jaxrs:server id="bookservice6" address="/thebooks6" - modelRef="classpath:/org/apache/cxf/systest/jaxrs/resources/resources.xml"/> + modelRef="classpath:/WEB-INF/model/resources.xml"/> <jaxrs:server id="bookservice7" address="/thebooks7"> <jaxrs:model> @@ -161,7 +161,7 @@ </bean> <util:list id="theSchemas"> - <value>classpath:/org/apache/cxf/systest/jaxrs/resources/bookid.xsd</value> + <value>classpath:/WEB-INF/schemas/bookid.xsd</value> <value>classpath:/org/apache/cxf/systest/jaxrs/resources/book.xsd</value> </util:list> Added: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml?rev=790188&view=auto ============================================================================== --- cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml (added) +++ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml Wed Jul 1 14:37:32 2009 @@ -0,0 +1,13 @@ +<model xmlns="http://cxf.apache.org/jaxrs"> + <resource name="org.apache.cxf.systest.jaxrs.BookStoreNoAnnotations" path="bookstore"> + <operation name="getBook" verb="GET" path="/books/{id}"> + <param name="id" type="PATH"/> + </operation> + <operation name="getBookChapter" path="/books/{id}/chapter"> + <param name="id" type="PATH"/> + </operation> + </resource> + <resource name="org.apache.cxf.systest.jaxrs.ChapterNoAnnotations"> + <operation name="getItself" verb="GET"/> + </resource> +</model> \ No newline at end of file Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/model/resources.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd?rev=790188&view=auto ============================================================================== --- cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd (added) +++ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd Wed Jul 1 14:37:32 2009 @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.example.org/books/id" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.example.org/books/id"> + + + <simpleType name="bid"> + <restriction base="xs:long"/> + </simpleType> + </schema> Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/schemas/bookid.xsd ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl?rev=790188&view=auto ============================================================================== --- cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl (added) +++ cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl Wed Jul 1 14:37:32 2009 @@ -0,0 +1,16 @@ +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:books="http://www.w3.org/books"> + + <xsl:import href="template2.xsl"/> + + <xsl:variable name="root" select="/"/> + <xsl:variable name="htmlDoc" select="document('book.xhtml')"/> + + <xsl:template match="/"> + <xsl:apply-templates select="$htmlDoc/*"/> + </xsl:template> + + <xsl:template match="books:bookTag"> + <xsl:apply-templates select="$root/*"/> + </xsl:template> + +</xsl:stylesheet> Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl ------------------------------------------------------------------------------ svn:keywords = Rev Date Propchange: cxf/trunk/systests/src/test/resources/jaxrs/WEB-INF/templates/template.xsl ------------------------------------------------------------------------------ svn:mime-type = text/xml