Skip to content

Prefix sometimes not working while deserializing #202

@Rex-Sanchez

Description

@Rex-Sanchez

Im having trouble deserializing with prefixes

#[derive(YaSerialize, YaDeserialize, Debug, Default, Clone, Eq, PartialEq)]
pub struct Header {}

#[derive(YaSerialize, YaDeserialize, Debug, Default, Clone, Eq, PartialEq)]
#[yaserde(
  rename = "Envelope",
  namespaces = {
    "soapenv" = "http://schemas.xmlsoap.org/soap/envelope/",
  },
  prefix = "soapenv"
)]
pub struct SoapEnvelope<BODY>
where
    BODY: YaSerialize + YaDeserialize + Default,
{
    #[yaserde(rename = "Header", prefix = "soapenv")]
    pub header: Option<Header>,
    #[yaserde(rename = "Body", prefix = "soapenv")]
    pub body: BODY,
}

#[derive(YaSerialize, YaDeserialize, Debug, Default, Clone, Eq, PartialEq)]
struct Body {
    #[yaserde(prefix = "urn")]
    text: String,
}

serializing the following:

let b = Body {
        text: "hello world".to_string(),
    };
let env = SoapEnvelope {
        body: b,
        ..Default::default()
    };

let s = yaserde::ser::to_string(&env).unwrap();

dbg!(s);

this yields:

"<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope" >
<soapenv:Body>
<urn:text>hello world</urn:text>
</soapenv:Body>
</soapenv:Envelope>

the text elements is serialized with the prefix

 let envelope = yaserde::de::from_str::<SoapEnvelope<Body>>(&s).unwrap();

this now errors with value: "text is a required field of Body"

when the prefix is removed from the text element it will serialize without a problem

"<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope" >
<soapenv:Body>
<text>hello world</text>
</soapenv:Body>
</soapenv:Envelope>

if this xml is deserialized with the urn prefix on the text element. the prefix is ignored and the xml is deserialized without error..
so it seems that the deserializer is ignoring the prefix.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions