You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2021/12/02 18:36:52 UTC

[cxf] branch 3.3.x-fixes updated (39e7972 -> 27e2bdc)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a change to branch 3.3.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git.


    from 39e7972  CXF-8619 Prevent double URL-decoding for form parameters where the pa… (#878)
     new 5fdba76  CXF-8620: AbstractHTTPServlet should support HTTP TRACE method dispatching if it is allowed by underlying container (#879)
     new 27e2bdc  Recording .gitmergeinfo Changes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitmergeinfo                                      | 15 +++++++
 .../jaxrs/ext/{DefaultMethod.java => TRACE.java}   | 10 ++---
 .../cxf/transport/servlet/AbstractHTTPServlet.java |  6 +++
 .../cxf/systest/jaxrs/resources/Library.java       |  5 +++
 .../cxf/systest/jaxrs/resources/LibraryApi.java    |  6 +++
 .../systest/jaxrs/spring/boot/SpringJaxrsTest.java | 51 ++++++++++++++++++++++
 6 files changed, 88 insertions(+), 5 deletions(-)
 copy rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/{DefaultMethod.java => TRACE.java} (88%)

[cxf] 01/02: CXF-8620: AbstractHTTPServlet should support HTTP TRACE method dispatching if it is allowed by underlying container (#879)

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.3.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 5fdba769c8f7dff4f02c911403a56b81123de156
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Thu Dec 2 08:37:25 2021 -0500

    CXF-8620: AbstractHTTPServlet should support HTTP TRACE method dispatching if it is allowed by underlying container (#879)
    
    (cherry picked from commit ea7ea0c32683af9973f9897049f024c50ec6afa3)
---
 .../main/java/org/apache/cxf/jaxrs/ext/TRACE.java  | 34 +++++----------
 .../cxf/transport/servlet/AbstractHTTPServlet.java |  6 +++
 .../cxf/systest/jaxrs/resources/Library.java       |  5 +++
 .../cxf/systest/jaxrs/resources/LibraryApi.java    |  6 +++
 .../systest/jaxrs/spring/boot/SpringJaxrsTest.java | 51 ++++++++++++++++++++++
 5 files changed, 78 insertions(+), 24 deletions(-)

diff --git a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/TRACE.java
similarity index 54%
copy from systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java
copy to rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/TRACE.java
index 911214d..fecb08b 100644
--- a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/TRACE.java
@@ -17,31 +17,17 @@
  * under the License.
  */
 
-package org.apache.cxf.systest.jaxrs.resources;
+package org.apache.cxf.jaxrs.ext;
 
-import javax.ws.rs.DELETE;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-public interface LibraryApi {
-    @Produces({ MediaType.APPLICATION_JSON })
-    @GET
-    Response getBooks(@QueryParam("page") @DefaultValue("1") int page);
+import javax.ws.rs.HttpMethod;
 
-    @Produces({ MediaType.APPLICATION_JSON })
-    @Path("{id}")
-    @GET
-    Response getBook(@PathParam("id") String id);
-    
-    @DELETE
-    void deleteBooks();
-    
-    @Path("/catalog")
-    Catalog catalog(); 
+@HttpMethod("TRACE")
+@Target(value = ElementType.METHOD)
+@Retention(value = RetentionPolicy.RUNTIME)
+public @interface TRACE {
 }
diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
index a6b5cbb..621a895 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
@@ -245,6 +245,12 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
         throws ServletException, IOException {
         handleRequest(request, response);
     }
+    
+    @Override
+    protected void doTrace(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException {
+        handleRequest(request, response);
+    }
 
     /**
      * {@inheritDoc}
diff --git a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/Library.java b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/Library.java
index 53fe0bd..37da1f7 100644
--- a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/Library.java
+++ b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/Library.java
@@ -63,4 +63,9 @@ public class Library implements LibraryApi {
     public Catalog catalog() {
         return new Catalog();
     }
+    
+    @Override
+    public Response traceBooks() {
+        return Response.status(Status.NOT_ACCEPTABLE).build();
+    }
 }
diff --git a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java
index 911214d..01af5c7 100644
--- a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java
+++ b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/resources/LibraryApi.java
@@ -29,6 +29,8 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.cxf.jaxrs.ext.TRACE;
+
 public interface LibraryApi {
     @Produces({ MediaType.APPLICATION_JSON })
     @GET
@@ -44,4 +46,8 @@ public interface LibraryApi {
     
     @Path("/catalog")
     Catalog catalog(); 
+    
+    @TRACE
+    @Produces({ MediaType.APPLICATION_JSON })
+    Response traceBooks();
 }
diff --git a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/spring/boot/SpringJaxrsTest.java b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/spring/boot/SpringJaxrsTest.java
index 3f77f8f..82769dc 100644
--- a/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/spring/boot/SpringJaxrsTest.java
+++ b/systests/spring-boot/src/test/java/org/apache/cxf/systest/jaxrs/spring/boot/SpringJaxrsTest.java
@@ -29,6 +29,7 @@ import javax.ws.rs.ProcessingException;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
 
 import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 
@@ -45,7 +46,9 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
 import org.springframework.boot.test.rule.OutputCapture;
+import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
 import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.web.server.WebServerFactoryCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
@@ -108,6 +111,13 @@ public class SpringJaxrsTest {
         public JacksonJsonProvider jacksonJsonProvider() {
             return new JacksonJsonProvider();
         }
+        
+        @Bean
+        public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
+            return customizer -> customizer.addConnectorCustomizers(connector -> {
+                connector.setAllowTrace(true);
+            });
+        }
     }
     
     @Before
@@ -421,6 +431,47 @@ public class SpringJaxrsTest {
                 entry("status", "UNKNOWN"));
     }
     
+    @Test
+    public void testJaxrsCustomHttpMethodMetric() {
+        final WebTarget target = createWebTarget();
+        
+        try (Response r = target.request().trace()) {
+            assertThat(r.getStatus()).isEqualTo(Status.NOT_ACCEPTABLE.getStatusCode());
+        }
+        
+        await()
+            .atMost(Duration.ofSeconds(1))
+            .ignoreException(MeterNotFoundException.class)
+            .until(() -> registry.get("cxf.server.requests").timers(), not(empty()));
+        RequiredSearch serverRequestMetrics = registry.get("cxf.server.requests");
+
+        Map<Object, Object> serverTags = serverRequestMetrics.timer().getId().getTags().stream()
+            .collect(toMap(Tag::getKey, Tag::getValue));
+
+        assertThat(serverTags)
+            .containsOnly(
+                entry("exception", "None"),
+                entry("method", "TRACE"),
+                entry("operation", "traceBooks"),
+                entry("uri", "/api/library"),
+                entry("outcome", "CLIENT_ERROR"),
+                entry("status", "406"));
+        
+        RequiredSearch clientRequestMetrics = registry.get("cxf.client.requests");
+
+        Map<Object, Object> clientTags = clientRequestMetrics.timer().getId().getTags().stream()
+                .collect(toMap(Tag::getKey, Tag::getValue));
+
+        assertThat(clientTags)
+            .containsOnly(
+                entry("exception", "None"),
+                entry("method", "TRACE"),
+                entry("operation", "UNKNOWN"),
+                entry("uri", "http://localhost:" + port + "/api/library"),
+                entry("outcome", "CLIENT_ERROR"),
+                entry("status", "406"));
+    }
+
     private LibraryApi createApi(int portToUse) {
         final JAXRSClientFactoryBean factory = new JAXRSClientFactoryBean();
         factory.setAddress("http://localhost:" + portToUse + "/api/library");

[cxf] 02/02: Recording .gitmergeinfo Changes

Posted by re...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.3.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 27e2bdc1be0a9a49a49b628986c481469c3e86da
Author: Andriy Redko <dr...@gmail.com>
AuthorDate: Thu Dec 2 13:36:28 2021 -0500

    Recording .gitmergeinfo Changes
---
 .gitmergeinfo | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/.gitmergeinfo b/.gitmergeinfo
index 0f96674..8be1786 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -9,6 +9,7 @@ B 02186aebad9329afdcd5fcfcb74d5174f4e8d738
 B 024a38fcf44937d5174f54e4770069e8257f77b1
 B 02782356b3b2d0a8bc321667851a0f441784fb9a
 B 0298be286acb8e61047ecfd8c31171524a4b6728
+B 0324d36ec2ae9f614b32499809b17926f22a36e0
 B 046443fa88aa8883258b04e5763d0e38996c8d93
 B 05d841b8978b9415c57f3504b1611235f0ff3a9d
 B 05df9b362155f93a6651aaf524e9eb0c5bc43131
@@ -38,6 +39,7 @@ B 0f1b3316d86ca9a40f0cba92155d9fda99a8c241
 B 0f30442f3acb82e9936d4b486e07f5c341c142d2
 B 0fd2f4c5d273aab2aedcf7d432cc167a2e174376
 B 1020075ce40afe3b2b4d8e3caaef280e1d78b207
+B 1035dd72a3f2c53d276f5d557a72b3fb3daf1342
 B 108fdf84a8e3cc5374f053214ad86f17fcb42998
 B 10ef461c261a9242025b1369556f5368711435d7
 B 119b68779316174145b168fc538f1747e06a51ee
@@ -237,6 +239,7 @@ B 5227a25eb8283a51052cf0f70eeebfd8cc3af937
 B 52edc68ce786ae42accb285570c545438be9cee7
 B 540e471660ed79cb88771f6c9a0022cbede241ac
 B 54e2708678fd9b0e2abdd83cbfb98cb37ec893dc
+B 55c0f6145f6418d381489c8a0fde35f06ccb4873
 B 567861eae069b10b056c829041b0252eb95707da
 B 567fa697621f77fe48082e8f719db4185736614c
 B 56957f3d25872d0517df4783f182726d66cbc9c6
@@ -350,6 +353,7 @@ B 7a38b3174a21e5e92d1781ae4f2e2fb8fb68270f
 B 7a5dae0516ce59e6c2ad23424153c5903d5a72da
 B 7a91c752ef10c703c86aceebe5e22778a065a1ed
 B 7abbb406d5bc03f6c3ca239a00c8cdb343a8d8ef
+B 7b1b2e589117fca637efce77f97ae70394ef34ac
 B 7b333d06910b3d4a84dd77a3c76b48d1b44525b3
 B 7bd83910c06e30fb780164b9b86a6cd45eb3212c
 B 7d163dd06edafe6f86707970f6e31d3d6d2d2cdb
@@ -406,6 +410,7 @@ B 8e72c98447e0b398018e08659f0c61de5f8c852f
 B 8e887a09e14c3798e58fab928ddd04e92816e0cd
 B 8f93152ae86c2d24b95ed9ce5599e6f5453091bc
 B 8f980049b3494dd370db259f358a1d3e869301e7
+B 9102019d8604349f410a4c01f2722ac6cf6dae21
 B 91634e844c1a062588ee3b338949d77621e3f8ab
 B 9167ea883bc991564a5109a1e614d6e94c332190
 B 9183102499abd1ff2e41fe18172b783a5d9b3695
@@ -612,6 +617,7 @@ B d681f431cd9d0b3d40bc417ec855b1dd3ca489df
 B d6a299217dd943a3872da9b0afb7f966ab289cc0
 B d76454eb24afc88464dd66772fa92549b1918d26
 B d76dfa9d4dd4c7596b20a778a46efa7943473fb7
+B d847ac15fae0b6ab2936d8ab35c9296f4ba35571
 B d8c4e429fb5c003d63bd2f28ce376cdc9e06f5ef
 B d90136089fa3a3018528d9bdd9610a269b680a99
 B d9a7680ec5978fe9f4338bede5de4e0d020acdb3
@@ -907,6 +913,7 @@ M 6ec36084f23b5b9a5e41659b68aa8a24838f32d3
 M 6f08487b2b02d4fd4c95b232eff839c6066fa668
 M 6f79756afa8a0cf90a7132929cc387f6f1d21ba0
 M 6fb1e66cb2336c0e4564e8ddf02b16e9d43d53bd
+M 703e58590a3481f1f3255187728f8a7bc0c4bf00
 M 706dd02fd37597967a10d5a5c1ad526b995f88ea
 M 70c7d6a1e3f23522609d58b72b61c52e3cbc919a
 M 70ced3220f319331094448858df835f9100cb857
@@ -922,8 +929,10 @@ M 7a05e4fb0b67a89b86ed6eee68b9416005d6f631
 M 7a188f96fee4923b40e59529dd0bd177983bf24c
 M 7a42ec5f651ed991e856f5d8b418b7cbaa318b7a
 M 7a655b49fd6d432127a55b38f15c1212f7064196
+M 7aa0e40333b1c4e7d6bc9e121ae68e8b9842e9f6
 M 7aa6e0a402b8ce7dfff8a931a507b884d7152cea
 M 7b50181ebc445bb84d3463b284643432399bc0f8
+M 7c19fdc91c1415db313945c022785302fc3802d1
 M 7c6bf1a843f2d4860d1bd7541139911ad47c7964
 M 7c6c2ed277fc678d8c2485a8e661cb44eb6a4d11
 M 7ce2fd8dc57ff230af1e200a2d4cdd3357724766
@@ -947,6 +956,7 @@ M 8751a7c9e70b23a48e6048de5d75e113218adf94
 M 8798b83cef186439b72ff02d9bafa37f9658404e
 M 888ae63e8f59bdd9c99f95234b3a9dc98d29cb5b
 M 88907f141ee80792627da3cc7846d1562f6c0238
+M 8a0bf61d71374e52e5feeb80a36564ddb13ca058
 M 8ab434d7b12daa69c68aaad386be939d8ecb6780
 M 8ad7a9bbe1d9c257ff0ca9e99862095c9be7302d
 M 8b11d6b26369650e5f4c6f3730dbb97d60927d9b
@@ -964,6 +974,7 @@ M 954085421900efbf89643b5ab8f187a237e42eb4
 M 95c3c37092751b1d00b6f2c26642f18ebcbba878
 M 972a2755ca85ba86f473b0ce46f23bf6193ced62
 M 9840d212865770eca29cb4fee7cb7a467dddb61b
+M 985307ff0badeb0b1b5845c27b4c07e690f300f5
 M 9980b0472524e1010aaf7a4a3fe5ff072270efe3
 M 9a519e10a01cd84349a2bef807c2597ca46b4740
 M 9a5b4568a94a72569caf4d012a42df6ebbe02779
@@ -1014,6 +1025,7 @@ M b9732e5a2d4cead834af8246a35b863aa7b8c811
 M b9c2379c51b236b3cf09e2f7bda3ebd0f8450474
 M bb16d7c44eb96b0ae6550ab68f9bf59de58a8d54
 M bb72206d0ed811a2c32012012fdc01ec973567a3
+M bbc3ecd9882ae1890cc39747d65a02a7970d8fd8
 M bbf08b76836c3d4c592d91ee2039317332599b8e
 M be41158d8c65b227c77d927ace7ca30c7c6dd015
 M be75ea56aa3724bcdc7f8223cd8cc129a08fdf44
@@ -1078,6 +1090,7 @@ M e4cc2f2327862d5354c60c6773bc88585a200675
 M e5f1bdf5946ef2c45f0b770a84775eb7896364f1
 M e72ad770c9a8f4439b93e2c19e61c43562ac5877
 M eb4bab9983a287bf9dc0574d22077cc783bc88ac
+M ec29d3d6ef405f89ac3452accb8a05a120f070a3
 M edd100917a2f73e43d6e9e34efdc09a854f5c942
 M edd4675498f52d9854e73a303535b2366cd7ae95
 M eded3ad6d5f716f08709f1cc57cfe339d9b61c33
@@ -1086,6 +1099,8 @@ M ee89945ac5974484c13a533ed03c03702bf6c9c3
 M eef3b3514b2ea039d9026ec85d4289382277591f
 M efc5d35498f582335821cc6a2b750df935295f14
 M f0c87b63c8df70472c52b42ec437de2c2124f712
+M f1c15b25bb87512fa734974cf50ee232c337bf9b
+M f1d096846fbb3606f4fff5bf197a2338215b0931
 M f1fd59ed1657b4454b1099fb65d2e72b8efc6a2a
 M f22022b1f094efdcc81b63d9f3f10b85894fcdb8
 M f275d9d39a92781536259cdf4dd79bfa2987c2b4