# java-general-availability-and-managed-oauth-support
Source: https://speakeasy.com/blog/java-general-availability-and-managed-oauth-support


Another changelog, another massive improvement to our SDK generation. This month, it's Java's turn for a GA makeover. But our other languages aren't gathering dust. We've added support for managed OAuth2.0 client credentials flow, and flattened response objects.

Let's jump into it 🚀

## Java General Availability

Java is inevitable. You can have your head turned by all the new & exciting languages that are being created, but if you are serving a large organization, you will need to be ready to support Java.

Which is why we are excited to announce that Java is now Generally Available on the Speakeasy Platform! General availability means that every feature of our generation platform is now available for Java. As a bonus, we've taken this work as an opportunity to completely revamp the developer experience. Here are the highlights of what's changed:

- Enhanced `null` safety and `Optional` support
- Builder patterns for better readability, discoverability, and convenient overloads
- Lists instead of arrays for collections
- No direct field access (getter methods are used now)
- A simplified Gradle project structure
- Support for non-discriminated `oneOf`s
- Auto-Pagination
- Retry support
- OAuth2.0 support

Check out the new interface:

```java
public class Application {

    public static void main(String[] args) {
        try {
            MyPlatform sdk = MyPlatform.builder()
                .security(Security.builder()
                    .authHeader("Basic BASE_64_ENCODED(API_KEY)")
                    .build())
                .build();

            UserRequestBody req = UserRequestBody.builder()
                .name("Saj Batchu")
                .role(RoleType.ADMIN)
                .workspaces(java.util.List.of(
                    workspaceRef.builder()
                        .id("60d2fa12-8a04-11ee-b9d1-0242ac120002")
                        .build()))
                .build();

            CreateUserResponse res = sdk.user().create()
                .request(req)
                .call();

            if (res.user().isPresent()) {
                // handle response
            }
        } catch (Exception e) {
            // handle exception
        }
    }
}
```

For the details, please read the full announcement [here](/post/release-java-ga).

## 🚢 Improvements and Bug Fixes 🐛

**Based on most recent version: [Speakeasy v1.210.0](https://github.com/speakeasy-api/speakeasy/releases/tag/v1.210.0)**

🚢 Handle flat responses for empty status codes \
🚢 Fail schema validation if missing a server \
🚢 Propagate defaults for examples in parameters

### Typescript

🚢 Support Empty Error types \
🚢 Add support for response formats and flat responses \
🚢 Add managed OAuth2.0 client credentials flow support (as a SDK hook) \
🚢 Handle null enums fields and union members \
🐛 Fix missing imports with flat responses

### Java

🚢 Support passing in additional dependencies in the SDK \
🚢 Support `callAsStream` autopagination syntax \
🐛 Fix typo in README.md Error Handling section

### Python

🚢 Add support for response formats and flat responses

### Terraform

🚢 Use the default http client in TF to remove timeouts

### C#

🚢 Support naming servers

### Go

🚢 Add support for response formats and flat responses