spring-cloud-gcp: PublisherFactory returns PublisherInterface instead of Publisher

Describe the bug There was a change in the PublisherFactory in com.google.cloud:spring-cloud-gcp-pubsub version 2.0.6 used in com.google.cloud:spring-cloud-gcp-starter-pubsub which caused one of our applications to have a compilation error on the following line:

pubsubTemplate.getPublisherFactory.createPublisher(topic).publishAllOutstanding()

The reason for this is as follows:

In version 2.0.5 the PublisherFactory returns a Publisher

public interface PublisherFactory {
    Publisher createPublisher(String topic);
}

while in v 2.0.6 it returns a PublisherInterface

public interface PublisherFactory {
    PublisherInterface createPublisher(String topic);
}

The PublisherInterface doesn’t expose the Publisher method publishAllOutstanding().

This change is not mentioned in the change log for (release 2.0.6)[https://github.com/GoogleCloudPlatform/spring-cloud-gcp/releases/tag/v2.0.6].

The change was part of PR #548. In this change I notice that the CachingPublisherFactory implementation of PublisherFactory was also change to return a PublisherInterface instead of a Publisher, but the DefaultPublisherFactory was not (and still returns a Publisher).

Since this isn’t mentioned in the release notes, I wonder if this change was intentional? ~And also whether we can fix our compilation error by casting to a DefaultPublisherFactory going forward, or~ should assume that the publishAllOutstanding() is not intended to be exposed (as it’s not part of the PublisherInterface).

Update: casting to DefaultPublisherFactory didn’t work.

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Comments: 17 (7 by maintainers)

Most upvoted comments

I’ve filed googleapis/java-pubsub#949 in the client library – if it’s meant to be a public surface, we should support it. If not, the downcasting workaround is fine.