Found the error. It turned out I had to return a non-null String from
getProviderInfo() and non-null Collection from getAllPages().
Usage of the class is:
String wikiMarkup = "my __wiki-markup__";
String html = SimpleWikiRenderer.render(wikiMarkup);
The class I use is this:
import com.ecyrd.jspwiki.WikiContext;
import com.ecyrd.jspwiki.WikiEngine;
import com.ecyrd.jspwiki.WikiPage;
import com.ecyrd.jspwiki.WikiException;
import com.ecyrd.jspwiki.PageManager;
import com.ecyrd.jspwiki.WikiSession;
import com.ecyrd.jspwiki.QueryItem;
import com.ecyrd.jspwiki.NoRequiredPropertyException;
import com.ecyrd.jspwiki.diff.DifferenceManager;
import com.ecyrd.jspwiki.diff.TraditionalDiffProvider;
import com.ecyrd.jspwiki.diff.DiffProvider;
import com.ecyrd.jspwiki.providers.WikiPageProvider;
import com.ecyrd.jspwiki.providers.ProviderException;
import com.ecyrd.jspwiki.parser.MarkupParser;
import com.ecyrd.jspwiki.parser.JSPWikiMarkupParser;
import com.ecyrd.jspwiki.parser.WikiDocument;
import com.ecyrd.jspwiki.render.WikiRenderer;
import com.ecyrd.jspwiki.render.XHTMLRenderer;
import com.ecyrd.jspwiki.auth.AuthenticationManager;
import com.ecyrd.jspwiki.auth.AuthorizationManager;
import com.ecyrd.jspwiki.auth.Authorizer;
import com.ecyrd.jspwiki.auth.WikiSecurityException;
import java.util.Properties;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Collections;
import java.io.StringReader;
import java.io.IOException;
import java.security.Principal;
public class SimpleWikiRenderer {
protected static WikiEngine sEngine;
protected static WikiContext sContext;
static {
Properties props = new Properties();
props.setProperty(PageManager.PROP_PAGEPROVIDER,
DummyPageProvider.class.getName());
props.setProperty(AuthenticationManager.PROP_SECURITY, "off");
try {
sEngine = new WikiEngine(props);
sContext = new WikiContext(sEngine, new WikiPage(sEngine,
"dummy"));
}
catch (WikiException e) {
e.printStackTrace();
}
}
public static String render(String wikiMarkup) throws IOException {
// Create new parser and parse the content into a WikiDocument
MarkupParser parser = new JSPWikiMarkupParser(sContext, new
StringReader(wikiMarkup));
WikiDocument doc = parser.parse();
// We now create a new WikiRenderer
WikiRenderer rend = new XHTMLRenderer(sContext, doc);
// Now, do the rendering.
return rend.getString();
}
public static class DummyPageProvider implements WikiPageProvider {
public void putPageText(WikiPage wikiPage, String s) throws
ProviderException {
}
public boolean pageExists(String s) {
return false; //To change body of implemented methods
use File |
Settings | File Templates.
}
public Collection findPages(QueryItem[] queryItems) {
return null; //To change body of implemented methods use File |
Settings
| File Templates.
}
public WikiPage getPageInfo(String s, int i) throws
ProviderException {
return null; //To change body of implemented methods use File |
Settings
| File Templates.
}
public Collection getAllPages() throws ProviderException {
return Collections.EMPTY_LIST;
}
public Collection getAllChangedSince(Date date) {
return null; //To change body of implemented methods use File |
Settings
| File Templates.
}
public int getPageCount() throws ProviderException {
return 0; //To change body of implemented methods use File |
Settings |
File Templates.
}
public List getVersionHistory(String s) throws
ProviderException {
return null; //To change body of implemented methods use File |
Settings
| File Templates.
}
public String getPageText(String s, int i) throws
ProviderException {
return null; //To change body of implemented methods use File |
Settings
| File Templates.
}
public void deleteVersion(String s, int i) throws
ProviderException {
}
public void deletePage(String s) throws ProviderException {
}
public void movePage(String s, String s1) throws
ProviderException {
}
public void initialize(WikiEngine wikiEngine, Properties
properties)
throws NoRequiredPropertyException, IOException {
}
public String getProviderInfo() {
return DummyPageProvider.class.getName();
}
}
}
andreak wrote:
I'm not having any luck with embedding JSPWiki. I've created a
class like
Ethan suggests, with dummy (empty stubs) of DummyAuthorizer
(implements
com.ecyrd.jspwiki.auth.Authorizer) and DummyPageProvider (implements
WikiPageProvider). After running a test I'm getting:
- *******************************************
- JSPWiki 2.6.1 starting. Whee!
- JSPWiki working directory is '/tmp/JSPWiki-'
- Registering plugins
- Using difference provider: TraditionalDiffProvider
- No attachment provider defined - disabling attachment support.
- Lucene enabled, cache will be in: /tmp/JSPWiki-/lucene
Starting up background thread: JSPWiki Lucene Indexer.
Starting up background thread: WatchDog for 'JSPWiki'.
- Files found in Lucene directory, not reindexing.
- Registering editor modules
- Attempting to load group database class
com.ecyrd.jspwiki.auth.authorize.XMLGroupDatabase
- XML group database property jspwiki.xmlGroupDatabaseFile not found;
trying /home/andreak/dev/uno/trunk/IDEAProject/WEB-INF/
groupdatabase.xml
- XML group database at
/home/andreak/dev/uno/trunk/IDEAProject/WEB-INF/groupdatabase.xml
- Group database not found; creating from scratch...
- Group database initialized.
- Group database not found; creating from scratch...
- Authorizer GroupManager initialized successfully; loaded 0 group
(s).
- Using JDK 1.5 Platform MBeanServer
- com.sun.jmx.mbeanserver.JmxMBeanServer
- DefaultDomain
- Registered new admin bean Core bean
- Registered new admin bean User administration
- Registered new admin bean Search manager
- Registered new admin bean Plugins
- Registered new admin bean WikiWizard
- Registered new admin bean Plain editor
- Registering filters
- Cannot find property file for filters (this is okay, expected to
find it
as: '/WEB-INF/filters.xml')
- Rendering content with com.ecyrd.jspwiki.render.XHTMLRenderer.
- Failed to start managers.
java.lang.NullPointerException
at java.util.ArrayList.addAll(ArrayList.java:472)
at com.ecyrd.jspwiki.WikiEngine.initReferenceManager
(WikiEngine.java:659)
at com.ecyrd.jspwiki.WikiEngine.initialize(WikiEngine.java:569)
at com.ecyrd.jspwiki.WikiEngine.<init>(WikiEngine.java:359)
at
no.officenet.uno.util.SimpleWikiRenderer.<clinit>
(SimpleWikiRenderer.java:48)
at
no.officenet.uno.util.SimpleWikiRendererTest.testWiki
(SimpleWikiRendererTest.java:8)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.textui.TestRunner.doRun(TestRunner.java:116)
at
com.intellij.rt.execution.junit.IdeaTestRunner.doRun
(IdeaTestRunner.java:65)
at junit.textui.TestRunner.doRun(TestRunner.java:109)
at
com.intellij.rt.execution.junit.IdeaTestRunner.startRunnerWithArgs
(IdeaTestRunner.java:24)
com.ecyrd.jspwiki.WikiException: Failed to start managers: null
at com.ecyrd.jspwiki.WikiEngine.initialize(WikiEngine.java:582)
at com.ecyrd.jspwiki.WikiEngine.<init>(WikiEngine.java:359)
at
no.officenet.uno.util.SimpleWikiRenderer.<clinit>
(SimpleWikiRenderer.java:48)
at
no.officenet.uno.util.SimpleWikiRendererTest.testWiki
(SimpleWikiRendererTest.java:8)
Janne Jalkanen wrote:
Aside from the fact that the PageFilter interface has changed (minor
modifications necessary, you will see when you compile it), you
should be fine. If you are not, please let us know so those can be
documented.
/Janne
On 5 Jan 2008, at 22:41, Ethan Larson wrote:
Thanks again - that worked. Just one other question: will there be
anything different about my filter/plugin setup, or can I follow
the same setup outlined in the documentation?
Cheers,
Ethan
P.S. - Here's my code in case anyone else wants to get this
working. If anyone sees something wrong or a way to optimize it,
please let me know:
public class SimpleJSPWikiRenderer {
protected static WikiEngine sEngine;
protected static WikiContext sContext;
static {
Properties props = new Properties();
props.setProperty(PageManager.PROP_PAGEPROVIDER,
DummyPageProvider.class.getName());
props.setProperty(AuthorizationManager.PROP_AUTHORIZER,
DummyAuthorizer.class.getName());
props.setProperty(AuthenticationManager.PROP_SECURITY,
"off");
try {
sEngine = new WikiEngine(props);
sContext = new WikiContext(sEngine, new WikiPage
(sEngine, "dummy"));
}
catch (WikiException e) {
e.printStackTrace();
}
}
public static String render(String wikiMarkup) throws
IOException {
// Create new parser and parse the content into a
WikiDocument
MarkupParser parser = new JSPWikiMarkupParser(sContext, new
StringReader(wikiMarkup));
WikiDocument doc = parser.parse();
// We now create a new WikiRenderer
WikiRenderer rend = new XHTMLRenderer(sContext, doc);
// Now, do the rendering.
return rend.getString();
}
}
Janne Jalkanen wrote:
Oh, and by the way, it's cleaner to directly hit the
RenderingManager. See the following article for details:
http://www.jspwiki.org/wiki/MarkupParser
/Janne
On Jan 4, 2008, at 08:21 , Ethan Larson wrote:
Ok, I created a dummy page provider and a dummy authorizer and I
got a lot farther. I don't even need a MemoryPageProvider since I
all I need is the output (thanks just the same Florian - it was
instructive). I actually got translated output. The problem is
that I had to modify the source code to do it. I had to comment
out line 532 of WikiEngine:
//m_authorizationManager.initialize( this, props );
As near as I can tell, there's no way to create an authorization
manager that doesn't involve a jspwiki.policy under WEB-INF.
However, since I'm running it as a standalone app, I don't have a
web container and therefore no WEB-INF. I could create this
under the working directory, but I really don't want to put
blank, unused metadata in my app. Is there any way to configure
this such that I can start the authorization manager without a
jspwiki.policy?
On a broader note, I'd be over the moon if this were an easier
process. JSPWiki seems to be the most actively developed and
feature-rich Java wiki there is, and has support for plugins and
filters which I will eventually need. If there were an easy way
to run the wiki translation, complete with plugins and filters,
that didn't involve a web container and any extra memory/disk
usage, it could broaden the usage quite a bit. I've looked at
other java wiki translators out there, and none of them are doing
a good job of the features/active development/ease of standalone
combo (Radeox, Bliki, VQWiki to name a few). Other forum/mailing
list posts confirm there is a demand.
Thanks for all your help,
Ethan
P.S. -- Here's my current code for anyone reading this in the
future:
Properties props = new Properties();
props.setProperty(PageManager.PROP_PAGEPROVIDER,
MyPageProvider.class.getName());
props.setProperty(AuthorizationManager.PROP_AUTHORIZER,
MyAuthorizer.class.getName());
WikiEngine engine = new WikiEngine(props);
WikiContext context = new WikiContext(engine, new WikiPage
(engine, "test"));
System.out.println("output: \n" + engine.textToHTML(context,
"this is a test\n\n* more stuff"));
MyPageProvider and MyAuthorizer are both empty implentations of
the interfaces. Just return an empty List for
MyPageProvider.getAllPages.
Janne Jalkanen wrote:
Yup, the problem is that there needs to be *some* kind of a page
provider, because the system needs to check if e.g. a page
exists or not when it encounters a link. The generated HTML
differs in each case.
A dummy provider will do just fine, e.g. the MemoryPageProvider.
/Janne
On Jan 2, 2008, at 00:23 , Florian Holeczek wrote:
Hi Ethan,
maybe this can help you:
http://www.jspwiki.org/wiki/MemoryPageProvider
Regards,
Florian
The problem with the page directory is that I don't want one.
I will
be managing the input/output of the text myself. I really just
want
to give some wiki markup to the parser and get back html. Is
there
currently a way to do this?
--
View this message in context: http://www.nabble.com/Embedding-
JSPWiki-2.6-tp14553249p18840560.html
Sent from the JspWiki - User mailing list archive at Nabble.com.