I have created a BizTalk receive location which has a subscribing send port which accepts an enveloped message and splits into separate messages just using the XML Receive Pipeline.
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace">
<MyData>ABC</MyData>
<MyData>DEF</MyData>
<MyData>GHI</MyData>
</MyEnvelope>
Gets saved as
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">ABC</MyData>
,
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">DEF</MyData>
and
<?xml version="1.0" encoding="utf-8"?>
<MyData xmlns="MyNameSpace">GHI</MyData>
which is great.
However, when there are no elements in the message the service sends the message with self-closing and empty envelope:
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"/>
And I get the error message
Source: "XML disassembler" Receive Port: "InLocation" URI: "c:\MyLocation*.xml" Reason: Unexpected event ("eos") in state "processing_header".
If I manually create a message which is not self-closing:
<?xml version="1.0" encoding="utf-8"?>
<MyEnvelope xmlns="MyNameSpace"></MyEnvelope>
I get no error. My processing is unaffected by the errors but it must have some performance impact and litters the Group Hub suspended instances view.
It seems that BizTalk interprets self-closing nodes as whitespace instead of null. This seems linked to my issues with attempting to call a service with no parameters where I need to send a self-closing node but BizTalk just sends nothing.
It must be a common issue to handle an envelope with no content. How can I configure my application to pick up and ignore these messages with self-closing envelope nodes?