Author: sergeyb Date: Wed Aug 12 09:11:08 2009 New Revision: 803419 URL: http://svn.apache.org/viewvc?rev=803419&view=rev Log: JAX-RS : Adding global marshalAsJaxbElement property, ignorable Aegis collection tests, RuntimeExceptionMapper test
Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java (with props) Modified: 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/JAXBElementProvider.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/CollectionsResource.java cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java cxf/trunk/systests/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml 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=803419&r1=803418&r2=803419&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 Aug 12 09:11:08 2009 @@ -85,6 +85,7 @@ protected Map<String, String> jaxbElementClassMap; protected boolean unmarshalAsJaxbElement; + protected boolean marshalAsJaxbElement; private MessageContext mc; private Schema schema; @@ -96,6 +97,10 @@ unmarshalAsJaxbElement = value; } + public void setMarshallAsJaxbElement(boolean value) { + marshalAsJaxbElement = value; + } + public void setJaxbElementClassNames(List<String> names) { jaxbElementClassNames = names; } @@ -107,17 +112,21 @@ @SuppressWarnings("unchecked") protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls, Type genericType) throws Exception { + + QName name = null; if (jaxbElementClassNames != null && jaxbElementClassNames.contains(cls.getName()) || jaxbElementClassMap != null && jaxbElementClassMap.containsKey(cls.getName())) { - QName name = null; if (jaxbElementClassMap != null) { name = convertStringToQName(jaxbElementClassMap.get(cls.getName())); } else { name = getJaxbQName(cls, genericType, obj, false); } - if (name != null) { - return new JAXBElement(name, cls, null, obj); - } + } + if (name == null && marshalAsJaxbElement) { + name = convertStringToQName(cls.getName()); + } + if (name != null) { + return new JAXBElement(name, cls, null, obj); } return obj; } @@ -249,7 +258,7 @@ } public boolean isReadable(Class<?> type, Type genericType, Annotation[] anns, MediaType mt) { - return isSupported(type, genericType, anns); + return marshalAsJaxbElement || isSupported(type, genericType, anns); } public void setSchemaLocations(List<String> locations) { Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Wed Aug 12 09:11:08 2009 @@ -83,7 +83,7 @@ } } - return isSupported(type, genericType, anns); + return super.isReadable(type, genericType, anns, mt); } @Context Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java Wed Aug 12 09:11:08 2009 @@ -21,7 +21,10 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; @@ -30,11 +33,13 @@ import org.apache.cxf.jaxrs.fortest.AegisTestBean; import org.apache.cxf.jaxrs.impl.MetadataMap; +import org.apache.cxf.jaxrs.resources.CollectionsResource; import org.apache.cxf.jaxrs.resources.ManyTags; import org.apache.cxf.jaxrs.resources.TagVO; import org.apache.cxf.jaxrs.resources.Tags; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; public class AegisJSONProviderTest extends Assert { @@ -129,6 +134,27 @@ } @Test + @Ignore + public void testWriteCollection() throws Exception { + AegisJSONProvider p = new AegisJSONProvider(); + AbstractAegisProvider.clearContexts(); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + AegisTestBean bean = new AegisTestBean(); + bean.setBoolValue(Boolean.TRUE); + bean.setStrValue("hovercraft"); + List<AegisTestBean> beans = new ArrayList<AegisTestBean>(); + beans.add(bean); + Method m = CollectionsResource.class.getMethod("getAegisBeans", new Class[]{}); + p.writeTo(beans, (Class)m.getReturnType(), m.getGenericReturnType(), + AegisTestBean.class.getAnnotations(), + MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), os); + byte[] bytes = os.toByteArray(); + String json = new String(bytes, "utf-8"); + System.out.println(json); + //assertEquals(data, json); + } + + @Test public void testManyTags() throws Exception { AegisJSONProvider p = new AegisJSONProvider(); AbstractAegisProvider.clearContexts(); Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java Wed Aug 12 09:11:08 2009 @@ -186,6 +186,11 @@ return new Book(); } +// @Path("/books/{bookId}/{new}") +// public List<Book> getNewBook3() { +// return null; +// } + @POST public void setNewBook(Book b) { } Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java Wed Aug 12 09:11:08 2009 @@ -176,25 +176,35 @@ @Test public void testWriteWithoutXmlRootElement() throws Exception { - doTestWriteWithoutXmlRootElement("SuperBook", false); + doTestWriteWithoutXmlRootElement("SuperBook", false, false); } @Test public void testWriteWithoutXmlRootElement2() throws Exception { - doTestWriteWithoutXmlRootElement("SuperBook", true); + doTestWriteWithoutXmlRootElement("SuperBook", true, false); } @Test public void testWriteWithoutXmlRootElement3() throws Exception { - doTestWriteWithoutXmlRootElement("{http://books}SuperBook", false); + doTestWriteWithoutXmlRootElement("{http://books}SuperBook", false, false); } - public void doTestWriteWithoutXmlRootElement(String name, boolean unmarshalAsJaxbElement) + @Test + public void testWriteWithoutXmlRootElement4() throws Exception { + doTestWriteWithoutXmlRootElement("SuperBook", true, true); + } + + public void doTestWriteWithoutXmlRootElement(String name, boolean unmarshalAsJaxbElement, + boolean marshalAsJaxbElement) throws Exception { JAXBElementProvider provider = new JAXBElementProvider(); - provider.setJaxbElementClassMap(Collections.singletonMap( - org.apache.cxf.jaxrs.fortest.jaxb.SuperBook.class.getName(), - name)); + if (!marshalAsJaxbElement) { + provider.setJaxbElementClassMap(Collections.singletonMap( + org.apache.cxf.jaxrs.fortest.jaxb.SuperBook.class.getName(), + name)); + } else { + provider.setMarshallAsJaxbElement(marshalAsJaxbElement); + } org.apache.cxf.jaxrs.fortest.jaxb.SuperBook b = new org.apache.cxf.jaxrs.fortest.jaxb.SuperBook("CXF in Action", 123L, 124L); Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/CollectionsResource.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/CollectionsResource.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/CollectionsResource.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/resources/CollectionsResource.java Wed Aug 12 09:11:08 2009 @@ -26,7 +26,15 @@ import javax.ws.rs.POST; import javax.xml.bind.JAXBElement; +import org.apache.cxf.jaxrs.fortest.AegisTestBean; + public class CollectionsResource { + + @GET + public List<AegisTestBean> getAegisBeans() { + return null; + } + @GET public List<Book> getBooks() { return null; Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java (original) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceCreatedSpringProviderTest.java Wed Aug 12 09:11:08 2009 @@ -142,6 +142,23 @@ } @Test + public void testGetBookNotExistent() throws Exception { + + String endpointAddress = + "http://localhost:9080/webapp/bookstore/nonexistent"; + URL url = new URL(endpointAddress); + HttpURLConnection connect = (HttpURLConnection)url.openConnection(); + connect.addRequestProperty("Accept", "application/xml"); + assertEquals(405, connect.getResponseCode()); + InputStream in = connect.getErrorStream(); + assertNotNull(in); + + assertEquals("Exception is not mapped correctly", + "Nonexistent method", + getStringFromInputStream(in).trim()); + } + + @Test public void testPostPetStatus() throws Exception { String endpointAddress = Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java?rev=803419&view=auto ============================================================================== --- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java (added) +++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java Wed Aug 12 09:11:08 2009 @@ -0,0 +1,39 @@ +/** + * 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.systest.jaxrs; + +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; +import javax.ws.rs.ext.ExceptionMapper; + +public class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> { + + @Context + private UriInfo ui; + + public Response toResponse(RuntimeException exception) { + String path = ui.getPath(); + if (path.endsWith("nonexistent")) { + return Response.status(405).type("text/plain").entity("Nonexistent method").build(); + } + return null; + } + +} Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/RuntimeExceptionMapper.java ------------------------------------------------------------------------------ svn:keywords = Rev Date Modified: cxf/trunk/systests/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml?rev=803419&r1=803418&r2=803419&view=diff ============================================================================== --- cxf/trunk/systests/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml (original) +++ cxf/trunk/systests/src/test/resources/jaxrs_spring_providers/WEB-INF/beans.xml Wed Aug 12 09:11:08 2009 @@ -35,6 +35,7 @@ <jaxrs:providers> <bean class="org.apache.cxf.systest.jaxrs.BadgerFishProvider"/> <ref bean="exceptionMapper"/> + <ref bean="exceptionMapper2"/> </jaxrs:providers> </jaxrs:server> <bean id="bookstore" scope="prototype" class="org.apache.cxf.systest.jaxrs.BookStore"/> @@ -42,4 +43,5 @@ <bean id="exceptionMapper" class="org.apache.cxf.systest.jaxrs.BookExceptionMapper"> <property name="toHandle" value="true"/> </bean> + <bean id="exceptionMapper2" class="org.apache.cxf.systest.jaxrs.RuntimeExceptionMapper"/> </beans>