attempting to use threshr to query the redsky api results in a io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api error.
We want to be sure this isn't a one-off problem.
[X] This problem is something that I can consistently produce.
Expected Behavior
I should be able to use any part of the threshr library as long as I have a redsky api key assigned to an env. variable.
Steps To Reproduce
One way is to write a CLI tool for any part of the library. ie the pdp endpoint.
write main command:
package com.graqr;
import com.graqr.threshr.Threshr;
import com.graqr.threshr.ThreshrException;
import com.graqr.threshr.model.queryparam.TargetStore;
import com.graqr.threshr.model.queryparam.Tcin;
import com.graqr.threshr.model.redsky.product.Product;
import com.graqr.threshr.model.redsky.store.Store;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.serde.ObjectMapper;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import java.io.IOException;
@Singleton
@Command(name = "pdp", mixinStandardHelpOptions = true)
public class Pdp implements Runnable {
private final Threshr threshr;
@Option(names = {"--tcin", "-t"},
required = true,
description = "",
converter = TcinsConverter.class)
Tcin tcinValues;
@Option(names = {"--store-id", "-s"},
required = true,
description = "store id as given in redsky api",
converter = TargetStoreConverter.class)
TargetStore store;
@Inject
ObjectMapper mapper;
public Pdp(Threshr threshr) {
this.threshr = threshr;
}
public static void main(String[] args) {
PicocliRunner.run(Pdp.class, args);
}
public void run() {
Product product;
try {
product = threshr.fetchProductDetails(store.getStoreId(), store.getStoreId(), tcinValues.getTcins());
} catch (ThreshrException e) {
throw new CommandLine.PicocliException("Failed to fetch product details", e);
}
try {
System.out.println(mapper.writeValueAsString(product));
} catch (IOException e) {
throw new CommandLine.PicocliException("failed to write returned product as JSON", e);
}
}
static class TargetStoreConverter implements CommandLine.ITypeConverter<TargetStore> {
@Inject
Threshr threshr;
@Override
public TargetStore convert(String s) throws ThreshrException {
Store store = threshr.getStore(s);
return new TargetStore(store.storeId(),
store.mailingAddress().state(),
store.mailingAddress().postalCode(),
store.geographicSpecifications().latitude(),
store.geographicSpecifications().longitude());
}
}
static class TcinsConverter implements CommandLine.ITypeConverter<Tcin> {
@Override
public Tcin convert(String s) throws ThreshrException {
if (s.split(",").length > 1) {
throw new CommandLine.TypeConversionException("only one tcin can be provided");
}
return new Tcin(s);
}
}
}
/home/jimmy/.sdkman/candidates/java/17.0.9-graalce/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/lib/idea_rt.jar=42711:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/bin -Dfile.encoding=UTF-8 -classpath /home/jimmy/.m2/repository/org/junit/platform/junit-platform-launcher/1.10.2/junit-platform-launcher-1.10.2.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/lib/idea_rt.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/plugins/junit/lib/junit5-rt.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/plugins/junit/lib/junit-rt.jar:/home/jimmy/src/github.com/graqr/threshr-cli/target/test-classes:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes:/home/jimmy/.m2/repository/com/graqr/threshr/0.0.13/threshr-0.0.13.jar:/home/jimmy/.m2/repository/org/jacoco/jacoco-maven-plugin/0.8.11/jacoco-maven-plugin-0.8.11.jar:/home/jimmy/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.jar:/home/jimmy/.m2/repository/org/apache/maven/shared/file-management/3.1.0/file-management-3.1.0.jar:/home/jimmy/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar:/home/jimmy/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar:/home/jimmy/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0/doxia-sink-api-1.0.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.agent/0.8.11/org.jacoco.agent-0.8.11-runtime.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.core/0.8.11/org.jacoco.core-0.8.11.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.report/0.8.11/org.jacoco.report-0.8.11.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-client/4.5.3/micronaut-http-client-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-client-core/4.5.3/micronaut-http-client-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-discovery-core/4.5.3/micronaut-discovery-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-websocket/4.5.3/micronaut-websocket-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-netty/4.5.3/micronaut-http-netty-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-buffer-netty/4.5.3/micronaut-buffer-netty-4.5.3.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-http/4.1.110.Final/netty-codec-http-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-http2/4.1.110.Final/netty-codec-http2-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-handler/4.1.110.Final/netty-handler-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-resolver/4.1.110.Final/netty-resolver-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.110.Final/netty-transport-native-unix-common-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-handler-proxy/4.1.110.Final/netty-handler-proxy-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-common/4.1.110.Final/netty-common-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-buffer/4.1.110.Final/netty-buffer-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-transport/4.1.110.Final/netty-transport-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec/4.1.110.Final/netty-codec-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-socks/4.1.110.Final/netty-codec-socks-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/projectreactor/reactor-core/3.5.11/reactor-core-3.5.11.jar:/home/jimmy/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-jackson-databind/4.5.3/micronaut-jackson-databind-4.5.3.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.17.1/jackson-databind-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.1/jackson-datatype-jdk8-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.1/jackson-datatype-jsr310-2.17.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-retry/4.5.3/micronaut-retry-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core-reactive/4.5.3/micronaut-core-reactive-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/validation/micronaut-validation/4.6.0/micronaut-validation-4.6.0.jar:/home/jimmy/.m2/repository/jakarta/validation/jakarta.validation-api/3.1.0/jakarta.validation-api-3.1.0.jar:/home/jimmy/.m2/repository/io/micronaut/reactor/micronaut-reactor/3.4.0/micronaut-reactor-3.4.0.jar:/home/jimmy/.m2/repository/info/picocli/picocli/4.7.6/picocli-4.7.6.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-jdbc/4.8.1/micronaut-data-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-inject/4.5.3/micronaut-inject-4.5.3.jar:/home/jimmy/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar:/home/jimmy/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core/4.5.3/micronaut-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-runtime/4.8.1/micronaut-data-runtime-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-model/4.8.1/micronaut-data-model-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-tx/4.8.1/micronaut-data-tx-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-tx-jdbc/4.8.1/micronaut-data-tx-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-aop/4.5.3/micronaut-aop-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-connection-jdbc/4.8.1/micronaut-data-connection-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-connection/4.8.1/micronaut-data-connection-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-context-propagation/4.5.3/micronaut-context-propagation-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-json-core/4.5.3/micronaut-json-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http/4.5.3/micronaut-http-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/sql/micronaut-jdbc/5.7.0/micronaut-jdbc-5.7.0.jar:/home/jimmy/.m2/repository/io/micronaut/picocli/micronaut-picocli/5.4.0/micronaut-picocli-5.4.0.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-jackson/2.10.1/micronaut-serde-jackson-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-jackson-core/4.5.3/micronaut-jackson-core-4.5.3.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.17.1/jackson-core-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.17.1/jackson-annotations-2.17.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-context/4.5.3/micronaut-context-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-api/2.10.1/micronaut-serde-api-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-support/2.10.1/micronaut-serde-support-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/sql/micronaut-jdbc-hikari/5.7.0/micronaut-jdbc-hikari-5.7.0.jar:/home/jimmy/.m2/repository/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar:/home/jimmy/.m2/repository/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar:/home/jimmy/.m2/repository/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar:/home/jimmy/.m2/repository/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar:/home/jimmy/.m2/repository/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar:/home/jimmy/.m2/repository/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar:/home/jimmy/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/home/jimmy/.m2/repository/io/micronaut/testresources/micronaut-test-resources-client/2.5.2/micronaut-test-resources-client-2.5.2.jar:/home/jimmy/.m2/repository/io/micronaut/testresources/micronaut-test-resources-core/2.5.2/micronaut-test-resources-core-2.5.2.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-inject-groovy/4.5.3/micronaut-inject-groovy-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core-processor/4.5.3/micronaut-core-processor-4.5.3.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm-tree/9.7/asm-tree-9.7.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm/9.7/asm-9.7.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm-commons/9.7/asm-commons-9.7.jar:/home/jimmy/.m2/repository/com/github/javaparser/javaparser-symbol-solver-core/3.25.10/javaparser-symbol-solver-core-3.25.10.jar:/home/jimmy/.m2/repository/com/github/javaparser/javaparser-core/3.25.10/javaparser-core-3.25.10.jar:/home/jimmy/.m2/repository/org/apache/groovy/groovy/4.0.21/groovy-4.0.21.jar:/home/jimmy/.m2/repository/io/micronaut/test/micronaut-test-spock/4.3.0/micronaut-test-spock-4.3.0.jar:/home/jimmy/.m2/repository/io/micronaut/test/micronaut-test-core/4.3.0/micronaut-test-core-4.3.0.jar:/home/jimmy/.m2/repository/org/apache/groovy/groovy-sql/4.0.21/groovy-sql-4.0.21.jar:/home/jimmy/.m2/repository/org/spockframework/spock-core/2.3-groovy-4.0/spock-core-2.3-groovy-4.0.jar:/home/jimmy/.m2/repository/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.jar:/home/jimmy/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar:/home/jimmy/.m2/repository/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar:/home/jimmy/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/home/jimmy/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.graqr.PdpSpec,querying #tcin for #locationId returns expected data
Condition not satisfied:
errStream.toString().isBlank()
| | |
| | false
| Invalid value for option '--store-id': cannot convert '1961' to TargetStore (io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api)
| Usage: pdp [-hV] -s=<store> -t=<tcinValues>
| -h, --help Show this help message and exit.
| -s, --store-id=<store> store id as given in redsky api
| -t, --tcin=<tcinValues>
| -V, --version Print version information and exit.
Invalid value for option '--store-id': cannot convert '1961' to TargetStore (io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api)
Usage: pdp [-hV] -s=<store> -t=<tcinValues>
-h, --help Show this help message and exit.
-s, --store-id=<store> store id as given in redsky api
-t, --tcin=<tcinValues>
-V, --version Print version information and exit.
at com.graqr.PdpSpec.querying #tcin for #locationId returns expected data(PdpSpec.groovy:93)
15:47:37,978 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.3
15:47:37,979 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - No custom configurators were discovered as a service.
15:47:37,979 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator
15:47:37,980 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Constructed configurator of type class ch.qos.logback.classic.joran.SerializedModelConfigurator
15:47:37,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.scmo]
15:47:37,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.scmo]
15:47:37,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - ch.qos.logback.classic.joran.SerializedModelConfigurator.configure() call lasted 5 milliseconds. ExecutionStatus=INVOKE_NEXT_IF_ANY
15:47:37,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
15:47:37,995 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
15:47:37,995 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:47:37,998 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes/logback.xml]
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs multiple times on the classpath.
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs at [file:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes/logback.xml]
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs at [jar:file:/home/jimmy/.m2/repository/com/graqr/threshr/0.0.13/threshr-0.0.13.jar!/logback.xml]
15:47:38,121 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
15:47:38,122 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:47:38,129 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:47:38,162 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to INFO
15:47:38,162 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
15:47:38,163 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@10c626be - End of configuration.
15:47:38,164 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2fc0cc3 - Registering current configuration as safe fallback point
15:47:38,164 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 169 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
15:47:38.448 [main] INFO i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [cli, test]
15:47:38.719 [main] INFO i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [test]
Process finished with exit code 255
Current Behavior
attempting to use threshr to query the redsky api results in a
io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api
error.We want to be sure this isn't a one-off problem.
Expected Behavior
I should be able to use any part of the threshr library as long as I have a redsky api key assigned to an env. variable.
Steps To Reproduce
One way is to write a CLI tool for any part of the library. ie the pdp endpoint.
write main command:
write spock test:
assign variables as described in the testing README.
calling the last test fails when it attempts to validate the store ID. see below output under pictures.
A picture is worth a thousand words
Environment
OS: Fedora 40 JVM: Graal-ce 17.0.9 maven wrapper version: "6.9.4-200.fc40.x86_64" arch: "amd64" family: "unix"
Code of Conduct