JAXB解析xml時忽略名稱空間的方法

cyzero發表於2012-12-24

        用JAXB解析xml並轉換為實體類時,如果xml帶有名稱空間,尤其是整個xml都使用匿名名稱空間時,則需要在實體類的每個屬性的註解中新增namespace引數,不僅使程式碼變得惡劣,而且不靈活(名稱空間改變則所有實體類註解也跟著對應修改)。

        解決方法可能有很多,如果xml的元素都使用匿名名稱空間,可以考慮在JAXB轉換前將xml名稱空間忽略。


public static ConnectivityDeliveryResponse unmarshall(String response) throws JAXBException, ParserConfigurationException, SAXException {
         if(txLogger.isDebugEnabled()) {
             txLogger.debug(response);
         }
         JAXBContext jaxbContext = JAXBContext.newInstance(CONNECTIVITY_PACKAGE);
         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
         StringReader reader = new StringReader(response);
         SAXParserFactory sax = SAXParserFactory.newInstance();
         sax.setNamespaceAware(false);
         XMLReader xmlReader = sax.newSAXParser().getXMLReader();
         Source source = new SAXSource(xmlReader, new InputSource(reader));
        
         ConnectivityDeliveryResponse reponse = (ConnectivityDeliveryResponse)unmarshaller.unmarshal(source);

         return reponse ;
     }


相關文章