@Order annotations do not affect XML serialization

I am using Retrofit 2 s SimpleXmlConverterand I am facing a problem when creating a Soap request object, which is basically an element with 4 children, each of which is a different data type.

Here is the result XMLI want to create. The order of the elements must be observed:

 <prf:container>
    <prf:aaa>111111111</prf:aaa>
    <prf:bbb>true</prf:bbb>
    <prf:element>
        <prf:ddd>50</prf:ddd>
        <prf:eee>false</prf:eee>
    </prf:element>
    <prf:ccc>textcontent</prf:ccc>
</prf:container>

Now, here is my Android class, Container.javarepresenting the Soap request object to be serialized:

@Root (name = "prf:container")
@Order(elements={"prf:aaa", "prf:bbb", "prf:element", "prf:ccc"})
public class Container {

    @Element (name = "prf:aaa")
    private int aaa;

    @Element(name = "prf:bbb")
    private boolean bbb;

    @Element (name = "prf:element", required = false)
    private MyElement myElement;

    @Element (name = "prf:ccc", required = false)
    private String ccc;

}

According to the documentation for simple XML documentation:

By default, fields are serialized in the order of declaration.

Android , . , Container, . , SO.

, . Order. Javadoc.

, Order . , - prf:.

prf , Order XML . .

, , 500. XML-.

?

+4
3

, , , , - . , :

XML , , @Order . 'prf', @Order , , .

" ."

, . Java. , xml. , :

@Root (name = "prf:container")
public class Container {

    @Element (name = "prf:aaa")
    private int element1;

    @Element(name = "prf:bbb")
    private boolean element2;

    @Element (name = "prf:element", required = false)
    private MyElement element3;

    @Element (name = "prf:ccc", required = false)
    private String element4;

}

XML- , . , , , , . , :

public void setAaa(String aaa){
    this.element1 = aaa;
}

public String getAaa(){
    return element1;
}

, , xml .

+5

, @Order , . :

@Root (name = "prf:container")
@Order(elements={"prf:container/prf:aaa", "prf:container/prf:bbb", "prf:container/prf:element", "prf:container/prf:ccc"})
public class Container {

    @Element (name = "prf:aaa")
    private int aaa;

    @Element(name = "prf:bbb")
    private boolean bbb;

    @Element (name = "prf:element", required = false)
    private MyElement myElement;

    @Element (name = "prf:ccc", required = false)
    private String ccc;
}
0

SimpleXML . : , XML String. , , , . String, .

@Root(name = "sch:CheckPaymentRequest", strict = true)
public class CheckPaymentData {

@Element(name = "sch:payId")
private String Aaa1;

@Element(name = "sch:fromCurrency")
private String Bbb2;

@Element(name = "sch:fromAmount")
private String Ccc3;
...}
0

All Articles