Elide is a Java library that lets you stand up a GraphQL/JSON-API web service with minimal effort.

Overview

Elide

Opinionated APIs for web & mobile applications.

Elide Logo

Discord Build Status Maven Central Coverage Status Code Quality: Java Total Alerts Mentioned in Awesome Java Mentioned in Awesome GraphQL

Read this in other languages: 中文.

Table of Contents

Background

Elide is a Java library that lets you setup model driven GraphQL or JSON API web service with minimal effort. Elide supports two variants of APIs:

  1. A CRUD (Create, Read, Update, Delete) API for reading and manipulating models.
  2. An analytic API for aggregating measures over zero or more model attributes.

Elide supports a number of features:

Security Comes Standard

Control access to fields and entities through a declarative, intuitive permission syntax.

Mobile Friendly APIs

JSON-API & GraphQL lets developers fetch entire object graphs in a single round trip. Only requested elements of the data model are returned. Our opinionated approach for mutations addresses common application scenarios:

  • Create a new object and add it to an existing collection in the same operation.
  • Create a set of related, composite objects (a subgraph) and connect it to an existing, persisted graph.
  • Differentiate between deleting an object vs disassociating an object from a relationship (but not deleting it).
  • Change the composition of a relationship to something different.
  • Reference a newly created object inside other mutation operations.

Filtering, sorting, pagination, and text search are supported out of the box.

Atomicity For Complex Writes

Elide supports multiple data model mutations in a single request in either JSON-API or GraphQL. Create objects, add them to relationships, modify or delete together in a single atomic request.

Analytic Query Support

Elide supports analytic queries against models crafted with its powerful semantic layer. Elide APIs work natively with Yavin to visualize, explore, and report on your data.

Schema Introspection

Explore, understand, and compose queries against your Elide API through generated Swagger documentation or GraphQL schema.

Customize

Customize the behavior of data model operations with computed attributes, data validation annotations, and request lifecycle hooks.

Storage Agnostic

Elide is agnostic to your particular persistence strategy. Use an ORM or provide your own implementation of a data store.

Documentation

More information about Elide can be found at elide.io.

Install

To try out an Elide example service, check out this Spring boot example project.

Alternatively, use elide-standalone which allows you to quickly setup a local instance of Elide running inside an embedded Jetty application.

Usage

For CRUD APIs

The simplest way to use Elide is by leveraging JPA to map your Elide models to persistence:

The models should represent the domain model of your web service:

@Entity
public class Book {

    @Id
    private Integer id;

    private String title;

    @ManyToMany(mappedBy = "books")
    private Set<Author> authors;
}

Add Elide annotations to both expose your models through the web service and define security policies for access:

@Entity
@Include(rootLevel = true)
@ReadPermission("Everyone")
@CreatePermission("Admin OR Publisher")
@DeletePermission("None")
@UpdatePermission("None")
public class Book {

    @Id
    private Integer id;

    @UpdatePermission("Admin OR Publisher")
    private String title;

    @ManyToMany(mappedBy = "books")
    private Set<Author> authors;
}

Add Lifecycle hooks to your models to embed custom business logic that execute inline with CRUD operations through the web service:

@Entity
@Include(rootLevel = true)
@ReadPermission("Everyone")
@CreatePermission("Admin OR Publisher")
@DeletePermission("None")
@UpdatePermission("None")
@LifeCycleHookBinding(operation = UPDATE, hook = BookCreationHook.class, phase = PRECOMMIT)
public class Book {

    @Id
    private Integer id;

    @UpdatePermission("Admin OR Publisher")
    private String title;

    @ManyToMany(mappedBy = "books")
    private Set<Author> authors;
}

public class BookCreationHook implements LifeCycleHook<Book> {
    @Override
    public void execute(LifeCycleHookBinding.Operation operation,
                        LifeCycleHookBinding.TransactionPhase phase,
                        Book book,
                        RequestScope requestScope,
                        Optional<ChangeSpec> changes) {
       //Do something
    }
}

Map expressions to security functions or predicates that get pushed to the persistence layer:

    @SecurityCheck("Admin")
    public static class IsAdminUser extends UserCheck {
        @Override
        public boolean ok(User user) {
            return isUserInRole(user, UserRole.admin);
        }
    }

To expose and query these models, follow the steps documented in the getting started guide.

For example API calls, look at:

  1. JSON-API
  2. GraphQL

For Analytic APIs

Analytic models including tables, measures, dimensions, and joins can be created either as POJOs or with a friendly HJSON configuration language:

{
  tables: [
    {
      name: Orders
      table: order_details
      measures: [
        {
          name: orderTotal
          type: DECIMAL
          definition: 'SUM({{$order_total}})'
        }
      ]
      dimensions: [
        {
          name: orderId
          type: TEXT
          definition: '{{$order_id}}'
        }
      ]
    }
  ]
}

More information on configuring or querying analytic models can be found here.

Security

Security is documented in depth here.

Contribute

Please refer to the contributing.md file for information about how to get involved. We welcome issues, questions, and pull requests.

If you are contributing to Elide using an IDE, such as IntelliJ, make sure to install the Lombok plugin.

Community chat is now on discord. Legacy discussion is archived on spectrum.

License

This project is licensed under the terms of the Apache 2.0 open source license. Please refer to LICENSE for the full terms.

Articles

Intro to Elide video

Intro to Elide

Create a JSON API REST Service With Spring Boot and Elide

Custom Security With a Spring Boot/Elide Json API Server

Logging Into a Spring Boot/Elide JSON API Server

Securing a JSON API REST Service With Spring Boot and Elide

Creating Entities in a Spring Boot/Elide JSON API Server

Updating and Deleting with a Spring Boot/Elide JSON API Server

Comments
  • How to filter by attribute?

    How to filter by attribute?

    I have a question regarding filtering. Let's say I have this class as below.

    public class Employee {
       private String id;
       private int age;
       private String address;
    }
    

    How can I filter by age for example only filter employees whose age is 30? Based on the documentation, it seems that

    "/employee?filter[age]=30"

    But it won't work.

    opened by DerKlassiker 24
  • Not able to find relationship id when order of objects is changed in the POST and PATCH requests

    Not able to find relationship id when order of objects is changed in the POST and PATCH requests

    Expected Behavior

    Hi Team, I am getting a very weird issue while POST and PATCH (BULK) request. When the relationship order is changed in the JSON request, it is not able to find the id of the object (can be any of the three) in relationship with. Is it the correct behavior? Does the order of relationship matters in the request?

    {
    	"data": {
    		"type": "metadata",
    		"relationships": {
    			"ast" : {
    					"data": {
    						"id": "9223372036854775793",
    						"type": "asset"
    					}
    				},
    				"txnItm": {
    					"data": {
    						"id": "dispute1",
    						"type": "taxonomyItem"
    					}
    				},
    				"txnGrp": {
    					"data": {
    						"id": "locale1",
    						"type": "taxonomy"
    					}
    				}
    		}
    	}
    }
    
    @Include(rootLevel = true, type="metadata")
    @ReadPermission(expression = "Prefab.Role.All")
    @UpdatePermission(expression = "Prefab.Role.All")
    @CreatePermission(expression = "Prefab.Role.All")
    @SharePermission
    class Metadata {
    
    @Id
    @GeneratedValue(....)
    private Long id;
    
    @ManyToOne
    @JoinColumn(name= "ast_id")
    private Asset ast;
    
    @ManyToOne
    @JoinColumn(name= "grp_cd")
    private Taxonomy txnGrp;
    
    @ManyToOne
    @JoinColumn(name= "item_cd")
    private TaxonomyItem txnItem;
    
    }
    
    @Include(rootLevel = true, type="asset")
    @ReadPermission(expression = "Prefab.Role.All")
    @UpdatePermission(expression = "Prefab.Role.All")
    @CreatePermission(expression = "Prefab.Role.All")
    @SharePermission
    class Asset {
    
    @Id
    @GeneratedValue(....)
    private Long id;
    
    @Column(name= "name")
    private String name;
    
    @OneToMany
    @JoinColumn(name= "ast_id")
    private Set<Metadata> mtda;
    
    }
    
    @Include(rootLevel = true, type="taxonomy")
    @ReadPermission(expression = "Prefab.Role.All")
    @UpdatePermission(expression = "Prefab.Role.All")
    @CreatePermission(expression = "Prefab.Role.All")
    @SharePermission
    class Taxonomy {
    
    @Id
    @GeneratedValue(....)
    private Long id;
    
    @Column(name= "name")
    private String name;
    
    @OneToMany
    @JoinColumn(name= "grp_cd")
    private Set<Metadata> mtda;
    
    }
    

    Steps to Reproduce (for bugs)

    1. If txnGrp is provided first, it is not able to find the id of one or two of the relationships. And this is a random behavior. If the request is sent in the above order, then it works fine.

    Your Environment

    • Elide version used: elide-spring-boot-starter:4.6.0
    • Environment name and version (Java 1.8.0_152): 1.8.0_151
    • Operating System and version: MAC OSX
    opened by prateekagrwl05 19
  • Pagination needs total page and record count

    Pagination needs total page and record count

    Most pagination user experiences need to know the total number of pages and records e.g.

    Page 6 of 12 | 1999 Records

    JSON API suggests adding this as meta data so for a request like:

    api/product?filter[person.surname][infix]=smith&page[number]=6&page[limit]=20

    something like this :

    {
    "meta": {
       "page": {
         "number": 6,
         "limit": 20,
         "totalPages": 12,
         "totalRecords":1999
       },
    data : { ...
    

    Can Elide return something like this ?

    enhancement proposal 
    opened by johnoscott 15
  • Fixes #1520 by using explicit left join when sorting over relationships

    Fixes #1520 by using explicit left join when sorting over relationships

    Resolves #1520

    Description

    When resolving hibernate query add explicit joins based on sort paths

    Motivation and Context

    See issue

    How Has This Been Tested?

    Just by debugging generated query. I would like to do some unit/IT tests, but didn't figured how can I debug elide while running IT.

    License

    I confirm that this contribution is made under an Apache 2.0 license and that I have the authority necessary to make this contribution on behalf of its copyright owner.

    opened by bukajsytlos 14
  • Custom exceptions

    Custom exceptions

    Hi all,

    I have read the documentation but could not find any information guiding of how to throw a custom exception. Let's say, when a client sends request to an Json API to create an entity with id which already exists, I would throw AccountAlreadyExistsException instead of TransactionException. How can I do that?

    To be more specific, I had a look at the source code and was aware of CustomErrorException and HttpStatusException as well but still did not see a clear way of doing that. Looks like I can only throw a custom exception for my business logic code (life cycle hooks). Please advise.

    Thanks, Thai

    opened by thaingo 14
  • mutation throwing shared permission exception

    mutation throwing shared permission exception

    I have two tables with 1 to many relationship: Parent and child I have one existing parent record with id: 1

    when I am trying to insert a new child using below query-

    mutation {
      parent(filter: "id==1") {
        edges {
          node {
            id
            childs(op: UPSERT, data: {id: "b5aab819-4a31-41e0-a878-62a980e5e702", name: "test", status: "New"}) {
              edges {
                node {
                  id
                }
              }
            }
          }
        }
      }
    }
    

    It is throwing below exception:

    {
      "data": null,
      "errors": [
        {
          "message": "Exception while fetching data (/parent/edges[0]/node/childs) : null",
          "path": [
            "parent",
            "edges",
            0,
            "node",
            "childs"
          ],
          "exception": {
            "cause": null,
            "stackTrace": [],
            "status": 403,
            "expression": {
              "present": true
            },
            "evaluationMode": {
              "present": true
            },
            "loggedMessage": "ForbiddenAccessException: Message=SharePermission: \u001b[31mFAILURE\u001b[m\tMode=Optional[USER_CHECKS_ONLY]\tExpression=[Optional[\u001b[31mFAILURE\u001b[m]]",
            "verboseMessage": "SharePermission: \u001b[31mFAILURE\u001b[m",
            "verboseErrorResponse": {
              "403": {
                "errors": [
                  "SharePermission: \u001b[31mFAILURE\u001b[m"
                ]
              }
            },
            "errorResponse": {
              "403": {
                "errors": [
                  "ForbiddenAccessException"
                ]
              }
            },
            "localizedMessage": null,
            "message": null,
            "suppressed": []
          },
          "locations": [
            {
              "line": 6,
              "column": 9
            }
          ],
          "extensions": null,
          "errorType": "DataFetchingException"
        }
      ]
    }
    

    Parent is having update and shared permission and child is having insert and update permission. Package level permission is: insert-> none, update-> none, delete -> none

    opened by bappajubcse05 14
  • @JsonFormat doesn't work

    @JsonFormat doesn't work

    @JsonFormat on Date field doesn't work.

    public class Entity {
        // Id and other fields declaration ...
    
        @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", timezone = "GMT")
        public Date someTimestamp;
    }
    

    Can you suggest any workaround?

    opened by belovaf 14
  • =in= with or(

    =in= with or(",")

    Hello, not sure if its bug or if I am missusing, please advice me.

    I have documents which "staffs" and "managers" relation property. One of documents has staff with id "1" .

    OK - returns 1 documents (staffs.id=in=(1))

    OK - returns 1 documents (when document.managers is not empty) (staffs.id=in=(1), managers.id=in=(1))

    NOT OK - returns 0 documents (when document.managers is empty) (staffs.id=in=(1), managers.id=in=(1))

    Even if document have staff with id 1, it is not returned, for some reason even if first part of query is successfull another part behind "OR" (",") still changes result if ".managers" is empty

    Here is full filter options :
    OK - 1 result

    filter:documentStatus.id=in=(10);(staffs.id=in=(1));documentType.id==2
    page[size]:10
    page[number]:1
    refreshModel:false
    reload:false
    sort:-createdAt
    

    OK - 1 results (when .managers is not empty)

    filter:documentStatus.id=in=(10);(staffs.id=in=(1), managers.id=in=(1));documentType.id==2
    page[size]:10
    page[number]:1
    refreshModel:false
    reload:false
    sort:-createdAt
    

    NOT OK - 0 results (when .managers is empty)

    filter:documentStatus.id=in=(10);(staffs.id=in=(1), managers.id=in=(1));documentType.id==2
    page[size]:10
    page[number]:1
    refreshModel:false
    reload:false
    sort:-createdAt
    
    opened by songoo 14
  • Case insensitive string search cripples performance in MySQL

    Case insensitive string search cripples performance in MySQL

    Hi guys,

    we finally made the transition to the Elide 4.x series. Unfortunately a lot of our users complained, that queries that took seconds before now take minutes (which makes most of them return a Gateway timeout by Nginx).

    My investigation shows, that the reason is the case insensitive commit https://github.com/yahoo/elide/commit/4f00b7653ddb64a4762aea2d0de197ced68e5ec6, which wraps == comparisons for string columns in a lower() function. In our MySQL setup this leads to full table scan instead of index usage (even on columns with case insensitive collation! Ironically these already worked case insensitive).

    To solve this, their should be some sort of configuration, be it in Elide configuration, on table level or on field level.

    If we can agree on an approach, I'd try to implement it.

    opened by Brutus5000 13
  • Error in type converter CoerceUtil

    Error in type converter CoerceUtil

    When using UUID as the primary key of the entity, when requesting data from the database, throws an exception:

    java.lang.IllegalArgumentException: Parameter value [35bd1fa2-3829-11e8-8258-071bcf8a71f4] did not match expected type [java.util.UUID (n/a)]
    	at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:27) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at org.hibernate.query.internal.QueryParameterBindingImpl.validate(QueryParameterBindingImpl.java:90) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:55) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:493) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:106) ~[hibernate-core-5.3.4.Final.jar:5.3.4.Final]
    	at com.yahoo.elide.datastores.hibernate5.porting.QueryWrapper.setParameter(QueryWrapper.java:39) ~[elide-datastore-hibernate5-4.2.6.jar:na]
    	at com.yahoo.elide.core.hibernate.hql.AbstractHQLQueryBuilder.lambda$supplyFilterQueryParameters$0(AbstractHQLQueryBuilder.java:108) ~[elide-datastore-hibernate-4.2.6.jar:na]
    	at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_101]
    	at com.yahoo.elide.core.hibernate.hql.AbstractHQLQueryBuilder.supplyFilterQueryParameters(AbstractHQLQueryBuilder.java:107) ~[elide-datastore-hibernate-4.2.6.jar:na]
    	at com.yahoo.elide.core.hibernate.hql.RootCollectionFetchQueryBuilder.build(RootCollectionFetchQueryBuilder.java:69) ~[elide-datastore-hibernate-4.2.6.jar:na]
    	at com.yahoo.elide.datastores.hibernate5.HibernateTransaction.loadObject(HibernateTransaction.java:145) ~[elide-datastore-hibernate5-4.2.6.jar:na]
    	at com.yahoo.elide.core.PersistentResource.loadRecord(PersistentResource.java:225) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.state.StartState.handle(StartState.java:45) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.state.StateContext.handle(StateContext.java:64) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.BaseVisitor.visitRootCollectionLoadEntity(BaseVisitor.java:58) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.BaseVisitor.visitRootCollectionLoadEntity(BaseVisitor.java:33) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.generated.parsers.CoreParser$RootCollectionLoadEntityContext.accept(CoreParser.java:183) ~[elide-core-4.2.6.jar:na]
    	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46) ~[antlr4-runtime-4.6.jar:4.6]
    	at com.yahoo.elide.generated.parsers.CoreBaseVisitor.visitStart(CoreBaseVisitor.java:20) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.BaseVisitor.visitStart(BaseVisitor.java:47) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.parsers.BaseVisitor.visitStart(BaseVisitor.java:33) ~[elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.generated.parsers.CoreParser$StartContext.accept(CoreParser.java:107) ~[elide-core-4.2.6.jar:na]
    	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18) ~[antlr4-runtime-4.6.jar:4.6]
    	at com.yahoo.elide.Elide.lambda$get$1(Elide.java:91) [elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.Elide.handleRequest(Elide.java:203) [elide-core-4.2.6.jar:na]
    	at com.yahoo.elide.Elide.get(Elide.java:86) [elide-core-4.2.6.jar:na]
    	at ru.macroplus.webplatform.elide.ElideControllerAutoConfiguration$ElideGetController.elideGet(ElideControllerAutoConfiguration.java:60) [classes/:na]
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_101]
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_101]
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_101]
    	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_101]
    	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) [spring-webmvc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at ru.macroplus.webplatform.auth.device.AbstractAuthenticationFilter.doFilter(AbstractAuthenticationFilter.java:42) [classes/:na]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209) [spring-security-web-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) [spring-security-web-5.0.7.RELEASE.jar:5.0.7.RELEASE]
    	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at ru.macroplus.webplatform.config.SimpleCORSFilter.doFilter(SimpleCORSFilter.java:32) [classes/:na]
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101]
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.32.jar:8.5.32]
    	at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]
    	Suppressed: java.io.IOException: Transaction not closed
    		at ru.macroplus.webplatform.elide.SpringHibernateTransaction.close(SpringHibernateTransaction.java:72) ~[classes/:na]
    		at com.yahoo.elide.Elide.handleRequest(Elide.java:228) [elide-core-4.2.6.jar:na]
    		... 72 common frames omitted
    

    The problem in the class com.yahoo.elide.utils.coerce.CoerceUtil, maybe because BeanUtilsBean uses his loader and got that he is not a singleton: BeanUtilsBean.setInstance(new BeanUtilsBean(new BidirectionalConvertUtilBean() ...

    My entity:

    @Entity
    @Include(rootLevel = true)
    public class Project {
    
        private UUID id;
    
        private String name;
    
        private String description;
    
        private Company company;
    
        @Id
        @Type(type = "org.hibernate.type.PostgresUUIDType")
        @Column(updatable = false, columnDefinition = "uuid DEFAULT uuid_generate_v1mc()")
        @GeneratedValue(generator = "uuid")
        @GenericGenerator(
                name = "uuid",
                strategy = "org.hibernate.id.UUIDGenerator",
                parameters = {
                        @org.hibernate.annotations.Parameter(
                                name = "uuid_gen_strategy_class",
                                value = "ru.macroplus.webplatform.db.PostgreSQLUUIDGenerationStrategy"
                        )
                }
        )
        public UUID getId() {
            return id;
        }
    
        public void setId(UUID id) {
            this.id = id;
        }
    
        @Column(nullable = false)
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Column
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        @ManyToOne
        @JoinColumn(nullable = false)
        @CompanyField
        public Company getCompany() {
            return company;
        }
    
        public void setCompany(Company company) {
            this.company = company;
        }
    }
    
    opened by doocaat 13
  • Fixed query builder so that it does not treat embedded properties as …

    Fixed query builder so that it does not treat embedded properties as …

    …relationships anymore. (#2684)

    Resolves #2684

    Description

    Modified the computation of sortOverRelationship variable in RootCollectionFetchQueryBuilder.build() method so that embedded attributes are not counted as relationships.

    Motivation and Context

    Including embedded attributes would prevent sorting from being performed on embedded attributes when pagination and filtering over at least one toMany relationship where requested.

    How Has This Been Tested?

    Added two new unit tests in RootCollectionFetchQueryBuilderTest class in order to test expected behavior of both when sorting over a relationship with pagination and filtering over at least one toMany relationship and when sorting over an embedded attribute with pagination and filtering over at least one toMany relationship.

    License

    I confirm that this contribution is made under an Apache 2.0 license and that I have the authority necessary to make this contribution on behalf of its copyright owner.

    opened by LamWizy 12
  • Bump mockito-core from 4.8.0 to 4.11.0

    Bump mockito-core from 4.8.0 to 4.11.0

    Bumps mockito-core from 4.8.0 to 4.11.0.

    Release notes

    Sourced from mockito-core's releases.

    v4.11.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.11.0

    v4.10.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.10.0

    v4.9.0

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.9.0

    v4.8.1

    Changelog generated by Shipkit Changelog Gradle Plugin

    4.8.1

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump metrics.version from 4.2.12 to 4.2.15

    Bump metrics.version from 4.2.12 to 4.2.15

    Bumps metrics.version from 4.2.12 to 4.2.15. Updates metrics-core from 4.2.12 to 4.2.15

    Release notes

    Sourced from metrics-core's releases.

    v4.2.15

    What's Changed

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.14...v4.2.15

    v4.2.14

    What's Changed

    New Contributors

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.13...v4.2.14

    v4.2.13

    What's Changed

    ... (truncated)

    Commits
    • 2c5d1c6 [maven-release-plugin] prepare release v4.2.15
    • c5793d0 Update actions/cache action to v3.2.0 (#3056)
    • 9b91ba6 Update actions/stale action to v7 (#3053)
    • 5f91484 Fix incorrect javaModuleName property in metrics-logback13 (#3050)
    • 88d7921 Update logback13.version to v1.3.5
    • 6d52dc0 Revert "Update logback13.version to v1.4.5" (#3047)
    • 7616edb [maven-release-plugin] prepare for next development iteration
    • 6fba7ec [maven-release-plugin] prepare release v4.2.14
    • 8b5286c Add support for Jersey 3.1.x (#3041)
    • 72341d9 Bump SLF4J to version 2.0.5
    • Additional commits viewable in compare view

    Updates metrics-servlets from 4.2.12 to 4.2.15

    Release notes

    Sourced from metrics-servlets's releases.

    v4.2.15

    What's Changed

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.14...v4.2.15

    v4.2.14

    What's Changed

    New Contributors

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.13...v4.2.14

    v4.2.13

    What's Changed

    ... (truncated)

    Commits
    • 2c5d1c6 [maven-release-plugin] prepare release v4.2.15
    • c5793d0 Update actions/cache action to v3.2.0 (#3056)
    • 9b91ba6 Update actions/stale action to v7 (#3053)
    • 5f91484 Fix incorrect javaModuleName property in metrics-logback13 (#3050)
    • 88d7921 Update logback13.version to v1.3.5
    • 6d52dc0 Revert "Update logback13.version to v1.4.5" (#3047)
    • 7616edb [maven-release-plugin] prepare for next development iteration
    • 6fba7ec [maven-release-plugin] prepare release v4.2.14
    • 8b5286c Add support for Jersey 3.1.x (#3041)
    • 72341d9 Bump SLF4J to version 2.0.5
    • Additional commits viewable in compare view

    Updates metrics-servlet from 4.2.12 to 4.2.15

    Release notes

    Sourced from metrics-servlet's releases.

    v4.2.15

    What's Changed

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.14...v4.2.15

    v4.2.14

    What's Changed

    New Contributors

    Full Changelog: https://github.com/dropwizard/metrics/compare/v4.2.13...v4.2.14

    v4.2.13

    What's Changed

    ... (truncated)

    Commits
    • 2c5d1c6 [maven-release-plugin] prepare release v4.2.15
    • c5793d0 Update actions/cache action to v3.2.0 (#3056)
    • 9b91ba6 Update actions/stale action to v7 (#3053)
    • 5f91484 Fix incorrect javaModuleName property in metrics-logback13 (#3050)
    • 88d7921 Update logback13.version to v1.3.5
    • 6d52dc0 Revert "Update logback13.version to v1.4.5" (#3047)
    • 7616edb [maven-release-plugin] prepare for next development iteration
    • 6fba7ec [maven-release-plugin] prepare release v4.2.14
    • 8b5286c Add support for Jersey 3.1.x (#3041)
    • 72341d9 Bump SLF4J to version 2.0.5
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump graphql-java-extended-scalars from 19.0 to 20.0

    Bump graphql-java-extended-scalars from 19.0 to 20.0

    Bumps graphql-java-extended-scalars from 19.0 to 20.0.

    Release notes

    Sourced from graphql-java-extended-scalars's releases.

    20.0

    This release updates graphql-java to v20.

    What's Changed

    New Contributors

    Full Changelog: https://github.com/graphql-java/graphql-java-extended-scalars/compare/18.3...20.0

    19.1

    This is a very small release with one bugfix: removing dashes from Automatic-Module-Name. We had feedback that this was blocking some users.

    This fix will also be backported to version 18.

    What's Changed

    Full Changelog: https://github.com/graphql-java/graphql-java-extended-scalars/compare/19.0...19.1

    Commits
    • 926e80d Merge pull request #87 from graphql-java/gj-20.0
    • 6a52ce6 Update to graphql-java v20
    • 6fc5a8c Merge pull request #86 from setchy/master
    • 578e3ed docs: update maven badge for v19 release
    • 5610166 Merge pull request #84 from graphql-java/update-datetime-scalar-with-spec
    • ad7b869 Add specifiedByURL and do not permit negative 0 offset
    • 17e7881 Merge pull request #83 from abelmosch/add-scalars
    • 8b63d94 fix: Removed obsolete VED currency from the test
    • 9b50a36 Added CountryCodeScalar & CurrencyScalar
    • c44b3b2 Merge pull request #79 from graphql-java/automatic-module-name-fix
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump micrometer-core from 1.9.5 to 1.10.2

    Bump micrometer-core from 1.9.5 to 1.10.2

    Bumps micrometer-core from 1.9.5 to 1.10.2.

    Release notes

    Sourced from micrometer-core's releases.

    1.10.2

    :lady_beetle: Bug Fixes

    • Fix logic to choose ObservationConvention #3543
    • Parent Observation is missing from the toString() of Observation.Context #3542

    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​bclozel

    1.10.1

    :lady_beetle: Bug Fixes

    • Add nullable to Observation.parentObservation #3532
    • Adds an option to allow removal of low & high cardinality key values #3529

    :memo: Tasks

    • Add Javadoc since for Observation.Context.remove*() #3536

    :heart: Contributors

    Thank you to all the contributors who worked on this release:

    @​izeye and @​ttddyy

    1.10.0

    Micrometer 1.10.0 is the GA version of a new feature release. See our support policy for support timelines. Below are the combined release notes of all the pre-release milestones and release candidate preceding it.

    :warning: Noteworthy

    :star: New Features / Enhancements

    • Add gRPC authority info to the observation context #3510
    • Add "get[Low|High]CardinalityKeyValue()" on "Observation.Context" #3505
    • Verify sender propagation for HTTP client instrumentation #3504
    • Add support for creating KeyValues from any iterable #3503
    • Added remoteServiceAddress for Sender / Receiver contexts #3500
    • Provide a default for missing values in KeyValue #3458
    • Allow documenting optional keys #3454
    • Add wrap functionality to the Observation #3433
    • Add Observation instrumentation for gRPC client and server #3427
    • Add TestObservationRegistryAssert assertion for observation count #3426
    • Make observation return its context and immutable access to parent #3423

    ... (truncated)

    Commits
    • 22a81f0 Add note to Observation#observationConvention about setting the convention
    • 3f0ca2f Fix wording in javadoc
    • 212f958 Polish
    • a4007b7 Javadoc and nullability checks
    • c9dad1f Fix logic to choose ObservationConvention
    • 4647bf2 Add parent Observation to the toString() of Observation.Context
    • 17ab6b5 Merge branch '1.9.x' into 1.10.x
    • 95fff22 Merge branch '1.8.x' into 1.9.x
    • c88decf Pin Spring Framework to 5.+
    • b6be65c Merge branch '1.9.x' into 1.10.x
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump spring.boot.version from 2.7.5 to 3.0.1

    Bump spring.boot.version from 2.7.5 to 3.0.1

    Bumps spring.boot.version from 2.7.5 to 3.0.1. Updates spring-boot-starter-actuator from 2.7.5 to 3.0.1

    Release notes

    Sourced from spring-boot-starter-actuator's releases.

    v3.0.1

    :lady_beetle: Bug Fixes

    • Fix typo in LocalDevToolsAutoConfiguration logging #33615
    • No warning is given when <springProfile> is used in a Logback <root> block #33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #33483
    • Reactive observation auto-configuration does not declare order for WebFilter #33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #33404
    • ZipkinRestTemplateSender is not customizable #33399
    • AOT doesn't work with Logstash Logback Encoder #33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #33363

    :notebook_with_decorative_cover: Documentation

    • Improve gradle plugin tags documentation #33617
    • Improve maven plugin tags documentation #33616
    • Fix typo in tomcat accesslog checkExists doc #33512
    • Documented Java compiler level is wrong #33505
    • Fix typo in documentation #33453
    • Update instead of replace environment in bootBuildImage documentation #33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #33410
    • Reinstate GraphQL testing documentaion #33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #33398

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.19 #33586
    • Upgrade to Byte Buddy 1.12.20 #33587
    • Upgrade to Couchbase Client 3.4.1 #33588
    • Upgrade to Dropwizard Metrics 4.2.14 #33589
    • Upgrade to Elasticsearch Client 8.5.3 #33590
    • Upgrade to Hibernate 6.1.6.Final #33591
    • Upgrade to HttpClient 4.5.14 #33592
    • Upgrade to HttpCore 4.4.16 #33593
    • Upgrade to Infinispan 14.0.4.Final #33594
    • Upgrade to Jaybird 4.0.8.java11 #33595
    • Upgrade to Jetty 11.0.13 #33596
    • Upgrade to jOOQ 3.17.6 #33597
    • Upgrade to Kotlin 1.7.22 #33598
    • Upgrade to Lettuce 6.2.2.RELEASE #33599
    • Upgrade to MongoDB 4.8.1 #33600
    • Upgrade to MSSQL JDBC 11.2.2.jre17 #33601
    • Upgrade to Native Build Tools Plugin 0.9.19 #33602

    ... (truncated)

    Commits
    • 837947c Release v3.0.1
    • 5929d95 Merge branch '2.7.x'
    • b10b788 Next development version (v2.7.8-SNAPSHOT)
    • f588793 Update copyright year of changed files
    • 0254619 Merge branch '2.7.x'
    • e4772cf Update copyright year of changed files
    • 2e7ca6f Warning if <springProfile> is used in phase 2 model elements
    • 2ed512d Use model.deepMarkAsSkipped in SpringProfileModelHandler
    • 532fed3 Increase couchbase connection timeout for tests
    • 9562a2c Merge branch '2.7.x'
    • Additional commits viewable in compare view

    Updates spring-boot-dependencies from 2.7.5 to 3.0.1

    Release notes

    Sourced from spring-boot-dependencies's releases.

    v3.0.1

    :lady_beetle: Bug Fixes

    • Fix typo in LocalDevToolsAutoConfiguration logging #33615
    • No warning is given when <springProfile> is used in a Logback <root> block #33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #33483
    • Reactive observation auto-configuration does not declare order for WebFilter #33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #33404
    • ZipkinRestTemplateSender is not customizable #33399
    • AOT doesn't work with Logstash Logback Encoder #33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #33363

    :notebook_with_decorative_cover: Documentation

    • Improve gradle plugin tags documentation #33617
    • Improve maven plugin tags documentation #33616
    • Fix typo in tomcat accesslog checkExists doc #33512
    • Documented Java compiler level is wrong #33505
    • Fix typo in documentation #33453
    • Update instead of replace environment in bootBuildImage documentation #33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #33410
    • Reinstate GraphQL testing documentaion #33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #33398

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.19 #33586
    • Upgrade to Byte Buddy 1.12.20 #33587
    • Upgrade to Couchbase Client 3.4.1 #33588
    • Upgrade to Dropwizard Metrics 4.2.14 #33589
    • Upgrade to Elasticsearch Client 8.5.3 #33590
    • Upgrade to Hibernate 6.1.6.Final #33591
    • Upgrade to HttpClient 4.5.14 #33592
    • Upgrade to HttpCore 4.4.16 #33593
    • Upgrade to Infinispan 14.0.4.Final #33594
    • Upgrade to Jaybird 4.0.8.java11 #33595
    • Upgrade to Jetty 11.0.13 #33596
    • Upgrade to jOOQ 3.17.6 #33597
    • Upgrade to Kotlin 1.7.22 #33598
    • Upgrade to Lettuce 6.2.2.RELEASE #33599
    • Upgrade to MongoDB 4.8.1 #33600
    • Upgrade to MSSQL JDBC 11.2.2.jre17 #33601
    • Upgrade to Native Build Tools Plugin 0.9.19 #33602

    ... (truncated)

    Commits
    • 837947c Release v3.0.1
    • 5929d95 Merge branch '2.7.x'
    • b10b788 Next development version (v2.7.8-SNAPSHOT)
    • f588793 Update copyright year of changed files
    • 0254619 Merge branch '2.7.x'
    • e4772cf Update copyright year of changed files
    • 2e7ca6f Warning if <springProfile> is used in phase 2 model elements
    • 2ed512d Use model.deepMarkAsSkipped in SpringProfileModelHandler
    • 532fed3 Increase couchbase connection timeout for tests
    • 9562a2c Merge branch '2.7.x'
    • Additional commits viewable in compare view

    Updates spring-boot-starter-security from 2.7.5 to 3.0.1

    Release notes

    Sourced from spring-boot-starter-security's releases.

    v3.0.1

    :lady_beetle: Bug Fixes

    • Fix typo in LocalDevToolsAutoConfiguration logging #33615
    • No warning is given when <springProfile> is used in a Logback <root> block #33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #33483
    • Reactive observation auto-configuration does not declare order for WebFilter #33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #33404
    • ZipkinRestTemplateSender is not customizable #33399
    • AOT doesn't work with Logstash Logback Encoder #33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #33363

    :notebook_with_decorative_cover: Documentation

    • Improve gradle plugin tags documentation #33617
    • Improve maven plugin tags documentation #33616
    • Fix typo in tomcat accesslog checkExists doc #33512
    • Documented Java compiler level is wrong #33505
    • Fix typo in documentation #33453
    • Update instead of replace environment in bootBuildImage documentation #33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #33410
    • Reinstate GraphQL testing documentaion #33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #33398

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.19 #33586
    • Upgrade to Byte Buddy 1.12.20 #33587
    • Upgrade to Couchbase Client 3.4.1 #33588
    • Upgrade to Dropwizard Metrics 4.2.14 #33589
    • Upgrade to Elasticsearch Client 8.5.3 #33590
    • Upgrade to Hibernate 6.1.6.Final #33591
    • Upgrade to HttpClient 4.5.14 #33592
    • Upgrade to HttpCore 4.4.16 #33593
    • Upgrade to Infinispan 14.0.4.Final #33594
    • Upgrade to Jaybird 4.0.8.java11 #33595
    • Upgrade to Jetty 11.0.13 #33596
    • Upgrade to jOOQ 3.17.6 #33597
    • Upgrade to Kotlin 1.7.22 #33598
    • Upgrade to Lettuce 6.2.2.RELEASE #33599
    • Upgrade to MongoDB 4.8.1 #33600
    • Upgrade to MSSQL JDBC 11.2.2.jre17 #33601
    • Upgrade to Native Build Tools Plugin 0.9.19 #33602

    ... (truncated)

    Commits
    • 837947c Release v3.0.1
    • 5929d95 Merge branch '2.7.x'
    • b10b788 Next development version (v2.7.8-SNAPSHOT)
    • f588793 Update copyright year of changed files
    • 0254619 Merge branch '2.7.x'
    • e4772cf Update copyright year of changed files
    • 2e7ca6f Warning if <springProfile> is used in phase 2 model elements
    • 2ed512d Use model.deepMarkAsSkipped in SpringProfileModelHandler
    • 532fed3 Increase couchbase connection timeout for tests
    • 9562a2c Merge branch '2.7.x'
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump spring-websocket from 5.3.23 to 6.0.3

    Bump spring-websocket from 5.3.23 to 6.0.3

    Bumps spring-websocket from 5.3.23 to 6.0.3.

    Release notes

    Sourced from spring-websocket's releases.

    v6.0.3

    :star: New Features

    • Throw PessimisticLockingFailureException/CannotAcquireLockException instead of plain ConcurrencyFailureException #29675
    • Introduce additional constructors in MockClientHttpRequest and MockClientHttpResponse #29670
    • Fall back to JdkClientHttpConnector as ClientHttpConnector #29645
    • Optimize object creation in RequestMappingHandlerMapping#handleNoMatch #29634
    • Align multipart codecs on client and server #29630
    • Deprecate "application/graphql+json" media type after spec changes #29617
    • HTTP interface client does not call FormHttpMessageWriter when writing form data #29615
    • ProblemDetail doesn't override the equals method #29606
    • Add title to SockJS iFrames for accessibility compliance #29594
    • Forbid loading of a test's ApplicationContext in AOT mode if AOT processing failed #29579
    • Deprecate JettyWebSocketClient in favor of StandardWebSocketClient #29576
    • Improve options to expose MessageSource formatted errors for a ProblemDetail response #29574
    • Make @ModelAttribute and @InitBinder annotations @Reflective #29572
    • Update BindingReflectionHintsRegistrar to support properties on records #29571

    :lady_beetle: Bug Fixes

    • Cannot use WebDAV methods in Spring MVC 6.0 anymore #29689
    • AnnotatedElementUtils.findMergedRepeatableAnnotations does not fetch results when other attributes exist in container annotation #29685
    • BeanWrapperImpl NPE in setWrappedInstance after invoking getPropertyValue #29681
    • SpEL ConstructorReference does not generate AST representation of arrays #29665
    • NullPointerException in BindingReflectionHintsRegistrar for anonymous classes #29657
    • DataBufferInputStream violates InputStream contract #29642
    • Component scanning no longer uses component index for @Named, @ManagedBean, and other Jakarta annotations #29641
    • Fix canWrite in PartHttpMessageWriter #29631
    • NoHandlerFoundException mistakenly returns request headers from ErrorResponse#getHeaders #29626
    • URI override for @HttpExchange doesn't work if there are both URI and @PathVariable method parameters #29624
    • Unnecessary parameter name introspection for constructor-arg resolution (leading to LocalVariableTableParameterNameDiscoverer warnings) #29612
    • Set detail from reason in both constructors of ResponseStatusException #29608
    • SpEL string literal misses single quotation marks in toStringAST() #29604
    • AOT code generation fails for bean of type boolean #29598
    • request-scoped bean with @Lazy fails in native image (due to missing detection of CGLIB lazy resolution proxies) #29584
    • 500 error from WebFlux when parsing Content-Type leads to InvalidMediaTypeException #29565
    • ConcurrentLruCache implementation is using too much heap memory #29520
    • Duplicate key violation gets translated to DataIntegrityViolationException instead of DuplicateKeyException in Spring 6 #29511
    • SpEL: Two double quotes are replaced by one double quote in single quoted String literal (and vice versa) #28356

    :notebook_with_decorative_cover: Documentation

    • Fix ErrorResponse#type documentation #29632
    • Fix typo in observability documentation #29590
    • Consistent documentation references to Jakarta WebSocket (2.1) #29581
    • Unrendered asciidoc headings in reference documentation #29569
    • Document observability support #29524

    :hammer: Dependency Upgrades

    ... (truncated)

    Commits
    • 0fbc94f Release v6.0.3
    • 6e08c56 Improve Javadoc for RepeatableContainers
    • fb6d3f5 Remove duplicated test code
    • 6fe5652 Support non-standard HTTP methods in FrameworkServlet
    • ca68bbc Upgrade to Reactor 2022.0.1
    • e7bcb48 Remove obsolete AttributeMethods.hasOnlyValueAttribute() method
    • 433b1c4 Support repeatable annotation containers with multiple attributes
    • 0b08246 Revise RepeatableContainersTests
    • c7bdfbe Add missing Javadoc
    • 618989d Update copyright date
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(7.0.0-pr2)
Owner
Yahoo
This organization is the home to many of the active open source projects published by engineers at Yahoo Inc.
Yahoo
Convert Java to JSON. Convert JSON to Java. Pretty print JSON. Java JSON serializer.

json-io Perfect Java serialization to and from JSON format (available on Maven Central). To include in your project: <dependency> <groupId>com.cedar

John DeRegnaucourt 303 Dec 30, 2022
JSON to JSON transformation library written in Java.

Jolt JSON to JSON transformation library written in Java where the "specification" for the transform is itself a JSON document. Useful For Transformin

Bazaarvoice 1.3k Dec 30, 2022
A simple java JSON deserializer that can convert a JSON into a java object in an easy way

JSavON A simple java JSON deserializer that can convert a JSON into a java object in an easy way. This library also provide a strong object convertion

null 0 Mar 18, 2022
Generate Java types from JSON or JSON Schema and annotates those types for data-binding with Jackson, Gson, etc

jsonschema2pojo jsonschema2pojo generates Java types from JSON Schema (or example JSON) and can annotate those types for data-binding with Jackson 2.x

Joe Littlejohn 5.9k Jan 5, 2023
Essential-json - JSON without fuss

Essential JSON Essential JSON Rationale Description Usage Inclusion in your project Parsing JSON Rendering JSON Building JSON Converting to JSON Refer

Claude Brisson 1 Nov 9, 2021
A 250 lines single-source-file hackable JSON deserializer for the JVM. Reinventing the JSON wheel.

JSON Wheel Have you ever written scripts in Java 11+ and needed to operate on some JSON string? Have you ever needed to extract just that one deeply-n

Roman Böhm 14 Jan 4, 2023
Lean JSON Library for Java, with a compact, elegant API.

mJson is an extremely lightweight Java JSON library with a very concise API. The source code is a single Java file. The license is Apache 2.0. Because

Borislav Iordanov 77 Dec 25, 2022
A Java serialization/deserialization library to convert Java Objects into JSON and back

Gson Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to a

Google 21.7k Jan 8, 2023
A universal types-preserving Java serialization library that can convert arbitrary Java Objects into JSON and back

A universal types-preserving Java serialization library that can convert arbitrary Java Objects into JSON and back, with a transparent support of any kind of self-references and with a full Java 9 compatibility.

Andrey Mogilev 9 Dec 30, 2021
A modern JSON library for Kotlin and Java.

Moshi Moshi is a modern JSON library for Android and Java. It makes it easy to parse JSON into Java objects: String json = ...; Moshi moshi = new Mos

Square 8.7k Dec 31, 2022
Sawmill is a JSON transformation Java library

Update: June 25, 2020 The 2.0 release of Sawmill introduces a breaking change to the GeoIpProcessor to comply with the updated license of the MaxMind

Logz.io 100 Jan 1, 2023
Genson a fast & modular Java <> Json library

Genson Genson is a complete json <-> java conversion library, providing full databinding, streaming and much more. Gensons main strengths? Easy to use

null 212 Jan 3, 2023
JSON Library for Java with a focus on providing a clean DSL

JSON Library for Java with a focus on providing a clean DSL

Vaishnav Anil 0 Jul 11, 2022
High performance JVM JSON library

DSL-JSON library Fastest JVM (Java/Android/Scala/Kotlin) JSON library with advanced compile-time databinding support. Compatible with DSL Platform. Ja

New Generation Software Ltd 835 Jan 2, 2023
Screaming fast JSON parsing and serialization library for Android.

#LoganSquare The fastest JSON parsing and serializing library available for Android. Based on Jackson's streaming API, LoganSquare is able to consiste

BlueLine Labs 3.2k Dec 18, 2022
A JSON Transmission Protocol and an ORM Library for automatically providing APIs and Docs.

?? 零代码、热更新、全自动 ORM 库,后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构。 ?? A JSON Transmission Protocol and an ORM Library for automatically providing APIs and Docs.

Tencent 14.4k Dec 31, 2022
Jakarta money is a helpful library for a better developer experience when combining Money-API with Jakarta and MicroProfile API.

jakarta-money Jakarta money is a helpful library for a better developer experience when combining Money-API with Jakarta and MicroProfile API. The dep

Money and Currency API | JavaMoney 19 Aug 12, 2022
A fast JSON parser/generator for Java.

fastjson Fastjson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON str

Alibaba 25.1k Dec 31, 2022
A reference implementation of a JSON package in Java.

JSON in Java [package org.json] Click here if you just want the latest release jar file. Overview JSON is a light-weight language-independent data int

Sean Leary 4.2k Jan 6, 2023