簡體   English   中英

在 Java 中生成 XML 有效載荷的最有效方法

[英]Most efficient way to generate XML payload in Java

在我的應用程序中,我有一個 REST 端點(/processRequest),我在其中接收多個參數(clientId、channelId、opId)。 然后使用這些參數生成具有以下結構的 XML 有效負載:

<eCommerceDoc>
   <clientId>5</clientId>
   <channelId>2</channelId>
   <opId>opIdString</opId>
</eCommerceDoc>

在代碼中它看起來像這樣:

@RestController public class RequestController {

@RequestMapping(value="/processRequest")
public String processRequest(
        @RequestParam("clientId")int clientId,
        @RequestParam("channelId")int channelId,
        @RequestParam("opId")String opId
        
        ) {

    String xml = 
            "<eCommerceDoc>" 
            +"<clientId>" + clientId + "</clientId>" 
            +"<channelId>" + channelId + "</channelId>" 
            +"<opId>" + opId + "</opId>" 
            +"</eCommerceDoc>";

    sendXMLtoAnotherSystem(xml);

問題在於 memory 的填充速度非常快,我可以看到對於此端點的每個請求,一個新字符串都保存在 memory 中:

在此處輸入圖像描述

在這張圖片中,我們可以看到最后 2 個字符串是被實習的,前 2 個是生成的,因為我觸發了這個示例的 2 個請求。

問題是在進行壓力測試時,即使沒有大負載,這些字符串也會過快地填充堆,導致大量 Minor Gcs,所以我的問題是是否有更好的方法來動態生成 XML(使用 SAX 或某些框架)? 我發現的所有問題都是關於解析的,但在這種情況下,我需要生成實際的 XML 因為它被發送到另一個系統。 謝謝您的幫助。

在您擔心此代碼的性能之前,您應該擔心它的正確性。 目前它是錯誤的:它無法在數據中查找“&”和“<”等特殊字符並按照 XML 的要求對其進行轉義。 我們在 StackOverflow 上收到很多帖子,來自人們詢問如何修復像這樣不小心生成的 XML!

最好使用庫而不是僅通過字符串連接來生成 XML,即使它不會為像這樣的微型 XML 文檔帶來性能改進 - 盡管如果您開始生成更多實質性的 Z3501BB093D363810B67105 文檔,它可能會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM