marklogicmarklogic-9

Exception while adding Properties Metadata


we are using the below code to add Properties Metadata to a document in MarkLogic but we are getting javax.xml.bind.DatatypeConverter exception.

DocumentMetadataHandle documentMetadataHandle = new DocumentMetadataHandle();
documentMetadataHandle.getProperties().put("test", "test");
XMLDocumentManager xmldocMgr = client.newXMLDocumentManager();
xmldocMgr.write("/test/sample", metadataHandle, domHandle);

We are using MarkLogic 10.0.-2.1 and the Java Client API version is 4.1.0

Exception is

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
    at com.marklogic.client.impl.ValueConverter.StringToString(ValueConverter.java:575)
    at com.marklogic.client.impl.ValueConverter.convertFromJava(ValueConverter.java:253)
    at com.marklogic.client.impl.ValueConverter.convertFromJava(ValueConverter.java:94)
    at com.marklogic.client.io.DocumentMetadataHandle.sendPropertiesImpl(DocumentMetadataHandle.java:888)
    at com.marklogic.client.io.DocumentMetadataHandle.sendMetadataImpl(DocumentMetadataHandle.java:791)
    at com.marklogic.client.io.DocumentMetadataHandle.write(DocumentMetadataHandle.java:575)
    at com.marklogic.client.impl.StreamingOutputImpl.writeTo(StreamingOutputImpl.java:58)
    at okhttp3.MultipartBody.writeOrCountBytes(MultipartBody.java:173)
    at okhttp3.MultipartBody.writeTo(MultipartBody.java:114)
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:69)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:45)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229)
    at okhttp3.RealCall.execute(RealCall.java:81)
    at com.marklogic.client.impl.OkHttpServices.sendRequestOnce(OkHttpServices.java:706)
    at com.marklogic.client.impl.OkHttpServices.sendRequestOnce(OkHttpServices.java:701)
    at com.marklogic.client.impl.OkHttpServices.putPostDocumentImpl(OkHttpServices.java:1550)
    at com.marklogic.client.impl.OkHttpServices.putDocument(OkHttpServices.java:1260)
    at com.marklogic.client.impl.DocumentManagerImpl.write(DocumentManagerImpl.java:920)
    at com.marklogic.client.impl.DocumentManagerImpl.write(DocumentManagerImpl.java:758)
    at com.marklogic.client.impl.DocumentManagerImpl.write(DocumentManagerImpl.java:702)
    at com.lock.DemoApplication.createXMLDocument(DemoApplication.java:36)
    at com.lock.DemoApplication.main(DemoApplication.java:64)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 36 more

Please help us to fix this issue.


Solution

  • What Java version is used for the compilation?

    Recent versions of Java have moved JAXB (including the data type converter routines) out of the core Java libraries and into optional download libraries.

    Here's an example of how to add these dependencies using Gradle:

    https://github.com/marklogic/java-client-api/blob/master/marklogic-client-api/build.gradle#L10-L14

    Hoping that helps,