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/05/13 15:59:01 UTC

svn commit: r774371 - in /cxf/trunk/rt/frontend/jaxrs: ./ src/main/java/org/apache/cxf/jaxrs/ src/main/java/org/apache/cxf/jaxrs/provider/ src/test/java/org/apache/cxf/jaxrs/ src/test/java/org/apache/cxf/jaxrs/provider/

Author: sergeyb
Date: Wed May 13 13:59:00 2009
New Revision: 774371

URL: http://svn.apache.org/viewvc?rev=774371&view=rev
Log:
JAXRS : adding XPathProvider and JAXRSServerFactoryTest

Added:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java   (with props)
Modified:
    cxf/trunk/rt/frontend/jaxrs/pom.xml
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java

Modified: cxf/trunk/rt/frontend/jaxrs/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/pom.xml?rev=774371&r1=774370&r2=774371&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/pom.xml (original)
+++ cxf/trunk/rt/frontend/jaxrs/pom.xml Wed May 13 13:59:00 2009
@@ -144,7 +144,13 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-		<dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-transports-http-jetty</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency> 
+	<dependency>
             <groupId>org.apache.xmlbeans</groupId>
             <artifactId>xmlbeans</artifactId>
         </dependency>

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java?rev=774371&r1=774370&r2=774371&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java Wed May 13 13:59:00 2009
@@ -67,7 +67,7 @@
         if (address == null) {
             Class primaryClass = classResourceInfos.get(0).getServiceClass();
             String ns = PackageUtils.getNamespace(PackageUtils.getPackageName(primaryClass));
-            return new QName(ns + "/jaxrs", primaryClass.getSimpleName());
+            return new QName(ns + "jaxrs", primaryClass.getSimpleName());
         } else {
             return new QName(address, "WebResource");
         }

Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java?rev=774371&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java Wed May 13 13:59:00 2009
@@ -0,0 +1,92 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.provider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.Provider;
+
+import org.apache.cxf.jaxrs.ext.xml.XMLSource;
+
+@Provider
+@Consumes({"text/xml", "application/xml", "application/*+xml" })
+public class XPathProvider implements MessageBodyReader<Object> {
+
+    private List<String> consumeMediaTypes;
+    private Map<String, String> classExpressions;
+    private String globalExpression;
+    private String className;
+    private Map<String, String> globalNamespaces = 
+        Collections.emptyMap();
+    
+    public void setConsumeMediaTypes(List<String> types) {
+        consumeMediaTypes = types;
+    }
+    
+    public List<String> getConsumeMediaTypes() {
+        return consumeMediaTypes;    
+    }
+
+    public void setExpression(String expr) {
+        globalExpression = expr;
+    }
+    
+    public void setClassName(String name) {
+        className = name;
+    }
+    
+    public void setExpressions(Map<String, String> expressions) {
+        classExpressions = expressions;
+    }
+    
+    public void setNamespaces(Map<String, String> nsMap) {
+        globalNamespaces = nsMap;
+    }
+    
+    public boolean isReadable(Class cls, Type genericType, Annotation[] annotations, MediaType mediaType) {
+        
+        return globalExpression != null && (className == null 
+            || className != null && className.equals(cls.getName()))  
+            || classExpressions != null && classExpressions.containsKey(cls.getName());
+    }
+
+    public Object readFrom(Class<Object> cls, Type type, Annotation[] anns, MediaType mt, 
+        MultivaluedMap<String, String> hrs, InputStream is) throws IOException, WebApplicationException {
+        String expression = globalExpression != null ? globalExpression
+            : classExpressions.get(cls.getName());
+        if (expression == null) {
+            // must not happen if isReadable() returned true
+            throw new WebApplicationException(500);
+        }
+        XMLSource source = new XMLSource(is);
+        return source.getNode(expression, globalNamespaces, cls);
+    }
+
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XPathProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java?rev=774371&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java Wed May 13 13:59:00 2009
@@ -0,0 +1,85 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
+import org.apache.cxf.jaxrs.resources.BookStore;
+import org.apache.cxf.message.MessageImpl;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class JAXRSServerFactoryBeanTest extends Assert {
+
+    @Test
+    public void testRegisterProviders() {
+        JAXRSServerFactoryBean bean = new JAXRSServerFactoryBean();
+        bean.setAddress("http://localhost:8080/rest");
+        bean.setStart(false);
+        bean.setResourceClasses(BookStore.class);
+        List<Object> providers = new ArrayList<Object>();
+        Object provider1 = new CustomExceptionMapper();
+        providers.add(provider1);
+        Object provider2 = new RuntimeExceptionMapper();
+        providers.add(provider2);
+        bean.setProviders(providers);
+        Server s = bean.create();
+        
+        ProviderFactory factory = 
+            (ProviderFactory)s.getEndpoint().get(ProviderFactory.class.getName());
+        
+        ExceptionMapper<Exception> mapper1 = 
+            factory.createExceptionMapper(Exception.class, new MessageImpl());
+        assertNotNull(mapper1);
+        ExceptionMapper<RuntimeException> mapper2 = 
+            factory.createExceptionMapper(RuntimeException.class, new MessageImpl());
+        assertNotNull(mapper2);
+        assertNotSame(mapper1, mapper2);
+        assertSame(provider1, mapper1);
+        assertSame(provider2, mapper2);
+        
+        
+    }
+    
+    
+    private static class CustomExceptionMapper implements ExceptionMapper<Exception> {
+
+        public Response toResponse(Exception exception) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+        
+    }
+    
+    private static class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {
+
+        public Response toResponse(RuntimeException exception) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+        
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java?rev=774371&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java Wed May 13 13:59:00 2009
@@ -0,0 +1,73 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.provider;
+
+import java.io.ByteArrayInputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cxf.jaxrs.resources.Book;
+import org.apache.cxf.jaxrs.resources.BookStore;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class XPathProviderTest extends Assert {
+
+    @Test
+    public void testIsReadableClassName() {
+        XPathProvider provider = new XPathProvider();
+        provider.setExpression("/");
+        assertTrue(provider.isReadable((Class)Book.class, null, null, null));
+        assertTrue(provider.isReadable((Class)BookStore.class, null, null, null));
+        provider.setClassName(Book.class.getName());
+        assertFalse(provider.isReadable((Class)BookStore.class, null, null, null));
+        assertTrue(provider.isReadable((Class)Book.class, null, null, null));
+        provider.setClassName(null);
+        assertTrue(provider.isReadable((Class)Book.class, null, null, null));
+        assertTrue(provider.isReadable((Class)BookStore.class, null, null, null));
+    }
+    
+    @Test
+    public void testIsReadableClassNames() {
+        XPathProvider provider = new XPathProvider();
+        assertFalse(provider.isReadable((Class)Book.class, null, null, null));
+        assertFalse(provider.isReadable((Class)BookStore.class, null, null, null));
+        Map<String, String> map = new HashMap<String, String>();
+        map.put(Book.class.getName(), "/");
+        provider.setExpressions(map);
+        assertFalse(provider.isReadable((Class)BookStore.class, null, null, null));
+        assertTrue(provider.isReadable((Class)Book.class, null, null, null));
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testReadFrom() throws Exception {
+        String value = "<Book><name>The Book</name><id>2</id></Book>";
+        XPathProvider provider = new XPathProvider();
+        provider.setExpression("/Book");
+        provider.setClassName(Book.class.getName());
+        Book book = (Book)provider.readFrom((Class)Book.class, null, null, null, null,
+                          new ByteArrayInputStream(value.getBytes()));
+        assertNotNull(book);
+        assertEquals(2L, book.getId());
+        assertEquals("The Book", book.getName());
+    }
+    
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/XPathProviderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date