ensure id is converted to long when required
diff --git a/geronimo-opentracing-impl/src/main/java/org/apache/geronimo/microprofile/opentracing/microprofile/zipkin/ZipkinConverter.java b/geronimo-opentracing-impl/src/main/java/org/apache/geronimo/microprofile/opentracing/microprofile/zipkin/ZipkinConverter.java
index f7fc1b5..d2f62d0 100644
--- a/geronimo-opentracing-impl/src/main/java/org/apache/geronimo/microprofile/opentracing/microprofile/zipkin/ZipkinConverter.java
+++ b/geronimo-opentracing-impl/src/main/java/org/apache/geronimo/microprofile/opentracing/microprofile/zipkin/ZipkinConverter.java
@@ -63,9 +63,9 @@
 
     private ZipkinSpan toZipkin(final SpanImpl span) {
         final ZipkinSpan zipkin = new ZipkinSpan();
-        zipkin.setParentId(Long.class.cast(span.getParentId()));
-        zipkin.setTraceId(Long.class.cast(span.getTraceId()));
-        zipkin.setId(Long.class.cast(span.getId()));
+        zipkin.setParentId(asLong(span.getParentId()));
+        zipkin.setTraceId(asLong(span.getTraceId()));
+        zipkin.setId(asLong(span.getId()));
         zipkin.setName(span.getName());
         zipkin.setKind(ofNullable(span.getKind()).map(s -> s.toUpperCase(ROOT)).orElse(null));
         zipkin.setTimestamp(span.getTimestamp());
@@ -79,6 +79,16 @@
         return zipkin;
     }
 
+    private long asLong(final Object value) {
+        if (value == null) {
+            return 0;
+        }
+        if (Long.class.isInstance(value)) {
+            return Long.class.cast(value);
+        }
+        return Long.valueOf(String.valueOf(value));
+    }
+
     private ZipkinSpan.ZipkinEndpoint toEndpoint(final SpanImpl span) {
         final Map<String, Object> tags = span.getTags();
         switch (String.valueOf(tags.get(Tags.SPAN_KIND.getKey()))) {