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

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git

commit 26e54dabe759043e1c9d9d4da0571435745cfcd3
Author: James Bognar <[email protected]>
AuthorDate: Fri May 8 15:20:01 2026 -0400

    refactor(inject): TODO-15 phase-3 batch 12 — RestOpContext + RestContext 
child resource
    
    RestOpContext.createPartSerializer:
    - BeanCreator.of(HttpPartSerializer.class).type(c).orElse(defaultSerializer)
      ->  c == null
            ? defaultSerializer
            : BeanInstantiator.of(HttpPartSerializer.class)
                .beanSubType(c)
                .fallback(() -> defaultSerializer)
                .run()
    - Legacy .type(null) was tolerant; v2 beanSubType(null) throws, so the call
      site short-circuits when c is null (preserves legacy behavior of "no
      override class -> use default serializer").
    - Imports: dropped org.apache.juneau.cp.* (no longer needed) and
      consolidated commons.inject onto a wildcard import.
    
    RestContext (child resource on line 1131):
    - BeanCreator.of(rc2, bs).run() -> BeanInstantiator.of(rc2, bs).run().
      Single-shot bean creation, no .type()/.impl() configuration; safe direct
      swap.
    - Added BeanInstantiator import.
    
    NOT migrated this batch:
    - RestContext.findRestOperationArgs (line 2699):
        BeanCreator.of(RestOpArg.class, bs).type(c).run()
      Attempted migration to BeanInstantiator.of(...).beanSubType(c).run() broke
      jetty-ftest with:
        "Could not instantiate class AttributeArg: No methods/constructors found
         with matching parameters."
      Root cause: legacy BeanCreator's static-factory discovery treats methods
      named create() / builder() / getInstance() as bean factories.  v2
      BeanInstantiator's factoryMethodNames default is {"getInstance"} only —
      create() / builder() are reserved for builder-type detection (they are
      expected to return a builder, not the bean itself).  RestOpArg classes 
like
      AttributeArg, BodyArg, HeaderArg, etc. expose a static
      create(ParameterInfo) factory that returns the bean type directly, which
      matches legacy semantics but not the v2 default.
      Resolution will be either (a) adding "create" / "builder" to the
      BeanInstantiator default factoryMethodNames, or (b) configuring this 
single
      call site with .factoryMethodNames("getInstance", "create").  Either is a
      separate batch; keeping the legacy BeanCreator call here for now.
    
    Tests:
    - Full juneau-utest passes after the partial migration.
    
    Co-authored-by: Cursor <[email protected]>
---
 .../src/main/java/org/apache/juneau/rest/RestContext.java         | 3 ++-
 .../src/main/java/org/apache/juneau/rest/RestOpContext.java       | 8 ++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index ba5f7d115e..d9731ef540 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -18,6 +18,7 @@ package org.apache.juneau.rest;
 
 import org.apache.juneau.commons.http.MediaType;
 import org.apache.juneau.commons.inject.BasicBeanStore2;
+import org.apache.juneau.commons.inject.BeanInstantiator;
 import org.apache.juneau.commons.inject.BeanStore;
 import org.apache.juneau.commons.inject.WritableBeanStore;
 
@@ -1128,7 +1129,7 @@ public class RestContext extends Context {
                        if (bs.getBean(rc2).isPresent()) {
                                so = () -> bs.getBean(rc2).get();
                        } else {
-                               Object o2 = BeanCreator.of(rc2, bs).run();
+                               Object o2 = BeanInstantiator.of(rc2, bs).run();
                                so = () -> o2;
                        }
                        var cc = new RestContext(new Args(rc2, this, 
servletConfig, so, "", null));
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 7aefacc2ca..d9194b8c35 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -40,12 +40,10 @@ import org.apache.juneau.*;
 import org.apache.juneau.commons.annotation.*;
 import org.apache.juneau.commons.collections.FluentMap;
 import org.apache.juneau.commons.function.Memoizer;
-import org.apache.juneau.commons.inject.BasicBeanStore2;
-import org.apache.juneau.commons.inject.WritableBeanStore;
+import org.apache.juneau.commons.inject.*;
 import org.apache.juneau.commons.lang.*;
 import org.apache.juneau.commons.reflect.*;
 import org.apache.juneau.commons.utils.*;
-import org.apache.juneau.cp.*;
 import org.apache.juneau.encoders.*;
 import org.apache.juneau.http.annotation.*;
 import org.apache.juneau.http.annotation.Header;
@@ -156,7 +154,9 @@ public class RestOpContext extends Context implements 
Comparable<RestOpContext>
        }
 
        private static HttpPartSerializer createPartSerializer(Class<? extends 
HttpPartSerializer> c, HttpPartSerializer defaultSerializer) {
-               return 
BeanCreator.of(HttpPartSerializer.class).type(c).orElse(defaultSerializer);
+               return c == null
+                       ? defaultSerializer
+                       : 
BeanInstantiator.of(HttpPartSerializer.class).beanSubType(c).fallback(() -> 
defaultSerializer).run();
        }
 
        private final WritableBeanStore opBeanStore;

Reply via email to