staticEndpoints is a synchronized map. However, shouldn't this whole block be synchronized? two threads might overlap before staticEnpoints.put() is executed and evaluate outboundEndpoint to null twice. That would lead to two endpoints being created and one lost.

Wouldn't it be better to use a Guava Cache instead?