hi zusammen,
ich möchte gerne die jaxb-methode "unmarshal" in einer eigenen methode aufrufen und meiner methode dazu alle möglichen objekttypen übergeben können.
momentan kann CreatePDF nur InputStream entgegennehmen um diesen an unmarshal weiter zu geben, unmarshal selbst ist jedoch überladen und kann eigentlich auch URL, File oder StringBuffer verwenden... und genau diese freiheit möchte ich beim aufruf von CreatePDF auch haben.
muss ich CreatePDF für jeden von unmarshal unterstützten eingabetyp auch überladen oder könnte ich einen typ Object übergeben und diesen *irgendwie* auf seinen typ casten?
ich möchte gerne die jaxb-methode "unmarshal" in einer eigenen methode aufrufen und meiner methode dazu alle möglichen objekttypen übergeben können.
momentan kann CreatePDF nur InputStream entgegennehmen um diesen an unmarshal weiter zu geben, unmarshal selbst ist jedoch überladen und kann eigentlich auch URL, File oder StringBuffer verwenden... und genau diese freiheit möchte ich beim aufruf von CreatePDF auch haben.
muss ich CreatePDF für jeden von unmarshal unterstützten eingabetyp auch überladen oder könnte ich einen typ Object übergeben und diesen *irgendwie* auf seinen typ casten?
Java:
package agn.forms.pdf.createpdf;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import agn.forms.pdf.createpdf.technische_nachbetreuung.v1.*;
import java.io.InputStream;
import java.io.OutputStream;
public class CreatePDF {
private Object xmlObjects;
public CreatePDF(InputStream _XMLInputStream, OutputStream _PDFOutputStream) {
try {
JAXBContext jc;
jc = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller um = jc.createUnmarshaller();
xmlObjects = um.unmarshal(_XMLInputStream);
// test ob objekte richtig eingelesen werden
// Marshaller m = jc.createMarshaller();
// m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// m.marshal(xmlObjects, System.out);
// test ende
CreatePDF_v1 createPDF_v1 = new CreatePDF_v1(xmlObjects, _PDFOutputStream);
} catch (JAXBException ex) {
Logger.getLogger(CreatePDF.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* bequeme main methode um createpdf *in diesem projekt* zu testen
* @param args
*/
public static void main(String[] args) {
try {
CreatePDF createPDF = new CreatePDF(
new FileInputStream(System.getProperty("user.home") + "/v1.xml"),
new FileOutputStream(System.getProperty("user.home") + "/test.pdf"));
} catch (FileNotFoundException ex) {
Logger.getLogger(CreatePDF.class.getName()).log(Level.SEVERE, null, ex);
}
Process p;
try {
p = Runtime.getRuntime().exec("/opt/bin/acroread "+System.getProperty("user.home") + "/test.pdf");
p.waitFor();
} catch (Exception ex) {
Logger.getLogger(CreatePDF.class.getName()).log(Level.SEVERE, null, ex);
}
}
}