Я сталкиваюсь с проблемой во время работы с библиотекой Tracing-test в проекте Java.
Код: Выделить всё
Map baggageFromParent = ((SimpleTraceContext) context).baggageFromParent();
контекст:
- библиотека : io.micromer: tracing-test-test: 1.1.9
- : 1.1.9
- . Micrometer-Tracing Bridge-otel (on the ClassPath)
- language : java
- Инструмент построения : gradle
- framework : junit 5
Вот соответствующая часть кода из теста на микрометр. Этот код был добавлен в v1.1.9, поэтому, если я использую версию до этого, он работает нормально.
Код: Выделить всё
@Override
public Scope newScope(TraceContext context) {
if (context == null) {
SimpleTracer.resetCurrentSpan();
return Scope.NOOP;
}
SimpleSpan previous = SimpleTracer.getCurrentSpan();
SimpleTracer.setCurrentSpan(context);
Map baggageFromParent = ((SimpleTraceContext) context).baggageFromParent(); // Fails here
List baggageInScope = baggageFromParent.entrySet()
.stream()
.map(entry -> simpleTracer.simpleBaggageManager.createBaggageInScope(context, entry.getKey(),
entry.getValue()))
.collect(Collectors.toList());
return previous != null ? new RevertToPreviousScope(previous, baggageInScope) : new RevertToNullScope();
}
< /code>
error < /h3>
java.lang.classcastexception: класс io.micromert.tracing.otel.bridge.oteltracecontext не может быть поднят в класс io.micrometer.tel.test.simple.simpletracontext (io.micrometer.tracing.otel.bridge.oteltracecontext и io.micromert.traging.test.simple.simpletracecontext находится в неназванном модуле погрузчика ') < /p>
Наблюдения: < /h3
[list]
[*]OtelTraceContext
[*] Cast не удается, потому что тип времени выполнения -это oteltracecontext , а не Simpetracecontext .
[*] trable-bridge-bridge-bridge-bridge-bridge-oToTel . OTELTRACECONTEXT для использования в некоторых случаях.
[/list]
Вопрос:
Как я могу справиться с этой ситуацией правильно? Должен ли я рефактировать код, чтобы избежать кастинга, или есть лучший способ обеспечить совместимость между этими реализациями?
Подробнее здесь: https://stackoverflow.com/questions/795 ... st-library