Why are these application.properties not working? - java

I've been implementing a simple quarkus application for creating a CMIS API to work with Alfresco. Followed this tutorial (just to give a little insight)
Everything went well until I decided to use properties to pass the session parameters. I've added those to application.properties in main/resources/application.properties like this:
# Session properties
session.host=localhost
session.port=80
session.url=http://localhost:80/alfresco/api/-default-/cmis/versions/1.1/atom
session.compression=true
session.cache_ttl_objects=0
Then I tried defining them directly in the class I was using them, but since was getting null values I looked around for why was that happening and found this. That being said, I followed this structure which is supposed to fix that.
I created the class SessionConfig.java:
package com.c4pa.cmisservice;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import io.quarkus.arc.config.ConfigProperties;
#ConfigProperties(prefix = "session") // Already tried without this, using session.url, etc on each Property
public class SessionConfig {
#Inject // Already tried without this
#ConfigProperty(name = "url")
private String url;
#Inject // Already tried without this
#ConfigProperty(name = "compression", defaultValue = "true")
private String compression;
#Inject // Already tried without this
#ConfigProperty(name = "cache_ttl_objects", defaultValue = "0")
private String cacheTTLObjects;
public String getUrl(){
return this.url;
}
public void setUrl(String url){
this.url = url;
}
public String getCompression(){
return this.compression;
}
public void setCompression(String compression){
this.compression = compression;
}
public String getCacheTTLObjects(){
return this.cacheTTLObjects;
}
public void setCacheTTLObjects(String cacheTTLObjects){
this.cacheTTLObjects = cacheTTLObjects;
}
}
And I'm trying to use the properties on this class CMISClient.java:
#ApplicationScoped
public class CMISClient {
private static Map<String, Session> connections = new ConcurrentHashMap<String, Session>();
public CMISClient() { }
#Inject
SessionConfig sessionConfig;
public Session getSession(String connectionName, String username, String pwd) {
Session session = connections.get(connectionName);
System.out.println(sessionConfig.getUrl() + "|" + sessionConfig.getCompression() + "|" + sessionConfig.getCacheTTLObjects());
if (session == null) {
// No connection to Alfresco available, creating a new one
SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(SessionParameter.USER, username);
parameters.put(SessionParameter.PASSWORD, pwd);
parameters.put(SessionParameter.ATOMPUB_URL, sessionConfig.getUrl());
parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameters.put(SessionParameter.COMPRESSION, sessionConfig.getCompression());
parameters.put(SessionParameter.CACHE_TTL_OBJECTS, sessionConfig.getCacheTTLObjects());
...
}
return session;
}
...
}
But when I call the endpoint which calls the getSession method it results in org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException on the println of the getSession method. Of course, if I comment that, I'll get the same exception on the parameters.put lines instead.
Reversed stacktrace if it is useful:
java.lang.NullPointerException
at com.c4pa.cmisservice.CMISClient.getSession(CMISClient.java:46)
at com.c4pa.cmisservice.CMISResource.createConnection(CMISResource.java:42)
at com.c4pa.cmisservice.CMISResource.send(CMISResource.java:25)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:170)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:130)
at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:643)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:507)
at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:457)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:459)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:419)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:393)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:68)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:492)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:261)
at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:161)
at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:364)
at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:164)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:247)
at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:73)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:136)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.access$000(VertxRequestHandler.java:40)
at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:97)
at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:231)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.jboss.threads.JBossThread.run(JBossThread.java:479)
Resulted in: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:106)
at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:372)
at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:218)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:519)
... 20 more
Any ideas on why is this happening? Thanks a lot in advance.
EDIT:
#Path("/file")
public class CMISResource {
private CMISClient cmisClient;
private String connectionName;
private Session session;
#GET
#Path("/send")
#Produces(MediaType.TEXT_PLAIN)
public String send() throws IOException {
this.createConnection();
Folder folder = this.cmisClient.createFolder(session);
Document document = cmisClient.createDocument(session, folder);
return document.getName() + " was succesfully created (at least I hope so)";
}
private void createConnection() {
this.cmisClient = new CMISClient();
this.connectionName = "c4paAlf01";
this.session = cmisClient.getSession(connectionName, "username", "password");
}

Try this instead:
#ConfigProperties(prefix = "session")
public class SessionConfig {
public String url;
public String compression;
public String cacheTTLObjects;
}

Related

Transactional objects over RMI

I'm trying to do something that is quite impossible with Java, but maybe there's a solution.
The code below tries to pass a transactional object via RMI
public class FileRepositoryImpl extends UnicastRemoteObject
implements FileRepository {
#Override
public byte[] get(String appId, String filePath) throws RemoteException, NotBoundException {
Registry registry = LocateRegistry.getRegistry();
XodusRepository repository = (XodusRepository) registry.lookup(XodusRepository.class.getName());
final byte[][] bytes = {null};
repository.transact(appId, true, new Command<byte[]>() {
#Override public byte[] execute(jetbrains.exodus.entitystore.StoreTransaction txn) {
Entity entity = txn.findWithBlob(Constants.ENTITYSTORE_FILE, filePath).getLast();
if (entity != null) {
InputStream blobStream = entity.getBlob(filePath);
bytes[0] = Try.of(() -> ByteStreams.toByteArray(blobStream)).getOrNull();
}
return bytes[0];
}
});
return bytes[0];
}
}
However this code throws:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: com.mycompany.backend.repository.FileRepositoryImpl$1 (no security manager: RMI class loader disabled)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:391)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283)
at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260)
at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:209)
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:161)
at com.sun.proxy.$Proxy57.transact(Unknown Source)
at com.mycompany.backend.repository.FileRepositoryImpl.get(FileRepositoryImpl.java:48)
at com.mycompany.backend.hosting.MyCompanyFileRepresentation.write(MyCompanyFileRepresentation.java:91)
On the other side, the other Java process it have:
#Override public <T> T transact(String appId, boolean isReadOnly, Command<T> command)
throws NotBoundException, RemoteException {
AtomicReference<T> result = null;
manager.transactPersistentEntityStore(xodusRoot, appId, isReadOnly, txn -> {
result.set(command.execute(txn));
});
return Try.of(() -> result.get()).getOrNull();
}
Is there a way to use transactional objects over RMI?

2 datasource connection using properties file

My application.yml file looks something like:
spring:
profiles: environment
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
hibernate:
ddl-auto: none
datasource:
url: jdbc:mysql://myUrl
username: master
driver-class-name: "com.mysql.cj.jdbc.Driver"
My DatabaseConnection class looks something like:
#Component
public class DatabaseManager {
public static final String CONTEXT_KEY = "context";
public static final String CONTEXT_VALUE = "myContext";
public static final String TABLE_NAME = "my-credential-store";
public static final String CREDENTIAL = "mydb.password";
public static final String WRITE_ENDPOINT_OUTPUT = "mydbwriteendpoint";
public static final String DATASOURCE_URL = "spring.datasource.url";
public static final String DATASOURCE_PASSWORD = "spring.datasource.password";
public static void createConnection() throws Exception {
JCredStash jCredStash = null;
try {
Map<String, String> context = new HashMap<>();
context.put(CONTEXT_KEY, CONTEXT_VALUE);
jCredStash = new JCredStash(TABLE_NAME);
String secret = jCredStash.getSecret(CREDENTIAL, context);
String writeEndpoint = jCredStash.getSecret(WRITE_ENDPOINT_OUTPUT, context);
System.setProperty(DATASOURCE_URL,
"jdbc:mysql://" + writeEndpoint + ":port/mydb");
System.setProperty(DATASOURCE_PASSWORD, secret);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (jCredStash != null)
jCredStash.close();
}
}
}
Here, I am getting the DB password from AWS Cred Stash. Everything is working fine for "mydb" database. Now I have created another database named "mydb1" inside the same URL instance with the same username and password. I have tried a couple of options like creating another data source, but nope of them worked for me. Can anyone guide me how can I create the connection with "mydb1" along with "mydb"? Thanks

How to make SlingHttpServletRequest.getParts() return the proper value in JUnit Test?

I am facing some difficulties in writing junit test to pass the for loop condition to getParts() method from SlingHttpServletRequest.getParts(). There is no problem with the implementation, I am able to process the file attachment properly. However, I am unable to do so in the junit test.
The following is my implementation:
#Model(adaptables = SlingHttpServletRequest.class)
public class Comment {
//Variables declaration
#Inject
private CommentService service;
#PostConstruct
public void setup() {
requestData = new JSONObject();
for (String item : request.getRequestParameterMap().keySet()) {
try {
requestData.put(item, request.getParameter(item));
}
} catch (Exception e) {
Throw error message
}
}
//Upload attachment to server
try {
for (Part part : request.getParts()) { <= The JUnit test stopped at this line and throw the error below
} catch (Exception e) {
Throw error message
}
I have tried using a SlingHttpServletRequestWrapper class to override the getParts method but to no avail.
The following is my junit test:
public class CommentTest {
public final AemContext context = new AemContext();
private CommentService commentService = mock(CommentService.class);
#InjectMocks
private Comment comment;
private static String PATH = "/content/testproject/en/page/sub-page";
#Before
public void setUp() throws Exception {
context.addModelsForPackage("de.com.adsl.sightly.model");
context.load().json("/components/textrte.json", PATH);
context.currentPage(PATH);
}
#Test
public void testSetup() throws IOException, ServletException {
//before
context.request().setParameterMap(getRequestCat1());
context.registerService(CommentService.class, commentService);
Resource resource = context.resourceResolver().getResource(PATH + "/jcr:content/root/responsivegrid/textrte");
assertNotNull(resource);
//when
comment = new CustomRequest(context.request()).adaptTo(Comment.class);
//then
comment.setup();
}
private class CustomRequest extends SlingHttpServletRequestWrapper {
public CustomRequest(SlingHttpServletRequest request) {
super(request);
}
#Override
public Collection<Part> getParts() {
final String mockContent =
"------WebKitFormBoundarycTqA2AimXQHBAJbZ\n" +
"Content-Disposition: form-data; name=\"key\"\n" +
"\n" +
"myvalue1\n" +
"------WebKitFormBoundarycTqA2AimXQHBAJbZ";
final List<Part> parts = MockPart.parseAll(mockContent);
assertNotNull(parts);
return parts;
}
};
}
The following is the error message that I encountered:
14:53:04.918 [main] ERROR de.com.adsl.sightly.model.Comment - Error Message: null
java.lang.UnsupportedOperationException: null
at org.apache.sling.servlethelpers.MockSlingHttpServletRequest.getParts(MockSlingHttpServletRequest.java:882) ~[org.apache.sling.servlet-helpers-1.1.10.jar:?]
at de.com.adsl.sightly.model.Comment.uploadFile(Feedback.java:137) ~[classes/:?]
at de.com.adsl.sightly.model.Comment.setup(Feedback.java:82) [classes/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
at org.apache.sling.models.impl.ModelAdapterFactory.invokePostConstruct(ModelAdapterFactory.java:792) [org.apache.sling.models.impl-1.3.8.jar:?]
at org.apache.sling.models.impl.ModelAdapterFactory.createObject(ModelAdapterFactory.java:607) [org.apache.sling.models.impl-1.3.8.jar:?]
at org.apache.sling.models.impl.ModelAdapterFactory.internalCreateModel(ModelAdapterFactory.java:335) [org.apache.sling.models.impl-1.3.8.jar:?]
at org.apache.sling.models.impl.ModelAdapterFactory.getAdapter(ModelAdapterFactory.java:211) [org.apache.sling.models.impl-1.3.8.jar:?]
...
I have looked up various solutions online such as writing two mockito when statements but has not been successful. I would greatly appreciate any form of help or sharing of knowledge if you have encountered the following issue previously. Thank you!
From the source code of MockSlingServletResquest it always throws that exception as it's not supported yet by the mocked class.
https://github.com/apache/sling-org-apache-sling-servlet-helpers/blob/71ef769e5564cf78e49d6679a3270ba8706ae406/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java#L953
Maybe you should consider writing a servlet, or another approach.

Can someone help in writing Java program to download Sharepoint Lists?

I wrote below program to download SharePoint lists. But I am getting errors while using sharepointclient and listsoapstub. Does they have any dependency on other API's or jar files ? If so, what will be those ?
import java.net.Authenticator;
import java.net.PasswordAuthentication;
public class SimpleAuthenticator extends Authenticator
{
private final String username;
private final char[] password;
public SimpleAuthenticator(final String username, final String password)
{
super();
this.username = new String(username);
this.password = password.toCharArray();
}
#Override
public PasswordAuthentication getPasswordAuthentication()
{
return (new PasswordAuthentication (username, password));
}
}
SimpleAuthenticator authenticator = new SimpleAuthenticator(username,
password);
Authenticator.setDefault(authenticator);
public class SPClient
{
private static String username = "your sharepoint username";
private static String password = "your sharepoinnt password";
private static String BasesharepointUrl = "https://mysharepoint.com/Book Names";
private static ListsSoap listsoapstub;
private static VersionsSoap versionssoapstub;
private static CopySoap copysoapstub;
private static SharePointClient getInstance()
{
return(new SharePointClient());
}
public static void main(String[] args)
{
try
{
NtlmAuthenticator authenticator = new NtlmAuthenticator(username, password);
Authenticator.setDefault(authenticator);
//Authenticating and Opening the SOAP port of the Copy Web Service
listsoapstub = SharePointClient.getSPListSoapStub(username, password, BasesharepointUrl);
// Displays the lists items in the console
SharePointClient.displaySharePointList();
}
catch (Exception ex)
{
ex.printStackTrace();
System.err.println(ex);
}
}
}
I'm guessing that you got the code that you "wrote" from here:
http://blog.ashwani.co.in/blog/2013-07-28/connect-and-access-sharepoint-webservice-from-java/
(Your code looks strikingly similar to that code!)
I think the answer to your question is covered in these described in that blog posting:
Step 1. Download the wsdl files from the sharepoint.
Step 2. Generate Java Stubs for these wsdls
Step 3. Place the WSDLs in your resources
Once you have done that, you should be able to add imports for the relevant classes to the classes that you wrote.

Pegdown Custom ParserPlugin binding failed

I'm stuck facing problems with pegdown v1.4.2 while trying to implement custom ParserPlugin to a library I'm writing (Maven project, JDK 8):
CustomPlugin:
public class CustomHeadersParserPlugin extends Parser implements BlockPluginParser {
public CustomHeadersParserPlugin() {super(HtmlMdProc.MDP_SETTINGS, HtmlMdProc.PROCESSING_TIME_LIMIT, DefaultParseRunnerProvider);
}
public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis) {
super(options, maxParsingTimeInMillis, DefaultParseRunnerProvider);
}
public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis, ParseRunnerProvider parseRunnerProvider) {
super(options, maxParsingTimeInMillis, parseRunnerProvider);
}
public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis, ParseRunnerProvider parseRunnerProvider, PegDownPlugins plugins) {
super(options, maxParsingTimeInMillis, parseRunnerProvider, plugins);
}
//************* CUSTOM RULES ***************
...
Pegdown Usage:
public class HtmlMdProc {
public static final int MDP_SETTINGS = Extensions.HARDWRAPS | Extensions.AUTOLINKS | Extensions.TABLES | Extensions.FENCED_CODE_BLOCKS;
public static final long PROCESSING_TIME_LIMIT = 5000l;
...
public HtmlMdProc markdown() {
PegDownPlugins pdp = PegDownPlugins.builder().withPlugin(CustomHeadersParserPlugin.class).build();
PegDownProcessor mdp = new PegDownProcessor(MDP_SETTINGS, PROCESSING_TIME_LIMIT, pdp);
RootNode rn = mdp.parseMarkdown(text.toCharArray());
String result = new CustomMarkdownToHtmlSerializer().toHtml(rn);
if (result != null)
this.text = result;
else
logger.debug("Could not process markdown in {} seconds", PROCESSING_TIME_LIMIT / 1000);
return this;
}
Test:
#Test
public void testmarkdownWithoutCode() {
String before = "Simple new line\nTest\n\nTest\nVot";
String expected = "<p>Simple new line<br />Test</p><p>Test<br />Vot</p>".replaceAll("\r", "");
HtmlMdProc textProc = new HtmlMdProc(before);
String result = textProc.markdown().text();
assertEquals(expected, result);
}
Testing Exeption:
java.lang.RuntimeException: Error creating extended parser class: null
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.parboiled.transform.AsmUtils.createClassReader(AsmUtils.java:56)
at org.parboiled.transform.ClassNodeInitializer.process(ClassNodeInitializer.java:62)
at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:44)
at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:38)
at org.parboiled.Parboiled.createParser(Parboiled.java:54)
at org.pegdown.plugins.PegDownPlugins$Builder.withPlugin(PegDownPlugins.java:113)
at com.myorg.html.services.HtmlMdProc.markdown(HtmlMdProc.java:317)
at com.myorg.html.services.HtmlMdProcTest.testmarkdownWithoutCode(HtmlMdProcTest.java:262)
Can I somehow bind my CustomHeadersParserPlugin avoiding spooky Reflections?
If not, tell me how to setup maven-bundle-plugin in pom.xml to make it work with pegdown v 1.4.2.
I found Issue with discussion Here, but I'm too novice to deal alone with Maven plugins and Reflections.
The only solution is to wait for This Issue to be closed, until I thing there is no luck with Pegdown and Java 8.

Categories

Resources