Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

BizTalk envelope schema self-closing node

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?

like image 497
mizzle Avatar asked Mar 31 '14 16:03

mizzle


2 Answers

Every so often they seem to change the behaviour of how white space is treated. See Change in Default Whitespace Behavior in BizTalk. I'm not sure if your issue is related or not but worth a look. It doesn't mention BizTalk 2013 however but the setting is there in the Host. If you do this configuration setting it would pay to set up a host specially for it so that it has no impact on other existing applications if any.

Installing one of the following updates results in BizTalk changing default behavior to preserve whitespace within the XML during mapping:

  1. BizTalk 2010 CU1 or above
  2. BizTalk 2009 CU3 or above
  3. BizTalk 2006 R2 SP1 CU4 or above
  4. Hotfix 2492255

In some environments, it may be preferred that the transform remove whitespace. In order to revert to this behavior, the following steps can be taken:

In BizTalk 2010, this is set at the host level:

  1. Open BizTalk Server Administration Console
  2. Expand the BizTalk Group out to Platform Settings > Hosts
  3. Right-click on the host and choose Settings
  4. Check the checkbox next to Legacy whitespace behavior
  5. Click OK
  6. Restart the BizTalk Host Instances for this host

In BizTalk 2009 and 2006 R2 this value is set at a per-machine level:

  1. Open Registry Editor
  2. Locate and then click the following registry subkey on an x86-based computer: • HKEY_LOCAL_MACHINE\Software\Microsoft\BizTalk Server\3.0\Administration For an x64-based computer, click the following registry subkeys: • HKEY_LOCAL_MACHINE\Software\Microsoft\BizTalk Server\3.0\Administration
    • HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\BizTalk Server\3.0\Administration
  3. Right-click and choose DWORD value.
  4. Type LegacyWhitespace for the value name and then double-click on it and set the Value data to 1.
  5. Exit Registry Editor.
  6. Restart the BizTalk Host Instances on this machine
like image 195
Dijkgraaf Avatar answered Oct 29 '22 23:10

Dijkgraaf


I have not seen or verified this behavior but I'll trust you ;).

Don't worry about the performance hit of the Exceptions unless you're getting 10K files per hours or something like that.

To prevent the errors, you'll have to quash or reformat the message in a Pipeline Component.

like image 40
Johns-305 Avatar answered Oct 29 '22 23:10

Johns-305