Author: sergeyb Date: Wed Jun 27 11:55:57 2012 New Revision: 1354451 URL: http://svn.apache.org/viewvc?rev=1354451&view=rev Log: Merged revisions 1354447 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.6.x-fixes
................ r1354447 | sergeyb | 2012-06-27 12:51:30 +0100 (Wed, 27 Jun 2012) | 17 lines Merged revisions 1354441-1354442,1354446 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1354441 | sergeyb | 2012-06-27 12:44:38 +0100 (Wed, 27 Jun 2012) | 1 line [CXF-4396] Checking a port when 0.0.0.0 address gets replaced ........ r1354442 | sergeyb | 2012-06-27 12:45:33 +0100 (Wed, 27 Jun 2012) | 1 line [CXF-4379] Passing corect type for adapters bound to interfaces to be discoverd ........ r1354446 | sergeyb | 2012-06-27 12:49:57 +0100 (Wed, 27 Jun 2012) | 1 line [CXF-4379] Minor optimization ........ ................ Modified: cxf/branches/2.5.x-fixes/ (props changed) cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Merged /cxf/trunk:r1354441-1354446 Merged /cxf/branches/2.6.x-fixes:r1354447 Propchange: cxf/branches/2.5.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java?rev=1354451&r1=1354450&r2=1354451&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java Wed Jun 27 11:55:57 2012 @@ -200,7 +200,10 @@ public final class HttpUtils { if (!absolute) { u = URI.create(base + u.toString()); } else { - u = URI.create(u.toString().replace(ANY_IP_ADDRESS, serverAndPort)); + int originalPort = u.getPort(); + String replaceValue = originalPort == -1 ? ANY_IP_ADDRESS + : ANY_IP_ADDRESS + ":" + originalPort; + u = URI.create(u.toString().replace(replaceValue, serverAndPort)); } } return u; Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1354451&r1=1354450&r2=1354451&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Wed Jun 27 11:55:57 2012 @@ -364,10 +364,11 @@ public final class InjectionUtils { result = createFromParameterHandler(value, pClass, message); } - if (result != null && adapterHasToBeUsed) { + if (adapterHasToBeUsed) { // as the last resort, try XmlJavaTypeAdapters + Object valueToReplace = result != null ? result : value; try { - result = JAXBUtils.convertWithAdapter(result, paramAnns); + result = JAXBUtils.convertWithAdapter(valueToReplace, pClass, paramAnns); } catch (Throwable ex) { result = null; } Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java?rev=1354451&r1=1354450&r2=1354451&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java Wed Jun 27 11:55:57 2012 @@ -29,10 +29,11 @@ public final class JAXBUtils { } - public static Object convertWithAdapter(Object obj, + public static Object convertWithAdapter(Object obj, + Class<?> adapterClass, Annotation[] anns) { return useAdapter(obj, - getAdapter(obj.getClass(), anns), + getAdapter(adapterClass, anns), false, obj); } Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java?rev=1354451&r1=1354450&r2=1354451&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java Wed Jun 27 11:55:57 2012 @@ -178,6 +178,29 @@ public class HttpUtilsTest extends Asser assertEquals("http://localhost:8080/bar/foo", u.toString()); } + @Test + public void testReplaceAnyIPAddressWithPort() { + Message m = new MessageImpl(); + HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class); + m.put(AbstractHTTPDestination.HTTP_REQUEST, req); + req.getScheme(); + EasyMock.expectLastCall().andReturn("http"); + req.getServerName(); + EasyMock.expectLastCall().andReturn("localhost"); + req.getLocalPort(); + EasyMock.expectLastCall().andReturn(8080); + EasyMock.replay(req); + URI u = HttpUtils.toAbsoluteUri(URI.create("http://0.0.0.0:8080/bar/foo"), m); + assertEquals("http://localhost:8080/bar/foo", u.toString()); + } + + @Test + public void testReplaceLocalHostWithPort() { + Message m = new MessageImpl(); + URI u = HttpUtils.toAbsoluteUri(URI.create("http://localhost:8080/bar/foo"), m); + assertEquals("http://localhost:8080/bar/foo", u.toString()); + } + private void doTestGetBaseAddress(String baseURI, String expected) { Message m = new MessageImpl(); Exchange exchange = new ExchangeImpl(); Modified: cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java?rev=1354451&r1=1354450&r2=1354451&view=diff ============================================================================== --- cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java (original) +++ cxf/branches/2.5.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java Wed Jun 27 11:55:57 2012 @@ -18,6 +18,7 @@ */ package org.apache.cxf.jaxrs.utils; +import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -27,13 +28,44 @@ import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; +import javax.ws.rs.core.Application; import javax.ws.rs.core.MultivaluedMap; +import javax.xml.bind.annotation.adapters.XmlAdapter; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import org.apache.cxf.endpoint.Endpoint; +import org.apache.cxf.jaxrs.model.ParameterType; +import org.apache.cxf.jaxrs.provider.ProviderFactory; +import org.apache.cxf.message.Exchange; +import org.apache.cxf.message.ExchangeImpl; +import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageImpl; +import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; public class InjectionUtilsTest extends Assert { + + @Test + public void testHandleParameterWithXmlAdapterOnInterface() throws Exception { + // Arrange + String value = "1.1"; + + // Act + Object id = InjectionUtils.handleParameter(value, + true, + Id.class, + new Annotation[] {}, + ParameterType.PATH, + createMessage()); + + // Assert + assertTrue(id instanceof Id); + assertEquals(value, ((Id)id).getId()); + } + public void testCollectionTypeFromArray() { assertNull(InjectionUtils.getCollectionType(String[].class)); } @@ -179,4 +211,62 @@ public class InjectionUtilsTest extends } } + private Message createMessage() { + ProviderFactory factory = ProviderFactory.getInstance(); + Message m = new MessageImpl(); + m.put("org.apache.cxf.http.case_insensitive_queries", false); + Exchange e = new ExchangeImpl(); + m.setExchange(e); + e.setInMessage(m); + Endpoint endpoint = EasyMock.createMock(Endpoint.class); + endpoint.getEndpointInfo(); + EasyMock.expectLastCall().andReturn(null).anyTimes(); + endpoint.get(Application.class.getName()); + EasyMock.expectLastCall().andReturn(null); + endpoint.size(); + EasyMock.expectLastCall().andReturn(0).anyTimes(); + endpoint.isEmpty(); + EasyMock.expectLastCall().andReturn(true).anyTimes(); + endpoint.get(ProviderFactory.class.getName()); + EasyMock.expectLastCall().andReturn(factory).anyTimes(); + EasyMock.replay(endpoint); + e.put(Endpoint.class, endpoint); + return m; + } + + public static class Adapter extends XmlAdapter<String, Id> { + + @Override + public String marshal(final Id id) throws Exception { + return id.getId(); + } + + @Override + public Id unmarshal(final String idStr) throws Exception { + Id id = new DelegatingId(); + id.setId(idStr); + return id; + } + } + + @XmlJavaTypeAdapter(Adapter.class) + public interface Id { + String getId(); + + void setId(String id); + } + + public static class DelegatingId implements Id { + + private String id; + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + + } }
