[ filmil @ 21.04.2004. 23:42 ] @
Ovih dana u jednom programu koristim (malo vremešnu) biblioteku OpenJGraph za rad sa grafovima. OpenJGraph ima zanimljivu mogućnost da grafove serijalizuje u GraphML. Na žalost, deo za serijalizaciju nije dorađen kao grafovski, pa se prilagođavanje koda iz njega svodi na izmeštanje izvornog koda u drugi paket i onda izmenu hardkodovanih delova. Nije elegantno, ali je priručno rešenje.

Deo koda jednog modula izgleda ovako:

Code:

import org.apache.xerces.parsers.SAXParser;

// ...
    this.parser = new SAXParser():
// ...
public void endSerialize() throws Exception {
            this.readerAdapter.endElement( "",
                XGMML.GRAPH_ELEMENT_LITERAL, XGMML.GRAPH_ELEMENT_LITERAL );
                   this.parser.endDocument();
        }


A pri prevođenju se javlja sledeća greška:
Code:

GraphToXGMMLSAXHandler.java:291:
cannot resolve symbol symbol : method startDocument () location: class
org.apache.xerces.parsers.SAXParser
                    this.parser.startDocument();


Javljaju se još 3 slične greške, koje se sve žale da „cannot resolve symbol: method taj-i-taj“ u klasi SAXParser. Najnormalniji zaključak bio bi da u klasi SAXParser ne postoji dotični metod startDocument(); međutim, originalna datoteka na originalnoj lokaciji (i paketu) se prevodi bez grešaka iako sadrži u principu isti ovaj kod. Klasu GraphToXGMMLSAXHandler sam morao da prebacim zato što je (nepotrebno) privatna klasa parsera.

Da li postoji još neki slučaj u kome gorepomenuta greška može da se javi? Koliko sam video $CLASSPATH je podešen kako treba pri prevođenju.

Na žalost nemam izvorni kod od xercesa da pogledam o čemu se tačno radi, a od vremena kad je OpenJGraph napravljen do sada, interfejs xercesa se toliko promenio da na Internetu po svoj prilici više ne postoji javadoc za ovu staru verziju. Pogled u .class datoteku za SAXParser otkriva da postoji simbol startDocument.

f

[ sspasic @ 22.04.2004. 05:28 ] @
Ne znam rešenje ali me sve to jako podeća na probleme koje sam imao da nateram (moju) aplikaciju koja je koristila stari Xerces/Xalan da radi na j2sdk 1.4.0
To je kombinacija koja se ponaša, blago rečeno, neuračunljivo - nekad radi, nekad ne, a kad ne radi uglavom prijavljuje 'no such method...'

Na kraju sam presekao, prešao na novi Xerces/Xalan i preradio deo aplikacije koji je koristio stari API.
[ sspasic @ 22.04.2004. 06:13 ] @
Bio sam malo neprecizan. Kad kažem 'novi Xerces/Xalan' mislim na verzije 2 ovih biblioteka.

Još samo da dodam da je kod mene (izgleda) bio problem to što je u j2sdk 1.4.0 dodat XML API i deo klasa se (mislim) preklapa.
Ako tvoja aplikacija radi pod Tomcat-om, koji takođe jednačinu komplikuje svojim verzijama ovih biblioteka, postoji rešenje sa 'endorsed' direktorijumom (našao sam na internetu, nisam probao).