Toon posts:

[Java] JAXP onder JBuilder 9.0 ? *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo mensen,
ik ben dus bezig met een programmeeropdracht waarin ik SAX moet gebruiken. Ontwikkelomgeving is JBuilder 9.0. Mijn leraren (die zelf nog JBuilder 4.0 gebruiken) hebben me toen aangegeven dat ik de external library JAXP moest selecteren bij het aanmaken van een nieuw project. Alleen is het probleem nu dat die er standaard niet tussen zit :( Volgens hen zou dat wel het geval moeten zijn aangezien dat standaard geimplementeerd is vanaf JBuilder 4.0
Hierna heb ik via
http://java.sun.com/xml/jaxp <http://java.sun.com/xml/jaxp> de Java
WSDP 1.3 gedownload en alles geinstalleerd. Toen kon ik JAXP nog niet
selecteren als te gebruiken libraries. Hierna heb ik gekozen voor de
optie om zelf een library aan te geven en die heb ik dus naar de
JAXP.jar file gewezen in de door Java WSDP 1.3 gemaakte directory.
Dit heeft jammer genoeg niets uitgemaakt :(
Heeft iemadn enig idee hoe ik het allemaal aan de praat kan krijgen ?

Verwijderd

Ik ken JBuilder niet, maar kun je niet op de één of andere manier met de hand compileren?. Doe het anders gewoon in je prompt:
code:
1
javac -classpath C:/Map/Waar/Je/Jar/In/Staat/ Programma.java

Verwijderd

Topicstarter
net geprobeerd en krijg volgende error :

Exception in thread "main" java.lang.NoClassDefFoundError : ToonAgendaMetSAX

k, dus hij kan de class-definitie zo te zien niet vinden en dat terwijl diezelfde file de klas definieert :
public class ToonAgendaMetSAX extends HandlerBase

ik ga ervauit dat je met javac eigenlijk java bedoelde....

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

JAXP is alleen maar de XML API specificatie. Wat je echt nodig hebt is een XML parser implementatie die de JAXP API ondersteunt. Apache Xerces-J is er zo eentje, en als ik me niet vergis is de library "Xerces" wel gewoon standaard in JBuilder aanwezig.

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
klopt, Xerxes zit er bij, en als die er niet bij was dan heb ik dat nog wel gedaan ;)
maarre, als ik namelijk mijn project wil laten runnen dna krijg ik allemaal errors die volgens mij te maken hebben met het niet kunnen vinden van bepaalde functies ofzo :

"MaakAgendaXML.java": package com.sun.xml.tree does not exist at line
22, column 25
line 22 : import com.sun.xml.tree.XmlDocument;

"MaakAgendaXML.java": cannot resolve symbol: class XmlDocument in class
MaakAgendaXML at line 429, column 9

Hij kan dus ook niet XmlDocument vinden :(

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

com.sun.* :? Dat is zeker geen JAXP... Post eens een stuk code?
Als je XML wilt parsen m.b.v. de JAXP API moet je beginnen met javax.xml.parsers.DocumentBuilderFactory en javax.xml.parsers.SAXParserFactory. Als je daar de Javadoc van bekijkt kun je zien hoe het verder gaat.

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
tja programma posten gaat moeilijk, bestaat namelijk uit 3 files :(
anyways hier heb ik de import-gedeelte :

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
//import com.sun.xml.tree.XmlDocument;
//import javax.xml.*;
//import javax.xml.dom.*;
//import javax.xml.stream.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParserFactory;

dus eigenlijk stond er al javax.xml.parsers.*

anyways dan krijg ik het volgende error :

"MaakAgendaXML.java": cannot resolve symbol: class XmlDocument in class MaakAgendaXML at line 435, column 9

en dat in de volgende routine :

try
{
((XmlDocument)document).write(new FileOutputStream("nieuwAgenda.xml"));
}

waar hij dus XmlDocument aanspreekt dat in deze package zit : com.sun.xml.tree.XmlDocument;
die hij dus nergens kan vinden :(

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Verwijderd schreef op 26 januari 2004 @ 15:22:
tja programma posten gaat moeilijk, bestaat namelijk uit 3 files :(
...

dus eigenlijk stond er al javax.xml.parsers.*

anyways dan krijg ik het volgende error :

"MaakAgendaXML.java": cannot resolve symbol: class XmlDocument in class MaakAgendaXML at line 435, column 9
Tja da's logisch, je kunt natuurlijk niet zomaar de XmlDocument class gebruiken als je die niet importeert. Maar ik begrijp je code niet: wat voor object is "document"? Hoe kom je daar aan?
Waarom ga je Sun-specifieke classes gebruiken terwijl je een implementatie-onafhankelijke API moet gebruiken (JAXP)?

Als je wat meer code post, met name hoe je je document object hebt gedefinieerd en hoe je hier aan komt, dan kunnen we beter zien wat je anders moet doen.

Wat is trouwens het doel van je code? Een XML file parsen, of een nieuwe XML file maken (gezien de write() call, gok ik dit laatste)?

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
Ok, ik moet dus een opdracht maken voor school... deze luidt ongeveer : ontwikkel een java-applicatie die, gebruikmakend van de jaxp-api (sax), de inhoud van een xml-file toont.
Om deze opdracht te illustreren (we hebben namelijk nog nooit met sax of dergelijke gewerkt) hebben de leraren ons een vijftal files gegeven.

een .xml (agenda) file met de gegevens, bijbehordende .dtd en een drietal java files (afspraak, maakagendaxml, toonagendametsax) ...

dus toen dacht ik van voordat ik zelf zoiets in mekaar ga prutsen kan ik beter ff deze laten runnen en dan verdiepen in de code, maar tevergeefs zoals bekend draait niet :(

Hierbij nog wat code :

van maakagenda :

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
//import com.sun.xml.tree.XmlDocument;
//import javax.xml.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
//import javax.xml.parsers.DocumentBuilderFactory;
//import javax.xml.parsers.SAXParserFactory;


public class MaakAgendaXML extends Frame implements ActionListener,
WindowListener{}

public static void main(String[] args)
{
MaakAgendaXML maakAgendaXML = new MaakAgendaXML();
maakAgendaXML.setVisible(true);
maakAgendaXML.setSize(790,400);
}

try
{
//((XmlDocument)document).write(new FileOutputStream("nieuwAgenda.xml"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer serializer = transformerFactory.newTransformer();
serializer.transform( new DOMSource( document ),
new StreamResult( new FileOutputStream ( "nieuwAgenda.xml" ) ) );

van toonagendametsax :

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class ToonAgendaMetSAX extends HandlerBase

public static void main(String[] args)
{
ToonAgendaMetSAX agendaDemo = new ToonAgendaMetSAX();
agendaDemo.verwerk();
}

private void verwerk()
{
try
{
//
// Aanmaken SAXParserFactory object. Met behulp van dit object kan
// een SAX parser worden aangemaakt.
//
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
//
// Hier geven we aan dat we straks een validating SAX parser gaan aanmaken.
//
saxFactory.setValidating(true);
//
// Hier wordt de SAX parser aangemaakt.
//
SAXParser saxParser = saxFactory.newSAXParser();
//
// Hier vindt het eigenlijke parsen plaats. Tijdens dit proces worden
// parsing events gegenereeerd die in de betreffende (hergedefinieerde)
// methodes worden verwerkt.
//
saxParser.parse(new File("Agenda.xml"),this);
}

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Okee ik begrijp dat je moet werken op basis van de aangeleverde (voorbeeld?) code, waarin die com.sun.xml..... classes gebruikt worden. Vind ik vreemd, want je gaat dan 'buiten' de JAXP API om gaat (omdat je direct implementatie-specifieke classes gebruikt) maar goed. Even zoeken op Google leverde op dat XmlDocument onderdeel is van de Sun XML parser die te vinden is in "xml.jar". Deze JAR (uit de Sun XML toolkit of whatever) moet dus in je project c.q. in je classpath zitten, anders zal JBuilder je code niet kunnen compileren dan wel runnen...
Op zoek naar de juiste xml.jar dus...
Tip: een JAR file is een ZIP file en je kunt b.v. met WinZip erin kijken.

FireFox - neem het web in eigen hand


Verwijderd

da's denk'k de klasse die documentbuilder voor jou terugkeert (en die de Document interface zal implementeren).
Dus eigenlijk omzeil je het
DocumentBuilderFactory>DocumentBuilder>Document gebeuren, zodat je later nooit een andere implementatie eronder kan schuiven.
Als ik me niet vergis zal xerces-j gebundeld komen met jdk 1.5 en is 1.4 gepaard gegaan met Crimson (geen XSD ondersteuning).

Als ik me niet vergis (heb het nog niet goed gekeken) kan je dus problemen als je je programma later onder 1.5 zal gooien omdat je de interfaces niet gebruikt maar rechstreeks de onderliggende klassen (DocumentImpl.class in xerces-j).

slap me if I'm wrong :)

Verwijderd

Topicstarter
k, ff over de classpath, dat zie ik constant voorbijkomen maar wat wordt er precies mee bedoeld ???

  • Juup
  • Registratie: Februari 2000
  • Niet online
De classpath is net als $PATH onder shell (linux/unix) en %PATH% onder windows, het is een systeemvariabele waar alle directories in staan die doorzocht moeten worden op Java classes als je iets compileert of runt.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Verwijderd schreef op 27 januari 2004 @ 12:49:
k, ff over de classpath, dat zie ik constant voorbijkomen maar wat wordt er precies mee bedoeld ???
:o Lees o.a. eens http://www.kevinboone.com/classpath.html .....

FireFox - neem het web in eigen hand


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Bij JBuilder moet je de xml jars toevoegen aan je project classpath, dan moet het gewoon werken.

Sax zit standaard in Java 1.4.2 hoef je geen webservice developers pack voor te downen. Ik weet niet precies welke JDK de huidige JBuilder gebruikt, maar je kan wel instellen dat je een andere wilt gebruiken.

Kijk hier eens hoe je een SaxParser gebruikt:

http://www.javacommerce.com/tutorial/xmldev/SaxParser1.htm

Waarom moet je perse Sax gebruiken? Moet je grote XML bestanden lezen? Zo niet, kijk dan eens naar JDom (http://www.jdom.org)

[ Voor 26% gewijzigd door Stephan Oudmaijer op 27-01-2004 13:47 ]


Verwijderd

Topicstarter
grappig dat je over JDOM begint aangezien ik daarmee later ook opdrachten moet maken :)

anyways, bedankt voor jullie hulp maar ik heb gewoon de hoop opgegeven en JBuilder 4 bemachtigd. Heb er al teveel tijd ingestoken, en zo maak ik ook nog de leraren blij want die snappen hier tenminste wel iets van....

Dus voor mijn part kan hier een slotje op....

Nogmaals, bedankt voor jullie interesse en inzet jongens !!!

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Werkt de boel wel onder Jbuilder 4 dan?

Hoe dan ook, ik blijf erop hameren dat het direct gebruik van een implementerende class not-done is. Dat merk je nu zelf al direct: in een andere omgeving werkt het niet meer! Als je alleen de JAXP API gebruikt zou er niets aan de hand zijn geweest.

Succes met je opdracht i.i.g. :Y)

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
jap, onder JBuilder 4 doet ie het wel :D
daar kun je namelijk direct JAXP als extra library gebruiken....
Pagina: 1