Discussion:
Custom flat file disassembler
(too old to reply)
BambooWave
2006-06-08 12:58:02 UTC
Permalink
Hi,

In BizTalk 2006, I've created a custom pipeline disassembly component,
which takes a Zip file containing N files, decompresses the files into N
streams and calls the flat file disassembler for each file using a different
schema.

i.e the zip file contains 7 different pipe separated messages.

The decompression works fine, I end up with N files however I'm having
trouble getting the flat file disassembler to work with the new messages I
have created.

In
public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)
I create a new FFDASM object for each file (is this right ?) and call
zipMessage.disassembler.Disassemble(pContext, outMsg);


My problem is in the GetNext() function, the call to disassembler.GetNext()
fails with an excpetion and the event log shows

"The Disassembler cannot retrieve the document specification using this name:
"http://test_FF#test".

The schema is in the BizTalk application and in the GAC

I have created other custom pipeline components which work with a single
stream and a flat file disasembler,

I’ve used Reflector and looked at the BizTalk code, my objects seem
configured ok, but I’m unable to trace exactly where my code fails inside
BizTalk

I'm missing some configuration of my objects I believe. Any clues ?

Thanks.
BambooWave
2006-06-08 13:21:02 UTC
Permalink
The exception thrown is

"C0C01301: Finding the document specification by name failed. Verify the
schema deployed properly."

Looking at disassembler.DocumentSpecName I see
that all the fields are populated except the Assembly name.
Should this assembly be set ?
Post by BambooWave
Hi,
In BizTalk 2006, I've created a custom pipeline disassembly component,
which takes a Zip file containing N files, decompresses the files into N
streams and calls the flat file disassembler for each file using a different
schema.
i.e the zip file contains 7 different pipe separated messages.
The decompression works fine, I end up with N files however I'm having
trouble getting the flat file disassembler to work with the new messages I
have created.
In
public void Disassemble(IPipelineContext pContext, IBaseMessage pInMsg)
I create a new FFDASM object for each file (is this right ?) and call
zipMessage.disassembler.Disassemble(pContext, outMsg);
My problem is in the GetNext() function, the call to disassembler.GetNext()
fails with an excpetion and the event log shows
"http://test_FF#test".
The schema is in the BizTalk application and in the GAC
I have created other custom pipeline components which work with a single
stream and a flat file disasembler,
I’ve used Reflector and looked at the BizTalk code, my objects seem
configured ok, but I’m unable to trace exactly where my code fails inside
BizTalk
I'm missing some configuration of my objects I believe. Any clues ?
Thanks.
BambooWave
2006-06-19 16:30:02 UTC
Permalink
Here is our solution. The only thing we were missing was initialising the
SchemaWithNone correctly. Our string was badly formed; hence the BizTalk
pipeline could not locate the schema or assembly.

The type Microsoft.BizTalk.Component.Utilities.SchemaWithNone is based on
the type Microsoft.BizTalk.Component.Utilities.Schema. FFDasm requires the
property DocumentSpecName to be set to a valid SchemaWithNone object.

Using reflector we discovered that the constructor for Schema expects a
string containing a comma, it splits this string into the docSpecName and
assemblyName


Project.Something.Schemas.thing_FF, Project.Something.Schemas.thing,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=27459cdd93035556

We hope somebody else finds this useful.

Loading...