This page is an archive of Bug Reports resolved during the JAMWiki 0.7.x release cycle. See Bug Reports/Resolved for an index of all resolved bug reports.
JAMWiki 0.6.7
text(return) (return) text(return)
Correctly displays as
text text
But if the whitespace is added.
text(return) (whitespace)(return) text(return)
It displays as
text text
In the first case there are three paragraph tags, in the second case only one. It should render with two tags in both cases to mimic MediaWiki. j_teer 06-Jan-2009 12:24 PST
2008-09-06 22:29:32,154 SEVERE: org.jamwiki.taglib.WatchlistTag - Failure processing watchlist item Sandbox java.lang.IllegalStateException: Cannot create a session after the response has been committed at org.apache.catalina.connector.Request.doGetSession(Request.java:2214) at org.apache.catalina.connector.Request.getSession(Request.java:2024) at org.apache.catalina.connector.RequestFacade$GetSessionPrivilegedAction.run(RequestFacade.java:195) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:829) at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:215) at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:544) at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:215) at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:544) at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:493) at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:223) at org.jamwiki.servlets.ServletUtil.currentWatchlist(ServletUtil.java:346) at org.jamwiki.taglib.WatchlistTag.doStartTag(WatchlistTag.java:45) at org.apache.jsp.WEB_002dINF.jsp.recent_002dchanges_jsp._jspx_meth_jamwiki_watchlist_0(recent_002dchanges_jsp.java:1137)
Seen occasionally on Special:RecentChanges after pushing the latest 0.7.0 code to jamwiki.org. -- Ryan 06-Sep-2008 22:46 PDT
Moved from the Feedback page:
In the web.xml file there is a servlet mapping for a test wiki. It doesn't show up in the virtual wiki list. The entry should probably be removed.
JAMWiki 0.6.7
On application startup there is a warning from log4j in stdout that says it could not find an appender. This may be because there is not a log4j.properties file and commons logging is configuring after the fact. j_teer 06-Jan-2009 17:55 PST
The radio buttons seem to be not properly aligned in the History page. Two columns of radio buttons are appearing in the History page.
--yesesnono 02-Dec-2008 04:29 PST
JAMWiki 0.6.7
The line 'The default level for the Handler. See the Javadoc for the java.util.Level class for valid values.' It should read java.util.logging.Level instead of java.util.Level.
j_teer 06-Jan-2009 14:34 PST
JAMWiki 0.6.7
By default the log level set by logging.properties is CONFIG which includes INFO. Each time a page is loaded the page parse time is logged to the application server's stdout. This is by default not needed. The level should be set to WARN.
j_teer 06-Jan-2009 14:34 PST
Not sure is this a bug or a feature request, so I list here anyway.
I can use file://\\shared\docs, but it only seems to work on IE.
file://///shared/docs/
Jamwiki-0.6.6: The entire documentation still refers to the org.jamwiki.ldap.LdapUserHandler approach. This is also the case for the Jamwiki properties file and the Admin pages. However this approach does not seem to work (at all?) anymore in Jamwiki-0.6.6 since you moved to the acegi solution. Please highlight this fact more prominently so that people know directly that they must hack spring XML config files for the time being... Thanx!
I changed the configuration in jamwiki.properties so that the system would use the LdapUserHandler. However, the LdapUserHandler code never got called (checked via debugger). Essentially logging in was turned off then. After some fiddeling around, I noticed that authorization is handled entirely via spring beans configured in applicationContext-agegi-security.xml. The hook in that file is here:
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <property name="providers"> <list> <ref local="daoAuthenticationProvider" /> <ref local="ldapAuthenticationProvider" /> <!-- <<<--- got to start with config here.. --> <ref local="anonymousAuthenticationProvider" /> <ref local="rememberMeAuthenticationProvider" /> </list> </property> </bean>
After some configuration and downloading the acegi sources, I got it to work.
Note that I am new to Jamwiki - so it could well be that I have overlooked something. Anyway, I like the project so far - it is well engineered. It is still small and clean enough so that I can work my way through (as it seems). It is also pretty fast compared to other Wiki's. Daniel
Magic words in template reference are not resolved to the corresponding value. When using a template reference like Template:Yearoverview2010 the resulting template name should be Template:yearoverview2007.
{{fullurl:Bug Reports|nowiki}} are not yet supported, but I'll get to that soon. Supported functions are {{anchorencode:}}, {{filepath:}}, {{fullurl:}}, {{localurl:}} and {{urlencode:}}.Greetings, I have a local installation, the title for each page is: <topic name> - JAMWIKI. Would it be possible to rename that to: <Title page> - Company Knowledge Base ? 167.193.84.7 31-Jan-2008 08:39 PST
After some time I finally got Authentication via Active Directory and acegi-security working. With org.acegisecurity.providers.ldap.populator.DefaultLdapAuthoritiesPopulator I can set the defaultRole to ROLE_USER, so TabMenu and UserMenu are displayed. But after logon, there are several Problems with that Authentication:
Are there any hints or work-arounds for these issues? I think it would be possible (not really beautiful) to insert a wiki_user_id for each LDAP-uid. Is there another possibility?
-- hp 11-Mar-2008 10:38
Moved from the Feedback page:
I'd like to redirect one of my pages to another one using the following code
#REDIRECT [[MyOtherPage]] [[Category:Glossary]]
This results in
1. REDIRECT MyOtherPage +----------------------+ | Categories: Glossary | +----------------------+
--Sil68 02-Apr-2008 23:59 PDT
From james_battersby@hotmail.com 05-Dec-2008 16:37 GMT
In MediaWiki apparently it is possible to have redirects belonging to a category. The idea is that although a page will immediately redirect to another, the redirect page will appear in Category listings so long as you place the REDIRECT and [[Category:x]] on the same line. Have a look at http://www.scottdstrader.com/blog/ether_archives/000329.html for a better explanation (look for How to add categories to redirects).
Hi, I hope you are enjoying your holiday! I have been looking into ImageUtil in a lot more detail as someone on my wiki created a page with 50 3MB images that are all resized, and it made my JVM memory usage shoot up, my CPU usage spike every time the page was requested, and I was seeing a 45 second parser time which was insane!
After looking into it in detail, I noticed that to get the image resolution information, the entire image is read into memory. When a resized image is requested, this operation is performed two or even three times, which is a massive waste of resources so I did the following to fix this...
http://schmidt.devlib.org/image-info/index.html contains a very clever public domain class that will only read in the bit of an image it needs to learn the resolution. I converted almost all reads of image information from BufferedImage to this ImageInfo class and saw a massive speed boost. In LinkUtil, I made sure that any WikiImage handling did not assume that there was a value for height and width (so height and width are no longer used for many images), as this meant I could use resized images based on the filename and if the file exists, rather than having to read in and analyse one every time it was loaded. I also made sure that no images were being read if the only reason to read them was to return a height and width to the img tag as this is a waste of server resources and the client can handle it instead (though the code is there but commented if you feel the small increase in page rendering time is worth it - I have third party adverts on my wiki so it makes no difference to render time for me).
Making these changes allowed me to go from a 45 second render time to a 0.2 second render time on the image heavy page, and there has been a massive improvement on every page that has an image. I highly recommend you test this a bit and then implement the changes!
My ImageUtil class now looks like this (based on my local fork of 0.6.2):
public class ImageUtil {
private static final WikiLogger logger = WikiLogger.getLogger(ImageUtil.class.getName());
private static final String CACHE_IMAGES = "org.jamwiki.utils.ImageUtils.CACHE_IMAGES";
/**
*
*/
private ImageUtil() {
}
/**
*
*/
private static int calculateImageIncrement(int maxDimension) {
int increment = Environment.getIntValue(Environment.PROP_IMAGE_RESIZE_INCREMENT);
double result = Math.ceil((double)maxDimension / (double)increment) * increment;
return (int)result;
}
/**
* Convert a Java Image object to a Java BufferedImage object.
*/
private static BufferedImage imageToBufferedImage(Image image) throws Exception {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB );
Graphics2D graphics = bufferedImage.createGraphics();
graphics.drawImage(image, 0, 0, null);
graphics.dispose();
return bufferedImage;
}
/**
* Given a virtualWiki and WikiFIle that correspond to an existing image,
* return the WikiImage object. In addition, an optional maxDimension
* parameter may be specified, in which case a resized version of the image
* may be created.
*
* @param wikiFile Given a WikiFile object, use it to initialize a
* WikiImage object.
* @param maxDimension The maximum width or height for the initialized
* WikiImage object. Setting this value to 0 or less will cause the
* value to be ignored.
* @return An initialized WikiImage object.
* @throws Exception Thrown if an error occurs while initializing the
* WikiImage object.
*/
public static WikiImage initializeImage(WikiFile wikiFile, int maxDimension) throws Exception {
if (wikiFile == null) {
logger.warning("No image found for " + wikiFile.getVirtualWiki() + " / " + wikiFile.getFileName());
return null;
}
WikiImage wikiImage = new WikiImage(wikiFile);
ImageInfo originalInfo = null;
// do some processing if a resized image is requested, otherwise just return the base image converted to a WikiImage...
if (maxDimension > 0) {
originalInfo = ImageUtil.resizeImage(wikiImage, maxDimension);
if (originalInfo!=null) setScaledDimensions(originalInfo, wikiImage, maxDimension);
}
return wikiImage;
}
/**
* Given a File object, determine if the file is an image or if it is some
* other type of file. Note that this method will read in the entire file,
* so there are performance implications for large files.
*
* @param file The File object for the file that is being examined.
* @return Returns <code>true</code> if the file is an image object.
* @throws Exception Thrown if any error occurs while reading the file.
*/
public static boolean isImage(File file) throws Exception {
return (ImageUtil.loadImage(file) != null);
}
/**
* Get an image info object so we can get the resolution of an image efficiently.
*/
private static ImageInfo getImageInfo(File imageFile) throws Exception {
java.io.FileInputStream fis = new java.io.FileInputStream(imageFile);
ImageInfo originalInfo = null;
originalInfo.setInput(fis);
if (!originalInfo.check()) throw new Exception("File not found or error reading file."); // image reading error
return originalInfo;
}
/**
* Given a file that corresponds to an existing image, return a
* BufferedImage object.
*/
private static BufferedImage loadImage(File file) throws Exception {
return ImageIO.read(file);
}
/**
* Resize an image, using a maximum dimension value. Image dimensions will
* be constrained so that the proportions are the same, but neither the width
* or height exceeds the value specified.
*/
private static ImageInfo resizeImage(WikiImage wikiImage, int maxDimension) throws Exception {
// first test to see if an image with maxDimension has already been created, if so just return it to save time and effort...
ImageInfo originalInfo = null;
String newUrl = wikiImage.getUrl();
int pos = newUrl.lastIndexOf('.');
if (pos > -1) {
newUrl = newUrl.substring(0, pos) + "-" + maxDimension + "px" + newUrl.substring(pos);
} else {
newUrl += "-" + maxDimension + "px";
}
File newImageFile = new File(Environment.getValue(Environment.PROP_FILE_DIR_FULL_PATH), newUrl);
if (newImageFile.exists()) {
// if we want to send back height and width for the img tag to be drawn faster, we would uncomment this at a cost of higher memory, disk and CPU usage.
//originalInfo.setInput(new java.io.FileInputStream(newImageFile));
//if (!originalInfo.check()) throw new Exception("File not found or error reading file."); // image reading error
wikiImage.setUrl(newUrl);
return originalInfo;
}
// if we dont have the above, matching image, then create a new one if applicable...
File imageFile = new File(Environment.getValue(Environment.PROP_FILE_DIR_FULL_PATH), wikiImage.getUrl());
java.io.FileInputStream fis = new java.io.FileInputStream(imageFile);
originalInfo = new ImageInfo();
originalInfo.setInput(fis);
maxDimension = calculateImageIncrement(maxDimension);
int increment = Environment.getIntValue(Environment.PROP_IMAGE_RESIZE_INCREMENT);
if (!originalInfo.check()) throw new Exception("File not found or error reading file."); // image reading error
if (increment <= 0 || (maxDimension > originalInfo.getWidth() && maxDimension > originalInfo.getHeight())) {
// let the browser scale the image
return originalInfo;
}
int width = -1;
int height = -1;
if (originalInfo.getWidth() >= originalInfo.getHeight()) {
width = maxDimension;
} else {
height = maxDimension;
}
Image resized = null;
BufferedImage original = ImageUtil.loadImage(imageFile);
try {
resized = original.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING);
} catch (Throwable t) {
logger.severe("Unable to resize image. This problem sometimes occurs due to dependencies between Java and X on UNIX systems. Consider enabling an X server or setting the java.awt.headless parameter to true for your JVM.", t);
resized = original;
}
BufferedImage bufferedImage = null;
if (resized instanceof BufferedImage) {
bufferedImage = (BufferedImage)resized;
} else {
bufferedImage = ImageUtil.imageToBufferedImage(resized);
}
ImageUtil.saveImage(bufferedImage, newImageFile);
originalInfo.setInput(new java.io.FileInputStream(newImageFile));
if (!originalInfo.check()) throw new Exception("File not found or error reading file."); // image reading error
return originalInfo;
}
/**
* Save an image to a specified file.
*/
private static void saveImage(BufferedImage image, File file) throws Exception {
String filename = file.getName();
int pos = filename.lastIndexOf('.');
if (pos == -1 || (pos + 1) >= filename.length()) {
throw new Exception("Unknown image type " + filename);
}
String imageType = filename.substring(pos + 1);
File imageFile = new File(file.getParent(), filename);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imageFile);
ImageIO.write(image, imageType, fos);
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {}
}
}
}
/**
*
*/
private static void setScaledDimensions(ImageInfo imageInfo, WikiImage wikiImage, int maxDimension) {
int width = imageInfo.getWidth();
int height = imageInfo.getHeight();
if (width >= height) {
height = (int)Math.floor(((double)maxDimension / (double)width) * (double)height);
width = maxDimension;
} else {
width = (int)Math.floor(((double)maxDimension / (double)height) * (double)width);
height = maxDimension;
}
wikiImage.setWidth(width);
wikiImage.setHeight(height);
}
}
I'm using the Virtual Wiki feature and I wanted to add a REDIRECT to my user page on the virtual wiki to point back to my main wiki. When I add the redirect
#REDIRECT [[:en:User:tfschueller]]
The link shows up to a new page on the virtual wiki. I did some testing and I can not get a redirect to work to any page using the Virtual Wiki syntax. --Tom 21-Aug-2008 17:05 PDT
After pushing the latest 0.7.0 development code to jamwiki.org I get "Invalid old password" whenever I try to change my old password. Changing passwords on my local instance works fine. -- Ryan 06-Sep-2008 12:07 PDT
If I create a new account on jamwiki.org then I'm able to change the password for that account, so this problem appears to be something specific to my account. -- Ryan 06-Sep-2008 12:13 PDT
If you deploy a new build war an exception occurs:
java.lang.IllegalArgumentException: Cannot pass null or empty values to constructor org.springframework.security.providers.anonymous.AnonymousAuthenticationToken.<init>(AnonymousAuthenticationToken.java:54) org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:68) org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
If you comment out the Spring Security Filter in the web.xml, everything works fine. You can set up the system.
<filter> <filter-name>Spring Security Filter Chain Proxy</filter-name> <filter-class>org.springframework.security.util.FilterToBeanProxy</filter-class> <init-param> <param-name>targetClass</param-name> <param-value>org.springframework.security.util.FilterChainProxy</param-value> </init-param> </filter> <filter-mapping> <filter-name>Spring Security Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>JAMWikiFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
But, if the initialization is done, this filter must comment in otherwise you cannot log in as an administrator. In the log an other exeption is shown:
2008-09-19 16:00:01,421 SEVERE: org.jamwiki.authentication.WikiUserAuth - Unable to retrieve default roles for GROUP_ANONYMOUS java.lang.ClassNotFoundException: org.postgresql.Driver at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at org.jamwiki.utils.Utilities.forName(Utilities.java:221) at org.jamwiki.db.LocalDataSource.<init>(LocalDataSource.java:45) at org.jamwiki.db.DatabaseConnection.configDataSource(DatabaseConnection.java:257)
Strange, isn't it?
Environment: Tomcat 6.0.16
Hi Ryan, I recognized the same Error. Once in a while I do check out the source, build and look for my webtests ;-) Ok. I do have not to much time free ;-/. I did start the clean build with: mvn jetty:run-exploded my test failed. Id did check the jetty container in the browser (http://localhost:8080/jamwiki-war) I get:
HTTP ERROR: 500 Cannot pass null or empty values to constructor RequestURI=/jamwiki-war/en/Special:Setup Caused by: java.lang.IllegalArgumentException: Cannot pass null or empty values to constructor at org.springframework.security.providers.anonymous.AnonymousAuthenticationToken.(AnonymousAuthenticationToken.java:54) at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:68) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371) at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174) at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:416) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:826) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:523) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
Powered by Jetty://SCHWERWIEGEND: Unable to retrieve default roles for GROUP_ANONYMOUS
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:375)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.jamwiki.utils.Utilities.forName(Utilities.java:221)
at org.jamwiki.db.LocalDataSource.<init>(LocalDataSource.java:45)
at org.jamwiki.db.DatabaseConnection.configDataSource(DatabaseConnection.java:257)
at org.jamwiki.db.DatabaseConnection.getConnection(DatabaseConnection.java:240)
at org.jamwiki.db.WikiPreparedStatement.executeQuery(WikiPreparedStatement.java:60)
at org.jamwiki.db.AnsiQueryHandler.getRoleMapGroup(AnsiQueryHandler.java:392)
at org.jamwiki.db.AnsiDataHandler.getRoleMapGroup(AnsiDataHandler.java:395)
at org.jamwiki.authentication.WikiUserAuth.getAnonymousGroupRoles(WikiUserAuth.java:266)
at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:68)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:416)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:826)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:523)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
2008-09-20 21:25:37.079::WARN: /jamwiki-war/en/Special:Setup
java.lang.IllegalArgumentException: Cannot pass null or empty values to constructor
log is:
SCHWERWIEGEND: Unable to retrieve default roles for GROUP_ANONYMOUS
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at org.codehaus.classworlds.RealmClassLoader.loadClassDirect(RealmClassLoader.java:195)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:255)
at org.codehaus.classworlds.DefaultClassRealm.loadClass(DefaultClassRealm.java:274)
at org.codehaus.classworlds.RealmClassLoader.loadClass(RealmClassLoader.java:214)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:375)
at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.jamwiki.utils.Utilities.forName(Utilities.java:221)
at org.jamwiki.db.LocalDataSource.<init>(LocalDataSource.java:45)
at org.jamwiki.db.DatabaseConnection.configDataSource(DatabaseConnection.java:257)
at org.jamwiki.db.DatabaseConnection.getConnection(DatabaseConnection.java:240)
at org.jamwiki.db.WikiPreparedStatement.executeQuery(WikiPreparedStatement.java:60)
at org.jamwiki.db.AnsiQueryHandler.getRoleMapGroup(AnsiQueryHandler.java:392)
at org.jamwiki.db.AnsiDataHandler.getRoleMapGroup(AnsiDataHandler.java:395)
at org.jamwiki.authentication.WikiUserAuth.getAnonymousGroupRoles(WikiUserAuth.java:266)
at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:68)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:109)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:416)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:826)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:523)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
2008-09-20 21:25:37.079::WARN: /jamwiki-war/en/Special:Setup
java.lang.IllegalArgumentException: Cannot pass null or empty values to constructor
mbert 20-Sep-2008 12:43 PDT
Hi Ryan, the webtests succeded, but:
INFO: Loaded page /jamwiki-war/en/Special:Account (0.186 s.)
23.09.2008 09:12:32 org.jamwiki.utils.WikiLogger severe
SCHWERWIEGEND: Servlet error
java.lang.IllegalArgumentException: Cannot encrypt a null or empty string
at org.jamwiki.utils.Encryption.encrypt(Encryption.java:70)
at org.jamwiki.db.DatabaseUserHandler.authenticate(DatabaseUserHandler.java:61)
at org.jamwiki.servlets.RegisterServlet.validate(RegisterServlet.java:207)
at org.jamwiki.servlets.RegisterServlet.register(RegisterServlet.java:113)
at org.jamwiki.servlets.RegisterServlet.handleJAMWikiRequest(RegisterServlet.java:61)
at org.jamwiki.servlets.JAMWikiServlet.handleRequestInternal(JAMWikiServlet.java:74)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1124)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.jamwiki.authentication.JAMWikiExceptionTranslationFilter.doFilter(JAMWikiExceptionTranslationFilter.java:70)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:75)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:271)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:757)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:416)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:840)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:657)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:377)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:497)
23.09.2008 09:12:49 org.jamwiki.utils.WikiLogger info
INFO: No virtual wiki found in URL: /jamwiki-war/
23.09.2008 09:12:49 org.jamwiki.utils.WikiLogger info
INFO: Parse time (parseHTML) for StartingPoints (0.038 s.)
23.09.2008 09:12:49 org.jamwiki.utils.WikiLogger info
INFO: Loaded page /jamwiki-war/en/StartingPoints (0.043 s.)
23.09.2008 09:12:49 org.jamwiki.utils.WikiLogger info
INFO: Loaded page /jamwiki-war/en/jamwiki.css (0.0020 s.)
So I'm not sure if everything is right. -- mbert 23-Sep-2008 03:01 PDT
OK, here is, what I do - the webtest does ;-). So far I do have two webtests.
Fehler Ein Systemfehler ist aufgetreten. Die Fehlermeldung lautet: Ein unbekannter Systemfehler ist aufgetreten. Die Fehlermeldung lautet: java.lang.IllegalArgumentException: Cannot encrypt a null or empty string.
Probably there was a mandatory field - the test did not notice. ok I found the reason. The user has to enter old and new passwords. ;-) -- mbert 23-Sep-2008 10:59 PDT
Hi Ryan, the fix is not working! I added a webtest for changing the password for the admin-user it works, but adding/changing only the name without the password fails. So I will extend the documentation for the webtests, next time ;-). --mbert 27-Sep-2008 12:21 PDT
Hi Ryan, the error is not: "invalid password" it is:
Ein Systemfehler ist aufgetreten. Die Fehlermeldung lautet: Ein unbekannter Systemfehler ist aufgetreten. Die Fehlermeldung lautet: java.lang.IllegalArgumentException: Cannot encrypt a null or empty string.
So there is no hint about the missing (old) password. -- mbert 28-Sep-2008 05:49 PDT
DatabaseUserHandler.authenticate() should prevent a null or empty password from being encrypted:
// password is stored encrypted, so encrypt password
if (StringUtils.isBlank(password)) {
return false;
}
String encryptedPassword = Encryption.encrypt(password);
Hi Folks, hi Ryan, I just checked out the actual sources and started my webtests.
When I login on a new clean jamwiki-installation (thats what one of my webtests do) and try to change the admin password I get an error (after I clicked on the link: <clickLink label="${usermenu.account}"/>):
On the page I see:
Ein Systemfehler ist aufgetreten. Die Fehlermeldung lautet: javax.el.PropertyNotFoundException: The class 'org.jamwiki.model.WikiUserInfo' does not have the property 'writeable'.
I the logs I see:
INFO: Loaded page /jamwiki-war/en/Special:Account (0.18 s.)
04.10.2008 11:53:43 org.jamwiki.utils.WikiLogger severe
SCHWERWIEGEND: Error in JSP page
javax.el.PropertyNotFoundException: The class 'org.jamwiki.model.WikiUserInfo' does not have the property 'writeable'.
at javax.el.BeanELResolver.getBeanProperty(BeanELResolver.java:547)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:249)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
at com.sun.el.parser.AstOr.getValue(AstOr.java:54)
at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
at org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:984)
at org.apache.jsp.WEB_002dINF.jsp.register_jsp._jspx_meth_c_if_3(org.apache.jsp.WEB_002dINF.jsp.register_jsp:645)
at org.apache.jsp.WEB_002dINF.jsp.register_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.register_jsp:142)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
trimmed long stack trace
so, I thought adding some new Webtest would be a good solution, but now I have no Idea what workaround I can use. -- mbert 04-Oct-2008 03:04 PDT
Hi Ryan, don't blame yourself. Good if you try to include the webtests, so I get a response how the i18n inside the webtests is working. But the final aim should be calling the webtests with maven. At this moment I know a webtest-plugin but do not fully understand the configuration. The problem for me is how to start the jetty container bevor running the webtests and then shutdown jetty afterwards. So this may take some time - so long I will add more webtests. If you run on a onerous bug -> please make a suggestion on the webtest-page for a next test.
Hi Ryan, the changes you did, work fine for me, except the small property loading in the build file. First the personal properties and then the default. Ant properties a immutable. -- mbert 11-Oct-2008 07:10 PDT
We are using jamwiki version 0.6.6 on oracle 11 database with tomcat 6.0.16 on solaris, but the behaviour is also visible on jamwiki.org. If we use a heading in a definition with ':' inside this is interpreted as a new definition list item:
;definition list title: some further title text :definition list line
results in:
I would except something like this:
Am I wrong? --HB 06-Oct-2008 04:58 PDT
Using JamWiki 0.6.7 on WebSphere 6.0.2.31 with the built-in database. In general all is working fine but when going to Special:RecentChangesFeed page we get an http 500 caused by java.lang.NoClassDefFoundError.
See below for stack trace. Any suggestions much appreciated. [xx/xx/xx 12:05:54:361 GMT] 0000002f ServletWrappe E SRVE0014E: Uncaught service() exception root cause jamwiki: java.lang.NoClassDefFoundError
at com.sun.syndication.io.SyndFeedOutput.<init>(SyndFeedOutput.java:44)
at org.jamwiki.servlets.RecentChangesFeedServlet.handleRequestInternal(RecentChangesFeedServlet.java:147)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1697)
com.sun.syndication.io.SyndFeedOutput class is found in the rome-0.9.jar file that is distributed with JAMWiki. Can you confirm that the JAR file is present in your /WEB-INF/lib/ directory? -- Ryan 31-Oct-2008 10:48 PDT[11/3/08 10:09:30:162 GMT] 00000021 ServletWrappe E SRVE0014E: Uncaught service() exception root cause jamwiki: java.lang.VerifyError: (class: com/sun/syndication/io/impl/BaseWireFeedGenerator, method: generateForeignMarkup signature: (Lorg/jdom/Element;Ljava/util/List;)V) Incompatible argument to function at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:219) at com.sun.syndication.io.impl.PluginManager.getClasses(PluginManager.java:133) at com.sun.syndication.io.impl.PluginManager.loadPlugins(PluginManager.java:87) at com.sun.syndication.io.impl.PluginManager.<init>(PluginManager.java:55) at com.sun.syndication.io.impl.PluginManager.<init>(PluginManager.java:46) at com.sun.syndication.io.impl.FeedGenerators.<init>(FeedGenerators.java:47) at com.sun.syndication.io.WireFeedOutput.<clinit>(WireFeedOutput.java:44) at com.sun.syndication.io.SyndFeedOutput.<init>(SyndFeedOutput.java:44)
-- User:newirishman 03/11/2008 10:17 GMT
Using MSSQL as backend, each category has a NULL-value in column sort_key. With NULL as sort-key, pagination is broken and categories are listed in descendent order. Changing STATEMENT_SELECT_CATEGORIES works for me:
STATEMENT_SELECT_CATEGORIES = \
BEGIN \
DECLARE @COUNT int \
DECLARE @TOP int \
DECLARE @OFFSET int \
DECLARE @LIMIT int \
DECLARE @VWIKI_ID int \
DECLARE @SQL varchar(500) \
SET @VWIKI_ID = ? \
SET @LIMIT = ? \
SET @OFFSET = ? \
SET @TOP = @LIMIT \
SET @COUNT = (select count(distinct jam_category.category_name) from jam_topic join jam_category on jam_topic.topic_id = jam_category.child_topic_id where jam_topic.virtual_wiki_id = @VWIKI_ID) \
IF (@OFFSET > @COUNT) SET @OFFSET = @COUNT \
IF (@COUNT < @OFFSET + @LIMIT) SET @TOP = @COUNT - @OFFSET \
SET @SQL = 'select * from ( ' \
+ 'select top '+CONVERT(VARCHAR, @TOP)+' * from ( ' \
+ 'select distinct top '+CONVERT(VARCHAR, @OFFSET + @LIMIT)+' jam_category.category_name, jam_category.sort_key ' \
+ 'from jam_topic join jam_category on jam_topic.topic_id = jam_category.child_topic_id ' \
+ 'where jam_topic.virtual_wiki_id = '+CONVERT(VARCHAR, @VWIKI_ID) \
+ ' order by category_name ' \
+ ') a ' \
+ 'order by category_name desc ' \
+ ') b ' \
+ 'order by category_name' \
EXEC(@SQL) \
END
Important: changing the order from sort_key to category_name broke the statement, because the limit of @SQL (varchar(300)) is exceeded. --hp 30-Nov-2008 23:45 PST
The link to the documentation of lucene should be updated in ApplicationResources_de.properties (search.hints). http://lucene.apache.org/java/2_3_2/queryparsersyntax.html works for me! --hp 30-Nov-2008 23:53 PST
search.hints message key. Let me know how you would like to be credited in the CHANGELOG - I'll use your jamwiki.org login unless you prefer something different such as your full name. -- Ryan 01-Dec-2008 08:24 PST
While trying to upload a file in version 0.6.7, one of my users was thrown an exception. Using another user account with the exact same privileges, I was able to upload the same file fine. The first traceback in the log is:
2008-12-31 13:47:28,314 SEVERE: org.jamwiki.servlets.ServletUtil - Servlet error
java.lang.Exception: Failure while executing insert into jam_file ( file_id, virtual_wiki_id, file_name, file_url, mime_type, topic_id, delete_date, file_read_only, file_admin_only, file_size ) values ( ?, ?,
?, ?, ?, ?, ?, ?, ?, ? )
at org.jamwiki.db.WikiPreparedStatement.executeUpdate(WikiPreparedStatement.java:119)
at org.jamwiki.db.AnsiQueryHandler.insertWikiFile(AnsiQueryHandler.java:755)
at org.jamwiki.db.AnsiDataHandler.addWikiFile(AnsiDataHandler.java:147)
at org.jamwiki.db.AnsiDataHandler.writeFile(AnsiDataHandler.java:1205)
at org.jamwiki.servlets.UploadServlet.upload(UploadServlet.java:264)
at org.jamwiki.servlets.UploadServlet.handleJAMWikiRequest(UploadServlet.java:63)
at org.jamwiki.servlets.JAMWikiServlet.handleRequestInternal(JAMWikiServlet.java:74)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.jamwiki.authentication.JAMWikiExceptionMessageFilter.doFilter(JAMWikiExceptionMessageFilter.java:71)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:54)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: Attempt to insert null into a non-nullable column: column: MIME_TYPE table: JAM_FILE in statement [insert into jam_file ( file_id, virtual_wiki_id, file_name, file_url, mime_
type, topic_id, delete_date, file_read_only, file_admin_only, file_size ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
at org.jamwiki.db.WikiPreparedStatement.executeUpdate(WikiPreparedStatement.java:111)
... 56 more
And a later exception also related to the upload:
2008-12-31 13:47:46,963 SEVERE: org.jamwiki.servlets.ServletUtil - Servlet error
java.lang.Exception: No topic exists for en / Image:cacert.pem
at org.jamwiki.db.AnsiDataHandler.getAllWikiFileVersions(AnsiDataHandler.java:301)
at org.jamwiki.servlets.ServletUtil.viewTopic(ServletUtil.java:899)
at org.jamwiki.servlets.ServletUtil.viewTopic(ServletUtil.java:839)
at org.jamwiki.servlets.TopicServlet.view(TopicServlet.java:59)
at org.jamwiki.servlets.TopicServlet.handleJAMWikiRequest(TopicServlet.java:45)
at org.jamwiki.servlets.JAMWikiServlet.handleRequestInternal(JAMWikiServlet.java:74)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.jamwiki.authentication.JAMWikiExceptionMessageFilter.doFilter(JAMWikiExceptionMessageFilter.java:71)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.jamwiki.authentication.JAMWikiAnonymousProcessingFilter.doFilter(JAMWikiAnonymousProcessingFilter.java:54)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:58)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
The file being uploaded was an SSL CA certificate. A text file with a ".pem" extension. It seems not to know the content type of the file and is failing because of it? Isn't there a fail-over case to just send things "application/octet-stream" or something similar? Any ideas why it uploads fine for me but not the other user?
Thanks for your hard work. JAMWiki has been a great addition to our infrastructure thus far. --Tim 31-Dec-2008 12:44 PST
This link will not be renderd correctly: http://de.wikipedia.org/wiki/Heroes_(Fernsehserie) -- mbert 18-Jan-2009 07:41 PST
When attempting to access a page that generates an AccessDeniedException using the Resin server an IllegalStateException is thrown due to an attempt to redirect after the response has been committed. Thus far I haven't been able to track down where the problem is, and the same code works with Tomcat, but this issue may hold up the final 0.7.0 release until it is solved. -- Ryan • (comments) • 17-Feb-2009 21:27 PST
Parsing of four dashes is broken for 0.7.0 when surrounded by newlines:
the above is broken.
this works
-- Ryan • (comments) • 20-Feb-2009 00:16 PST
When trying to upload a file I get a noClassDefFoundError. I recently upgraded to tomcat5.5 and am not sure if this is related at all. Unfortunately I had n't tried upload file since upgrading jamwiki to 0.6.0 so am unable to pin point where this problem started.
2007-10-21 09:23:35,529 SEVERE: org.jamwiki.servlets.ServletUtil - Servlet error
java.lang.NoClassDefFoundError
at javax.imageio.ImageReader.getSourceRegion(ImageReader.java:2544)
at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1315)
at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1579)
at javax.imageio.ImageIO.read(ImageIO.java:1400)
at javax.imageio.ImageIO.read(ImageIO.java:1322)
at org.jamwiki.utils.ImageUtil.loadImage(ImageUtil.java:128)
at org.jamwiki.utils.ImageUtil.isImage(ImageUtil.java:111)
at org.jamwiki.servlets.UploadServlet.upload(UploadServlet.java:195)
truncated.......
--CB 21-Oct-2007 08:26 PDT
Thanks, good to know it is working for someone. I am using Sun JDK 1.5 and Tomcat 5.5, same JDK I was using before the tomcat/ubuntu upgrade. --70.123.157.217 21-Oct-2007 13:02 PDT
The problem appears to be a system configuration issue in Debian - after tweaking the CLASSPATH I got the following message in the log which eventually led to a solution:
java.lang.UnsatisfiedLinkError: /usr/lib/jvm/java-1.5.0-sun-1.5.0.17/jre/lib/i386/libawt.so: libmlib_image.so: cannot open shared object file: No such file or directory
I won't pretend to fully understand the issue, but the solution (for jamwiki.org at least) is available from https://bugs.launchpad.net/debian/+source/sun-java5/+bug/162232:
"I have the same issue, solved with the following command: sudo ln -s /usr/lib/jvm/java-1.5.0-sun/jre/lib/i386/libmlib_image.so /usr/lib sudo ldconfig Under AMD64 system this can be solved by creating the /etc/ld.so.conf.d/java.conf with the following contents: /usr/lib/jvm/java-1.5.0-sun/jre/lib/i386 Under x86 this doesn't work so the "ln -s" trick is needed."
-- Ryan • (comments) • 21-Feb-2009 18:12 PST
If you go to the site for the first time (or after enough time that your previous session has expired), you are given a new session. For example, go to: http://www.jamwiki.org (include the www subdomain), you get forwarded to the homepage and it includes the session ID in the query string, like this: http://jamwiki.org/wiki/en/StartingPoints;jsessionid=67431F28377CD519F0A668A582AA4745
If someone were to sniff it off your traffic, they could potentially hijack your session. -- scroco 25-Aug-2006 11:12 PDT
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="resourceBase">/opt/jamwiki
</Set>
<Set name="connectorNames">
<Array type="String">
<Item>default</Item>
</Array>
</Set>
<Set name="initParams">
<Map>
<Entry>
<Item>org.mortbay.jetty.servlet.SessionIdPathParameterName</Item>
<Item>none</Item>
</Entry>
</Map>
</Set>
</Configure>
/x/y/z;name=value?q1=a&..., or /x/y;name=value/z;v=2.1?q1a...). The jsessionid is injected as a path parameter, but IMHO should be filtered by the web server and not returned in getRequestURI() and similar methods. I suppose that my version of Jetty standalone, which uses Jetty 7 pre-release, is broken, because it fails to strip jsessionid from getRequestURI(), thus confusing web applications that do not expect their URI paths to be parameterized. spiralmike 22-Dec-2008 20:42 PDT.
There is a entry ldap-authentication-provider missing for LDAP authentication. I'd searched 3 days for the cause. In version 0.7 Spring can only see the user details like the roles and fails when mapping to a user. With the ldap-authentication-provider this works like expected.
<ldap-server id="ldapServer" url="ldap://192.168.1.100/dc=mycompany,dc=com" port="389" manager-dn="cn=admin,dc=mycompany,dc=de" manager-password="mypasswd"/>
<ldap-authentication-provider server-ref="ldapServer" group-search-filter="member={0}" group-search-base="ou=groups" user-dn-pattern="uid={0},ou=people" />
<authentication-provider>
<ldap-user-service server-ref="ldapServer" group-search-filter="member={0}" group-search-base="ou=groups" user-search-filter="uid={0}" user-search-base="ou=people" />
</authentication-provider>
<ldap-authentication-provider server-ref="ldapServer" group-search-filter="member={0}" group-search-base="ou=groups" user-search-filter="uid={0}" user-search-base="ou=people" />
I upgraded from 0.6.7 to 0.7.0 without issue. I have a few roles set up to restrict access to a few pages and I had removed all access to GRUOP_ANONYMOUS by unchecking all of the roles. When I opened the Roles tab in the Admin page the GROUP_ANONYMOUS group was not displayed, only the GROUP_REGISTERED_USERS was showing. I also noticed if I created a new user and then typed that user's name in the Assign User Roles/Search for Users by Login nothing was displayed.
I went back to my 0.6.7 install and added the roles back into the GROUP_ANONYMOUS group and then converted to 0.7.0 again and this time I can see both groups under Admin Roles.
Basically it looks like users and groups are not being displayed unless they have some roles checked. So if you add a new user it is not possible to give that user additional new roles. --Tom Schueller 15-Mar-2009 17:01 PDT
--Bob White 13-Mar-2009 19:13 PDT I just installed version 0.7.0 (Mar 13 09) and find that no matter what I set the Default Topic to, it remains StartingPoints.
http://localhost/wiki/ or http://localhost/wiki/en/ in my browser both take me to http://localhost/wiki/en/Sandbox.Search for users ... broken in v0.7.0In JAMWiki 0.7.0 on the Special:Roles page the search for users doesn't yield any results (except when searching for the logged in admin). --tapaya 05-Mar-2009 08:33 PST
...\Tomcat 6.0\temp\jamwiki.log.0 doesn't say anything about this issue; are there other files to consider? Reproducing is easy: just log in as admin, go to the Special:Roles page and search for any but the admin user ... no results. My setup is Windows XP/Tomcat 6.0/JAMWiki 0.7.0/H2 1.1.108. Can you think of a workaround to assign admin rights to users? --tapaya 06-Mar-2009 01:28 PST
WEB-INF/resources directory will be something to look at. I still need to pack for my trip, so if I don't get to this before the plane leaves tonight I'll have time while sitting in the airport tomorrow. -- Ryan • (comments) • 06-Mar-2009 12:50 PST/WEB-INF/resources/sql.ansi.properties to change the following property will resolve the problem:
STATEMENT_SELECT_AUTHORITIES_LOGIN = \
select jam_wiki_user.wiki_user_id, jam_users.username, \
jam_authorities.authority \
from jam_wiki_user, jam_users \
left outer join jam_authorities on ( \
jam_users.username = jam_authorities.username \
) \
where jam_users.username = jam_wiki_user.login \
and lower(jam_users.username) like ? \
order by jam_users.username
Creating a new article with special-chars works only if you first create a link to it (try TestÜmlaut). Attaching this name to the URL breaks them (try http://jamwiki.org/wiki/en/TestÜmlaut) and - for me worse then the first constraint - Special:Move also breaks such characters (ö,ä,ü,...). Special-chars in the description-field of Special:Move are also broken. --hp 21-Jan-2009 23:54 PST
--hp 08-Apr-2009 02:15 PDT
Using MS-SQL as backend, an exception is thrown while looking for user changes. In STATEMENT_SELECT_WIKI_USER_CHANGES_LOGIN (sql.mssql.properties) @SQL is declared as varchar(900) and should be at least varchar(1000), otherwise the statement is broken. --hp 08-Apr-2009 00:21 PDT
In Jamwiki 0.7.1 my Toolbar gets lost at preview, because EditServlet sets the attribute "editor" not when isPreview(request) returns true.
<c:when test="${editor == 'toolbar'}">
<%@ include file="editor-toolbar-include.jsp" %>
</c:when>
if (isPreview(request)) {
preview(request, next, pageInfo);
return;
}
/* ... */
next.addObject("editor", editor);
--hp 08-Apr-2009 02:01 PDT
It fails to access any page. I ended up installing with Tomcat 5.5 (which worked nicely) and then I moved it back to Resin... but same problem. Maybe this is a Resin problem. Not sure. I need to stick with Resin because Resin/Quercus runs (properly) with phpMyAdmin whereas phpMyAdmin fails with Tomcat/Quercus. Is there a tweak I can make?
-- James (james dot moger at gmail dot com)
[16:40:12.921] {http--8080-0} at java.lang.Thread.run(Thread.java:619)
javax.el.PropertyNotFoundException: array index '1' is invalid
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:118)
at com.caucho.jsp.el.PageContextELResolver.getValue(PageContextELResolver.java:172)
at com.caucho.el.ArrayResolverExpr.getValue(ArrayResolverExpr.java:148)
at com.caucho.el.Expr.evalObject(Expr.java:224)
at _jsp._web_22dinf._jsp._setup__jsp._jspService(_setup__jsp.java:79)
at _jsp._web_22dinf._jsp._setup__jsp._jspService(_setup__jsp.java:30)
at com.caucho.jsp.JavaPage.service(JavaPage.java:61)
at com.caucho.jsp.Page.pageservice(Page.java:580)
at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:195)
at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:97)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:293)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:111)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.security.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:99)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at org.jamwiki.servlets.JAMWikiFilter.doFilter(JAMWikiFilter.java:59)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:189)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:266)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:292)
at com.caucho.server.port.TcpConnection.handleRequests(TcpConnection.jav
a:577)
at com.caucho.server.port.TcpConnection$AcceptTask.doAccept(TcpConnection.java:1211)
at com.caucho.server.port.TcpConnection$AcceptTask.run(TcpConnection.java:1152)
at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:759)
at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:681)
at java.lang.Thread.run(Thread.java:619)
setup.jsp, any one of which may occasionally be empty (the same is true on many other pages). I'll have to dig into the specs to see if this is a Resin bug or if it's simply fortuitous that it worked on other app servers and then see if an easy solution is available. -- Ryan • (comments) • 11-Apr-2009 11:44 PDT
When the TOC depth exceeds the MAX_TOC_DEPTH JAMWiki property the rendering breaks, adding additional list elements. Example:
<!-- assume MAX_TOC_DEPTH is 3 --> == Good == === Good === ==== Still Good ==== ===== Broken! =====
-- Ryan • (comments) • 10-Apr-2009 14:00 PDT
The Mediawiki style of printing the categories related texts before the category listing seems to be better readable. See Category:Developer Documentation, where the text
Articles related to Developer Documentation
is printed below the category listing -- Axel Kramer 17-Apr-2009 08:16 PDT
I had reported this in version 0.7.0 and there was a related problem where a user with no roles checked would not display. I can now search for a user who has no roles set and the user will display correctly. But I'm still having the issue with the GROUP_ANONYMOUS group. In 0.6.7 I had removed the ROLE_VIEW so that there is not access unless you already have an account. When I upgraded the group GROUP_ANONYMOUS does not show up under the Admin/Roles page.
As a work around I went back to 0.6.7 and added a new role, that basically does nothing, but since I have it checked in the GROUP_ANONYMOUS it still allows me to see the group in the admin page. --Tom Schueller 05-May-2009 16:25 PDT
/resources/sql.ansi.properties, so if you need this fixed and don't want to wait for JAMWiki 0.7.2 you can simply modify that file in your local installation and then restart your app server. -- Ryan • (comments) • 10-May-2009 18:41 PDTAutomatic Upgrade from Version 0.6.7 to 0.7.0 or higher fails when using MSSQL as backend. Manual Upgrade works, but statements must be changed (see mssql jamwiki upgrade 0.7.0.sql - running these statements worked for me). --hp 19-May-2009 01:23 PDT
While upgrading on windows worked (after solving MSSQL-problems), I cannot edit the Stylesheet on SuSE Linux ... when I try to save, I get the following message:
When I run into this problem, a restart of tomcat is necessary, because every other action ends in a stack overflow...
java.lang.StackOverflowError at java.nio.charset.Charset.atBugLevel(Unknown Source) at java.nio.charset.CharsetDecoder.<init>(Unknown Source) at java.nio.charset.CharsetDecoder.<init>(Unknown Source) at sun.nio.cs.UTF_8$Decoder.<init>(Unknown Source) at sun.nio.cs.UTF_8$Decoder.<init>(Unknown Source) at sun.nio.cs.UTF_8.newDecoder(Unknown Source) at java.nio.charset.CharsetEncoder.isLegalReplacement(Unknown Source) at java.nio.charset.CharsetEncoder.replaceWith(Unknown Source) at java.nio.charset.CharsetEncoder.<init>(Unknown Source) at java.nio.charset.CharsetEncoder.<init>(Unknown Source) at sun.nio.cs.UTF_8$Encoder.<init>(Unknown Source) at sun.nio.cs.UTF_8$Encoder.<init>(Unknown Source) at sun.nio.cs.UTF_8.newEncoder(Unknown Source) at java.lang.StringCoding$StringEncoder.<init>(Unknown Source) at java.lang.StringCoding$StringEncoder.<init>(Unknown Source) at java.lang.StringCoding.encode(Unknown Source) at java.lang.String.getBytes(Unknown Source) at java.net.URLEncoder.encode(Unknown Source) at org.jamwiki.utils.Utilities.encodeAndEscapeTopicName(Utilities.java:171) at org.jamwiki.utils.LinkUtil.appendQueryParam(LinkUtil.java:73) at org.jamwiki.utils.LinkUtil.buildEditLinkUrl(LinkUtil.java:97) at org.jamwiki.utils.LinkUtil.buildTopicUrl(LinkUtil.java:346) at org.jamwiki.utils.LinkUtil.buildEditLinkUrl(LinkUtil.java:105) at org.jamwiki.utils.LinkUtil.buildTopicUrl(LinkUtil.java:346)
I hope I can dig into that one soon, any suggestions? --hp 19-May-2009 02:49 PDT
Moved from the Feedback page:
I'm trying to create a master template consisting of various sub-templates, each of those expecting some parameters.
One of my sub-templates (Country Profile Overview Country) is defined like:
{{{CountryOverview|Something about {{{Country|<Country Name>}}}...}}}
<noinclude>
<p><br /><br /><br />
----
'''Usage'''
----
This template is used to provide a standardize way of giving an overview over a particular country.
<pre><nowiki>
{{Country Profile Overview Country
|Country=<Country Name>
|CountryOverview=<Country Overview>
}}
<//nowiki><//pre>
----
[[Category:Template]]
[[Category:Sub-Template]]
</noinclude>
My master templates (Country Profile) incorporates the sub-template like:
__TOC__
== Overview {{{Country|<Country Name>}}} ==
{{Country Profile Overview Country
|Country={{{Country|<Country Name>}}}
|CountryOverview={{{CountryOverview|<Country Overview>}}}
}}
This master template I'm then using like:
{{Country Profile
|Country=San Marino
|CountryOverview={{{Country|<Country Name>}}} is a landlocked enclave in Italy...
}}
[[Category:Test]]
[[Category:Sandbox]]
As you can see, I'm passing a parameter ({{{Country|<Country Name>}}}) inside another parameter (CountryOverview). This results in:
Test Country Profile
------------------------------------------------------------------
Overview San Marino
{{{Country|<Country Name>}}} is a landlocked enclave in Italy...
How would I manage having the Country-parameter being replace appropriately? --Sil68 07-Apr-2008 07:24 PDT
Example:
* Outer list first item ** Inner list first item this is a second line for the inner list first item ** Inner list second item (here is the bug with two bullets) * Outer list second item
leads to:
this is a second line for the inner list first item
I forgot, this bug report is from: frafu 14-Apr-2009 07:41 PDT
I'm trying to upgrade and migrate from 0.5.1. with HSQLDB (file database) to 0.7.1 with MySQL database but am encountering a lot of problems. First of all, the automatic upgrade fails with an error 'javax.servlet.jsp.JspException: java.lang.Exception: Failure while executing select * from jam_virtual_wiki' . I have Tomcat 6 installed with java 1.5 and fresh install works with any version.
Since the automatic upgrade fails I tried the manual upgrade to version 0.6.0 for starters, but with the same result. Then I tried to migrate the database from HSQLDB to MySQL using the MySQL Migration Toolkit but there are a lot of errors that get produced because of the quotes that are commented out. I could live with treating all the errors but all the links to files get lost also.
So my question: what is the easiest way to migrate from 0.5.1 to 0.7.1 without errors and keeping all my users data (which is quite a lot)?
I'm quite sure I have not overlooked any of the upgrade instructions since I have done it four times now. I thought it might have to do with the database schema that gets changed in version 0.6.x so I started yesterday by trying out that release but with the same result.
First I tried the automatic upgrade using the steps described in the UPGRADE.txt document.
Back up all database and/or file data prior to upgrading. Back up the jamwiki.properties file and the logging.properties from the the /WEB-INF/classes/ directory. Change the necessary items in the properties file (home dir, upload dir, etc). Remove the old JAMWiki installation by deleting your existing JAMWiki web application. Install the new JAMWiki WAR file. Stop the application. Restore the files that were backed up to their previous locations under the /WEB-INF/ and /WEB-INF/classes/ directories. Restore the database files to the correct location overwriting the ones created by install. Start the application. Browse to the site which redirects to the upgrade Provide any login (sa without password, admin that I created, database user, root user) with the result as indicated.
At this moment I'm trying to install the same version with HSQLDB database exactly the same as the original server is configured, i.c. version 0.5.1. I followed this steps:
New install of version 0.5.1. with internal database Stop application Copy jamwiki.properties and logging.properties to the correct directory (WEB-INF/classes) Copy all the database files Restart the application.
and I get the error: javax.servlet.jsp.JspException: java.lang.Exception: Failure while executing select * from jam_virtual_wiki
I really hope you can help out with this one.
2009-04-21 20:51:31,859 SEVERE: org.jamwiki.db.WikiPreparedStatement - Failure while executing delete from jam_group_authorities where group_id = ? java.sql.SQLException: Table not found in statement [delete from jam_group_authorities where group_id = ?]
Hello Ryan,
I've been playing around with the HSQL database and MySQL and using SQuirreL I was able to copy the tables from HSQL to MySQL without any trouble. So, next I installed version 0.6.1 as you indicated, copied the properties files to the correct folder and restarted the webserver. I get the upgrade page and provide the login. Following this it takes some time but this upgrade also crashes, with the following statement:
The upgrade has failed. Please see below and check the logs for any failure messages, and consult the UPGRADE.txt document for details on how to perform a manual upgrade. Please report this error at jamwiki.org and provide any relevant information in the bug report.
Added jam_group table Added jam_role table Added jam_role_map table Added basic wiki roles. Added basic wiki groups. Converted admin users to new role structure. Removed ROLE_DELETE Unable to complete upgrade to new JAMWiki version.: null
The tables get created and inserts are executed apparently. After some digging around in the database and comparing it to the manual upgrade procedure I've encountered the following:
In the ultimate step (upgrade from 0.6.0 to 0.6.1) the instruction
2. Delete the unused ROLE_DELETE:
a) Delete values from the jam_role_map table:
DELETE from jam_role_map where role_name = 'ROLE_DELETE';
b) Delete values from the jam_role table:
DELETE from jam_role where role_name = 'ROLE_DELETE';
But these values don't exist in the tables so I imagine that this is where the upgrade procedure crashes. I then changed the version number in the properties file and got the site running in version 0.6.1 but my layout is gone and I get the error that StartingPoints doesn't exist.
How can I repair this?
I tried editing the StartingPoints page as indicated but apparently nothing gets saved.
Thanks for your help Ryan.
Eric (vs.eric@gmail.com)
Hello Ryan,
I just did an upgrade from version 0.6.1 to 0.7.1 with errors that I was able to solve, but still I get no layout, it seems that StyleSheet is somewhere ignored, lost or inaccesible. Furthermore, I get the mention that StartingPoints doesn't exist and I'm unable to create it. When I click to edit and enter my text it doesn't get saved.
Hello,
Back again with an update. I've managed to get the content over to the new database layout whilst maintaining the WIKI layout, not without problems I can say. Though all content is in the MySQL database I cannot seem to access any of it. When I edit the LeftMenu as in the 'old' version all links show in red and when I click on a link it says the topic doesn't exist and I can create it.
How do the topics and versions link in the database to this LeftMenu? Is it only by the topic name or how? I cannot find anything that helps me any further on this one. Please enlighten me a bit.
No problem whatsoever Ryan, I'm glad you can find the time to help out on this issue because I'm really in the dark about what is going wrong. I just tried your solution clearing the cache but without result. The links stay red although all the data is in the database. It seems like Jamwiki cannot find anything. I have about 772 lines in jam_topic, 10232 in jam_topic_version but only 8 in jam_recent_change although I have over 10000 lines in the mysqldump. Is this normal? Does this table get cleaned with the clear cache command?
That sounds like great news Ryan, thanks a lot! I'll wait for you to provide the beta version and then I'll perform an automated upgrade on our live system using HSQL. I suppose that after that upgrade it'll be a lot easier to move the site to another server and change the database to MySQL. Again, thank you very much for your help. Do you have an idea about the time when you'll release the beta? Eric 06-May-2009.
Fantastic Ryan! I'll be leaving for our German office this Saturday and won't be back until next Wednesday so don't speed up things just because of me. Anyway, again, thanks a million. Eric 07-May-09.
Hello again Ryan,
I'm happy to tell you that with the beta you provided I was able to perform the upgrade using the HSQL database from version 0.5.1 to 0.7.2 without any errors. The only thing that is failing persistently is the content of the database. I'm really losing my mind on this one. The database is there, the upgrade performed without any errors but I still only get the default as with a clean installation. Clearing the cache didn't solve anything. I have a database of 67Mb and nothing is showing on the wikipage. Could you help me out on this issue please because I don't know what's going on.
Whenever I log in with an existing user, I am getting the following error:
java.lang.NoClassDefFoundError at javax.crypto.SecretKeyFactory.getInstance(DashoA12275) at org.jamwiki.utils.Encryption.createKey(Encryption.java:148) at org.jamwiki.utils.Encryption.encrypt64(Encryption.java:58) at org.jamwiki.utils.Encryption.encrypt(Encryption.java:98) (snip)
I just moved the wiki from Resin to WebSphere and finally to a second instance of Resin on a new host. I would be happy to simply delete the existing users so we can register again. There are only three users, including the admin user. Hard to do anything when the admin user cannot log in. Bob White 09-Jun-2009 09:49 PDT
javax.crypto.SecretKeyFactory is a part of the standard JDK, but for some reason it seems like your app server can't find it... I don't know if it will help, but this discussion sounds like a similar issue. -- Ryan • (comments) • 09-Jun-2009 12:07 PDT
resin -install -java_home "C:\Program Files\Java\jre6"
%RESIN_HOME%\resin.exe ... -java_home %JAVA_HOME% ... -java_home "C:\Program Files\Java\jre6"
To be clear, this was not at all a bug in JAMwiki, just a misconfiguration of caucho resin that affected JAMwiki in this way. Thanks for your help. Bob White 09-Jun-2009 16:27 PDT
After the installation screen I get this error message (german) Ein unbekannter Systemfehler ist aufgetreten. Die Fehlermeldung lautet: java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.length(Ljava/lang/String;)I.. I installed JamWiki on a Apache Geronimo 2.1.3 and a mssql connection over jtds.-- Fanninger Thomas • 02-Mar-2009 04:40 PST
/WEB-INF/lib/commons-lang-2.4.jar that is included by default with the JAMWiki distribution. I suspect you might have an older version of the commons-lang.jar file somewhere in your classpath that is overriding the JAMWiki version - can you see if Geronimo is including commons-lang.jar by default somewhere? Thanks for the report! -- Ryan • (comments) • 02-Mar-2009 07:25 PST
<?xml version="1.0" encoding="UTF-8"?>
<web:web-app xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
xmlns:client="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
xmlns:conn="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
xmlns:ejb="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
xmlns:name="http://geronimo.apache.org/xml/ns/naming-1.2"
xmlns:pers="http://java.sun.com/xml/ns/persistence"
xmlns:pkgen="http://openejb.apache.org/xml/ns/pkgen-2.1"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-2.0"
xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
<dep:environment>
<dep:moduleId>
<dep:groupId>org</dep:groupId>
<dep:artifactId>jamwiki</dep:artifactId>
<dep:version>0.7</dep:version>
<dep:type>war</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>at.kages.lib</dep:groupId>
<dep:artifactId>jtds</dep:artifactId>
<dep:version>1.2.2</dep:version>
<dep:type>jar</dep:type>
</dep:dependency>
</dep:dependencies>
<dep:hidden-classes>
<dep:filter>org.apache.commons.lang</dep:filter>
</dep:hidden-classes>
</dep:environment>
<web:context-root>/wiki</web:context-root>
</web:web-app>
Hello, I'm having problems migrating from HSQL to MySQL, probably because my DB is soo big. I cannot export to CSV, neither use the migration script. When using the migration script from the Maintenance page, I get the following error:
Changes HAVE NOT been saved An unknown system error has occurred. The error message is: Data truncation: Data too long for column 'version_content' at row 1.
When trying to export to CSV I get an out of memory error. Could you indicate where the migration script is located so I can review and eventually adapt it to test? -- Eric 09-Jun-2009.
Hi Ryan,
I got it working! Successfully migrated from HSQL to MySQL using the MySQL Migration Toolkit and changing a lot of table options in the scripts and data. Basically the indices from HSQL do not get translated and are unusable with the MySQL install of Jamwiki resulting in not displaying any data in the wiki. Also the foreign keys need to be deleted if using MyISAM. Most important thing is that it's working great! Thank you for all your assistance over the last weeks. If you want the exact procedure please let me know and I'll be happy to provide it. Eric 11-06-09 11:10.
Copied from Tech:Migrate Database:
Any success with PostgreSQL? I have been able to export. But loading (migrating) is returning with no success and errors:
Changes HAVE NOT been saved An unknown system error has occurred. The error message is: Failure while executing CREATE TABLE jam_virtual_wiki ( virtual_wiki_id INTEGER NOT NULL, virtual_wiki_name VARCHAR(100) NOT NULL, default_topic_name VARCHAR(200) NOT NULL, create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, CONSTRAINT jam_p_vwiki PRIMARY KEY (virtual_wiki_id), CONSTRAINT jam_u_vwiki_name UNIQUE (virtual_wiki_name) ). An unknown system error has occurred. The error message is: ERROR: relation "jam_wiki_user" does not exist.
Not exactly sure where the problem is happening. I have been looking at the code for org.jamwiki.db.WikiDatabase to see if there is a clue that can be found, but nothing like a smoking gun. Hoping there has been some success. I'm running 0.6.7, psql 8.2.5. --Tim