Nov 30, 2008

Αντικαθιστώντας τον Oracle XML Parser με τον Xerces ή τον Xalan στον Oracle Application Server

Ένα από τα πιο ενδιαφέροντα έργα στα οποία έχω συμμετάσχει, είναι αυτό της ψηφιακής υπογραφής εγγράφων με τη βοήθεια των καρτών του ΣΥΖΕΥΞΙΣ (http://www.syzefxis.gov.gr) Με τη βοήθεια ενός κατάλληλου API διασύνδεσης με τις συσκευές και την υλοποίηση του προτύπου XML Signatures από το open source project του Apache (http://santuario.apache.org) είναι εφικτή η πιστοποιημένη ανταλλαγή εγγράφων. Η βιβλιοθήκη του Apache XML Security στηρίζεται στις βιβλιοθήκες του Xerces και του Xalan, γεγονός που οδήγησε σε παράξενες συμπεριφορές όταν η εφαρμογή γινόταν deploy στον Oracle Application Server, καθώς ο default XML parser είναι αυτός της Oracle. Πιο συγκεκριμένα, η επιβεβαίωση της υπογραφής αποτύγχανε πάντοτε στο περιβάλλον του OAS, ενώ το standalone testing μου επιβεβαίωνε την ορθότητα.

Προκειμένου να ξεπεραστεί αυτό το πρόβλημα, υπάρχει ένα άρθρο (http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-swapxmlparser/doc/readme.html) που προτείνει την αλλαγή των βιβλιοθηκών σε μια εφαρμογή που βρίσκεται στον OAS. Ένας πιο σύντομος τρόπος, ειδικά αν πρόκειται να χρησιμοποιήσουμε και τον Oracle XML parser αργότερα σε κάποια σημεία της εφαρμογής μας, είναι προτού να ξεκινήσουμε την εργασία μας με Xalan και Xerces να ορίσουμε προγραμματιστικά τις μεταβλητές συστήματος κατάλληλα, ως εξής:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl");
Αφότου εκτελέσουμε το τμήμα του κώδικα που μας ενδιαφέρει, μπορούμε να επαναφέρουμε τις τιμές των system properties στην αρχική τους τιμή.

No comments: