2010-10-11 51 views
2

當前使用Java的內置XML DOM庫進行創建/解析。醜陋的,即使有很多輔助類和方法,性能和內存使用也很糟糕。用於生成/消費REST服務的最佳Java XML解析器

在生產和使用REST服務方面,處理XML的最佳Java工具或框架是什麼?

我使用的服務使用JAXB。我能夠使用他們的課程,並且方便,便捷地使用他們的服務。這很漂亮,但在大多數情況下JAXB仍然很痛苦。所以我研究了StAX和VTD-XML。 StAX在大約4年後還沒有更新。 VTD-XML是Java中XML處理的最新技術?

回答

6

您應該能夠編寫JAXB註釋類,Jersey支持這些開箱即用的功能,並自動爲您解析它們。它可能不是最高性能的解決方案,但它是一個非常好的清潔應用程序。

除非你能證明你有性能問題(並且可以跟蹤它到JAXB),否則我不會擔心編組/解開開銷。

編輯:
JAXB帶註釋的類可能非常簡單。建模XML像;

<customer> 
    <name>Fred</name> 
    <email>[email protected]</email> 
    <id>12345</id> 
</customer> 

就這麼簡單;

@XmlRootElement 
public class Customer 
{ 
    private String name; 
    private String email; 
    private long id; 

    public Customer() 
    { 
    } 

    //getters and setters 
} 

然後你可以寫這樣的服務;

@GET 
@Produces(MediaType.APPLICATION_XML) 
@Path("/getCustomer") 
public Customer getCustomer() 
{ 
    Customer c = new Customer(); 
    c.setName("Fred"); 
    c.setEmail("[email protected]"); 
    c.setId(12345); 
    return c; 
} 

..和客戶端是這樣的;

Client client = Client.create(); 
WebResource resource = client.resource("myHost/getCustomer"); 
Customer fred = resource.get(Customer.class): 

精美簡單。

+0

與JAXB的問題是不只是提高性能。事實上,我並不十分關心表現。其中一個問題是,我需要消耗許多簡單的服務,其中XML有點不同,這取決於我所做的REST調用。有了JAXB,我必須每次都創建一個全新的類層次結構來處理這個問題。這是非常醜陋和非常低效的編碼時間明智的。也許我只需要更好地學習JAXB ...對於生成服務JAXB也會讓我生活變得艱難,因爲我想根據誰被訪問以及如何訪問我想暴露的變化。 – 2010-10-11 12:28:10

+1

如果您在服務之間的XML中有很多不同的變體,那麼無論是使用JAXB註釋類還是手動分析XML,您都必須以任何方式完成工作。 – Qwerky 2010-10-11 12:50:15

+0

除非您的所有元素都用「required = true」註釋進行了修飾,否則您可以省略那些您不想生成的元素,JAXB會高興地解析缺少可選元素的XML。它們的值將簡單地爲空。 – 2013-03-08 21:10:54

1

StAX由於不需要長時間沒有更新。 XML格式沒有改變,StAX是一種相當簡單的格式映射到API。隨着低級XML API的推出,使用起來非常簡單,我相信它非常高效。然而,它是一個非常低級的API。它(非常粗略)是用於編寫二進制數據的DataInputStream和DataOutputSteam的XML等價物;使用它編寫的代碼必須在元素,屬性等的概念層面編寫。我沒有使用過VTD-XML,但看起來差不多。

如果您想使用更高級別的內容,那麼請查看一些XML序列化工具,例如XStream - 您可以編寫一些類,通過適當的轉換定製,可以從您的傳入中讀取數據?那麼你可以使用相同的類來進行細微差別的輸入,而忽略的字段會被忽略嗎?事實上,您可以使用JAXB中的'缺少XML元素被忽略'的方法嗎?我不知道模式有多嚴格,或者你的投入是否可以這樣處理。我非常喜歡在黑暗中拍攝。

+0

與vtd-xml相比,stax令人難以置信地更加難以使用...... – 2010-12-21 01:29:08

+0

@ vtd-xml-author:不知何故,我明白你可能會有點偏頗:)。但是當然,我聽說過有關VTD-XML的好處。 – 2010-12-21 11:55:41