簡體   English   中英

在JAXB中對生成的xml強制使用xsi:type屬性

[英]Forcing xsi:type attribute on generated xml in JAXB

我需要在字段上強制生成xsi:type,因為xml將通過xsl轉換表反序列化為另一個對象。 數據類型是用XSD架構定義的,任何人都可以使用jaxb生成類並將數據發送到端點,但是端點是完全動態的,並且使用特殊的DTO,其中包含公用數據字段和一些將保存動態數據字段的對象映射。

例如,這就是我得到的:

<?xml version="1.0" encoding="UTF-8"?>
<myp:documento xmlns:myp="mypns" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <myp:sys_name>name</myp:sys_name>
  <myp:sys_path>path</myp:sys_path>
  <myp:sys_type>type</myp:sys_type>
  <myp:dyn_date_modified>2015-09-30T11:13:10.810+02:00</myp:dyn_date_modified>
</myp:documento>

這就是我需要的:

<?xml version="1.0" encoding="UTF-8"?>
<myp:documento xmlns:myp="mypns" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <myp:sys_name>name</myp:sys_name>
  <myp:sys_path>path</myp:sys_path>
  <myp:sys_type>type</myp:sys_type>
  <myp:dyn_date_modified xsi:type="xs:dateTime">2015-09-30T11:13:10.810+02:00</myp:dyn_date_modified>
</myp:documento>

因為屬性dyn_date_modified將反序列化到動態Object映射中。

讓我知道您是否需要更多細節。

經過另一天的研究,似乎JAXB不提供此功能,因為它應該使用始終相同的對象來編組和解組xml。 在我的情況下,我需要從Xjc通過XSD生成的類中封送xml,然后使用帶注釋的DTO進行封送,該DTO包含許多固定字段和三個動態字段映射(以def_,dyn_和mul_開頭)。 我通過添加xsl預處理階段解決了我的要求,該階段將前綴字段映射到maps並根據名稱前綴附加xsi:type。

<myp:documento xmlns:myp="mypns" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <myp:sys_uuid>2ca56a7e9ca62dcd2d2ad8eeca100fd24</myp:sys_uuid>
  <myp:sys_name>2127a09acda7bf6acf26257bb80372f90</myp:sys_name>
  <myp:dyn_date_modified>2015-09-30T11:13:10.810+02:00</myp:dyn_date_modified>
</myp:documento>

轉換為:

<myp:documento xmlns:myp="mypns" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <myp:sys_uuid>uuid</myp:sys_uuid>
  <myp:sys_name>name</myp:sys_name>
  <myp:dynFields>
    <entry>
        <key>dyn_date_modified</key>
        <value xsi:type="xs:dateTime">2015-09-30T11:13:10.810+02:00</value>
    </entry>
  </myp:dynFields>
</myp:documento>

然后正確解組。

暫無
暫無

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

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