Xaisoft
Xaisoft

Reputation: 46651

Explanation of CDATA?

I have noticed that if I send decoded XML to an endpoint, it fails with a bad request error, but if I wrap the request in CDATA or encode the characters, it runs fine, so my two questions are:

Why do I need to use CDATA or encode the characters?

What is it about the web service that makes me have to do this?

What is the difference between wrapping the message in CDATA and encoding the characters?

If CDATA is ignored by the parser, doesn't that mean the message your are trying to send won't be processed?

My webservice has web method called Process, but the message that is trying to be sent is MessageB, so do I need to wrap the contents of MessageB in CDATA because the XML Parser won't understand it?

If my web-service contained a web-method called MessageB, would it still be required to be wrapped in CDATA or escaped? My case is that I don't have a web-method MessageB, but something called Process which listens for the MessageB request through a switch statement. I am thinking because I don't have MessageB defined as a web-method, that is the reason why I have to wrap it in CDATA or escape it, but I believe my thinking is wrong?

Upvotes: 0

Views: 2214

Answers (4)

Michael Kay
Michael Kay

Reputation: 163595

If you send the message <a><b/></a> to someone, that's different from the message <a><[CDATA[<b/>]]></a>. Neither is right or wrong, but one might be what the recipient expects while the other is not. It's up to the consumer of the XML to say what kind of messages it understands. There's nothing intrinsic about web services that says anything has to be in CDATA, it's just that this particular web service appears to have been designed this way.

Upvotes: 0

Guffa
Guffa

Reputation: 700730

If you don't wrap or encode the data, it will become part of the main XML document. When the web service tries to parse the document, it will find elements that it can't map to what it expects, and spits it out.

This is not specific to web services, but applies anytime you want to use XML code as a value inside an XML document.

There is little practical difference between using CDATA and encoding the characters. It's just two different ways of embedding special characters in a value in an XML document.

Upvotes: 1

Quentin
Quentin

Reputation: 944320

Some characters have special meaning in XML. For example, < means "Start of tag" and & means "Start of character reference".

CDATA markers indicate that some content is plain text and not markup, so < means "A less than sign" and & means "An ampersand".

Upvotes: 1

SLaks
SLaks

Reputation: 888107

Characters like & and < are not allowed to appear in XML.

The XML standard requires that they either bee escaped with XML entities or that they be wrapped in <![CDATA[ blocks, which tells XML parses to treat the entire block as plain text.

You should be using an XML library on your end that takes care of this for you; you should never build XML by hand.

Upvotes: 1

Related Questions