package de.nava.mlsample; import com.marklogic.client.DatabaseClient; import com.marklogic.client.DatabaseClientFactory; import com.marklogic.client.document.JSONDocumentManager; import com.marklogic.client.document.XMLDocumentManager; import com.marklogic.client.io.JAXBHandle; import com.marklogic.client.query.QueryManager; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.filter.HTTPDigestAuthFilter; import com.sun.jersey.api.client.filter.LoggingFilter; import de.nava.mlsample.domain.Product; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import javax.xml.bind.JAXBException; /** * @author Niko Schmuck */ @Configuration @EnableAutoConfiguration @ComponentScan public class MarkLogicSampleApplication { @Value("${marklogic.host}") private String host; @Value("${marklogic.port}") private int port; @Value("${marklogic.username}") private String username; @Value("${marklogic.password}") private String password; @Bean public DatabaseClient getDatabaseClient() { try { // TODO: is this really (still) required? // configure once before creating a client DatabaseClientFactory.getHandleRegistry().register( JAXBHandle.newFactory(Product.class) ); } catch (JAXBException e) { e.printStackTrace(); } return DatabaseClientFactory.newClient(host, port, username, password, DatabaseClientFactory.Authentication.DIGEST); } @Bean public QueryManager getQueryManager() { return getDatabaseClient().newQueryManager(); } @Bean public XMLDocumentManager getXMLDocumentManager() { return getDatabaseClient().newXMLDocumentManager(); } @Bean public JSONDocumentManager getJSONDocumentManager() { return getDatabaseClient().newJSONDocumentManager(); } @Bean public String getMarkLogicBaseURL() { return String.format("http://%s:%d", host, port); } @Bean public Client getJerseyClient() { Client client = Client.create(); // thread-safe client.addFilter(new LoggingFilter()); client.addFilter(new HTTPDigestAuthFilter(username, password)); return client; } /** * The entrance point to the sample application, starts Spring Boot. */ public static void main(String[] args) throws Exception { SpringApplication.run(MarkLogicSampleApplication.class, args); } }