簡體   English   中英

基於XSD文件的JAXB Java代碼生成

[英]JAXB java code generation base on XSD file

我在基於XSD文件生成Java源代碼時遇到問題。

請注意,XSD文件是基於XML示例生成的。

XML范例

<resposta_importacao>
  <RetornoEnvio xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <num_apolice xmlns="compuletra">202476600001</num_apolice>
    <cod_retorno xmlns="compuletra">651</cod_retorno>
    <mensagem xmlns="compuletra">Erro de layout de dadosobrigat&#195;&#179;rios: cod_cobertura</mensagem>
    <id_validacao xmlns="compuletra">0</id_validacao>
  </RetornoEnvio>
  <RetornoEnvio xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <num_apolice xmlns="compuletra">202476600002</num_apolice>
    <cod_retorno xmlns="compuletra">651</cod_retorno>
    <mensagem xmlns="compuletra">Erro de layout de dados obrigat&#195;&#179;rios: cod_cobertura</mensagem>
    <id_validacao xmlns="compuletra">0</id_validacao>
  </RetornoEnvio>
</resposta_importacao>

生成的XSD

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="RetornoEnvio">
        <xsd:sequence>
            <xsd:element name="num_apolice" type="xsd:integer" xmlns="compuletra" />
            <xsd:element name="cod_retorno" type="xsd:int" xmlns="compuletra" />
            <xsd:element name="mensagem" type="xsd:string" xmlns="compuletra" />
            <xsd:element name="id_validacao" type="xsd:int" xmlns="compuletra" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="resposta_importacao">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" type="RetornoEnvio" name="RetornoEnvio" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

生成的Java類

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RetornoEnvio", propOrder = {
    "numApolice",
    "codRetorno",
    "mensagem",
    "idValidacao"
})
public class RetornoEnvio {

    @XmlElement(name = "num_apolice", required = true)
    protected BigInteger numApolice;
    @XmlElement(name = "cod_retorno")
    protected int codRetorno;
    @XmlElement(required = true)
    protected String mensagem;
    @XmlElement(name = "id_validacao")
    protected int idValidacao;

這里的問題是XML具有

的xmlns = “compuletra”

但是java類沒有。

我知道我可以將namespace屬性插入XmlElement批注中,但是如果代碼生成可以為我插入它,那就更好了。

謝謝

XML模式中元素定義中的xmlns屬性與元素的名稱空間限定無關。 這就是JAXB不對其執行任何操作的原因。

<xsd:element name="cod_retorno" type="xsd:int" xmlns="compuletra" />

好吧,只回答我自己的問題,這樣就不會無解。

在考慮了一點之后,我可以通過最明顯的解決方案來實現這種名稱空間差異。 基本上使用兩個具有兩個不同命名空間的XSD文件,並將它們導入第三個XSD文件。

一切都按預期進行。

謝謝,

蒂亞戈

暫無
暫無

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

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