Skip to content

Targeting Organizations with &'s in their names does not work. #340

@davidehringer

Description

@davidehringer

In v2, when I attempt to target an org with and ampersand in the name, the org cannot be found. For example:

$ cf create-org "A & B"
Creating org A & B as dehringer...
OK

TIP: Use 'cf target -o A & B' to target new org
$ cf org "A & B"
Getting info for org A & B as dehringer...
OK

A & B:                      
         domains:        sandbox.xyz.com   
         quota:          default (10240M memory limit, Unlimited instance memory limit, 1000 routes, 100 services, paid services allowed)   
         spaces:            
         space quotas:

The following code will throw an exception because "A & B" cannot be found:

...

        Streams
                .wrap(operations.organizations().list())
                .map(Organization::getName)
                .flatMap(orgName -> {
                    CloudFoundryOperations orgOperations = new CloudFoundryOperationsBuilder()
                            .cloudFoundryClient(client)
                            .target(orgName)
                            .build();
                    return orgOperations.spaces().list();
                })
                .consume(System.out::println);

Exception:

Exception in thread "main" reactor.core.error.ReactorFatalException: java.lang.IllegalArgumentException: Organization A & B does not exist
    at reactor.core.error.ReactorFatalException.create(ReactorFatalException.java:35)
    at reactor.core.subscriber.ConsumerSubscriber.doError(ConsumerSubscriber.java:128)
    at reactor.rx.subscriber.InterruptableSubscriber.doSafeError(InterruptableSubscriber.java:127)
    at reactor.rx.subscriber.InterruptableSubscriber.doError(InterruptableSubscriber.java:95)
    at reactor.core.subscriber.ConsumerSubscriber.onError(ConsumerSubscriber.java:115)
    at reactor.core.subscriber.SubscriberBarrier.doOnSubscriberError(SubscriberBarrier.java:115)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:95)
    at reactor.core.publisher.PublisherMap$MapBarrier.doNext(PublisherMap.java:81)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.publisher.PublisherMap$MapBarrier.doNext(PublisherMap.java:81)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.tryEmit(PublisherFlatMap.java:303)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onNext(PublisherFlatMap.java:661)
    at reactor.core.subscriber.SubscriberWithContext.onNext(SubscriberWithContext.java:93)
    at reactor.core.publisher.ForEachSequencer.accept(ForEachSequencer.java:41)
    at reactor.core.publisher.ForEachSequencer$IterableSequencer.accept(ForEachSequencer.java:55)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:600)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:569)
    at reactor.core.publisher.PublisherFactory$SubscriberProxy.request(PublisherFactory.java:504)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onSubscribe(PublisherFlatMap.java:655)
    at reactor.core.publisher.PublisherFactory$ReactorPublisher.subscribe(PublisherFactory.java:367)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doNext(PublisherFlatMap.java:179)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.tryEmit(PublisherFlatMap.java:303)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onNext(PublisherFlatMap.java:661)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.tryEmit(PublisherFlatMap.java:303)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onNext(PublisherFlatMap.java:661)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.tryEmit(PublisherFlatMap.java:303)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onNext(PublisherFlatMap.java:661)
    at reactor.core.subscription.ReactiveSession.emit(ReactiveSession.java:150)
    at reactor.core.subscription.ReactiveSession.onNext(ReactiveSession.java:377)
    at org.cloudfoundry.client.spring.util.AbstractSpringOperations$2$1.accept(AbstractSpringOperations.java:86)
    at org.cloudfoundry.client.spring.util.AbstractSpringOperations$2$1.accept(AbstractSpringOperations.java:78)
    at reactor.core.publisher.PublisherFactory$YieldingReactiveSession.request(PublisherFactory.java:772)
    at reactor.core.publisher.PublisherFlatMap$BufferSubscriber.onSubscribe(PublisherFlatMap.java:655)
    at reactor.core.subscription.ReactiveSession.start(ReactiveSession.java:126)
    at reactor.core.publisher.PublisherFactory$SessionPublisher.subscribe(PublisherFactory.java:738)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:83)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doNext(PublisherFlatMap.java:179)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.subscriber.SubscriberWithContext.onNext(SubscriberWithContext.java:93)
    at reactor.rx.stream.StreamRange$RangeSequence.accept(StreamRange.java:141)
    at reactor.rx.stream.StreamRange$RangeSequence.accept(StreamRange.java:131)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:600)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:569)
    at reactor.core.publisher.PublisherFactory$SubscriberProxy.request(PublisherFactory.java:504)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doOnSubscribe(PublisherFlatMap.java:157)
    at reactor.core.subscriber.SubscriberBarrier.onSubscribe(SubscriberBarrier.java:68)
    at reactor.core.publisher.PublisherFactory$ReactorPublisher.subscribe(PublisherFactory.java:367)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:92)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doNext(PublisherFlatMap.java:179)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.subscriber.SubscriberWithContext.onNext(SubscriberWithContext.java:93)
    at reactor.core.publisher.ForEachSequencer.accept(ForEachSequencer.java:41)
    at reactor.core.publisher.ForEachSequencer$IterableSequencer.accept(ForEachSequencer.java:55)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:600)
    at reactor.core.publisher.PublisherFactory$ForEachBiConsumer.accept(PublisherFactory.java:569)
    at reactor.core.publisher.PublisherFactory$SubscriberProxy.request(PublisherFactory.java:504)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doOnSubscribe(PublisherFlatMap.java:157)
    at reactor.core.subscriber.SubscriberBarrier.onSubscribe(SubscriberBarrier.java:68)
    at reactor.core.publisher.PublisherFactory$ReactorPublisher.subscribe(PublisherFactory.java:367)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:92)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doNext(PublisherFlatMap.java:179)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.rx.stream.StreamTake$TakeAction.doNext(StreamTake.java:79)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    at reactor.core.subscription.ReactiveSession.emit(ReactiveSession.java:150)
    at reactor.core.subscription.ReactiveSession.onNext(ReactiveSession.java:377)
    at org.cloudfoundry.client.spring.util.AbstractSpringOperations$2$1.accept(AbstractSpringOperations.java:86)
    at org.cloudfoundry.client.spring.util.AbstractSpringOperations$2$1.accept(AbstractSpringOperations.java:78)
    at reactor.core.publisher.PublisherFactory$YieldingReactiveSession.request(PublisherFactory.java:772)
    at reactor.core.subscriber.SubscriberWithDemand.requestMore(SubscriberWithDemand.java:110)
    at reactor.rx.stream.StreamTake$TakeAction.doRequest(StreamTake.java:55)
    at reactor.core.subscriber.SubscriberBarrier.request(SubscriberBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doOnSubscribe(PublisherFlatMap.java:157)
    at reactor.core.subscriber.SubscriberBarrier.onSubscribe(SubscriberBarrier.java:68)
    at reactor.core.subscriber.SubscriberBarrier.doOnSubscribe(SubscriberBarrier.java:79)
    at reactor.core.subscriber.SubscriberBarrier.onSubscribe(SubscriberBarrier.java:68)
    at reactor.core.subscription.ReactiveSession.start(ReactiveSession.java:126)
    at reactor.core.publisher.PublisherFactory$SessionPublisher.subscribe(PublisherFactory.java:738)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:83)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.rx.stream.StreamBarrier.subscribe(StreamBarrier.java:52)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:92)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:92)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.core.publisher.PublisherFactory$PublisherBarrier.subscribe(PublisherFactory.java:309)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFactory$PublisherBarrier.subscribe(PublisherFactory.java:309)
    at reactor.rx.stream.StreamBarrier$Identity.subscribe(StreamBarrier.java:135)
    at reactor.core.publisher.PublisherFlatMap.subscribe(PublisherFlatMap.java:92)
    at reactor.rx.Stream$7.subscribe(Stream.java:921)
    at reactor.rx.Stream.consume(Stream.java:523)
    at com.lmig.cf.licensing.ReportExporter.main(ReportExporter.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.IllegalArgumentException: Organization A & B does not exist
    at org.cloudfoundry.operations.CloudFoundryOperationsBuilder.failIfLessThanOne(CloudFoundryOperationsBuilder.java:100)
    at org.cloudfoundry.operations.CloudFoundryOperationsBuilder.getOrganizationId(CloudFoundryOperationsBuilder.java:122)
    at org.cloudfoundry.operations.CloudFoundryOperationsBuilder.build(CloudFoundryOperationsBuilder.java:56)
    at com.lmig.cf.licensing.ReportExporter.lambda$main$0(ReportExporter.java:91)
    at com.lmig.cf.licensing.ReportExporter$$Lambda$3/1117519786.apply(Unknown Source)
    at reactor.core.publisher.PublisherFlatMap$MergeBarrier.doNext(PublisherFlatMap.java:166)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:86)
    ... 100 more
Caused by: reactor.core.error.Exceptions$ValueCause: Exception while signaling value: A & B
    at reactor.core.error.Exceptions.addValueAsLastCause(Exceptions.java:131)
    at reactor.core.subscriber.SubscriberBarrier.onNext(SubscriberBarrier.java:95)
    ... 100 more

It does look like the java client is using a slightly different set of query parameters compared to the CLI when doing this lookup.

I have not tried this with other entities such as apps or spaces so I don't know if this is isolated to just orgs or applies to looking up all entities by name.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions