04 oktober, 2011

Glassfish 3.0.1 + Commons Codec 1.5 != sant

Base64 base64UrlFriendly = new Base64(true); // Nixpix!

Idag sprang jag på en irriterande bugg i Glassfish v. 3.0.1. Det var när jag försökte använda biblioteket Apache Commons Codec (version 1.5) i en webbapplikation byggd i Netbeans som det började strula. Jag ville använda klassen Base64 i s.k. 'urlSafe'-läge för att verifiera en signerad request från Facebook (se tidigare post). Det gick fint att bygga och deploya men applikationen kastade ett Exception i runtime.

java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.<init>(Z)V

Hmm, märkligt eftersom JAR-filen för commons-codec-1.5 byggdes in i WEB-INF/lib enligt konstens alla regler. Extra konstigt att metoden inte fanns? Efter en del efterforskningar visade det sig att Glassfish har en egen version av Commons Codec (äldre än 1.4) som ligger under
${GLASSFISH_HOME}/modules och den heter commons-codec-repackaged.jar som uppenbarligen laddas istället för den version jag ville använda. Min lösning på problemet fick bli att ersätta denna version med commons-codec-1.5.jar omdöpt till commons-codec-repackaged.jar. Det kändes inte speciellt bra, frågan är vad man gör om man skall deploya till en server som man inte har kontroll över?

Inga kommentarer:

Skicka en kommentar