|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Use of common DFDL schema(shared library) for MQOutput node |
« View previous topic :: View next topic » |
Author |
Message
|
MizukiYamato |
Posted: Tue Aug 04, 2015 5:24 am Post subject: Use of common DFDL schema(shared library) for MQOutput node |
|
|
 Apprentice
Joined: 16 Dec 2009 Posts: 45 Location: Japan
|
Hi,all.
We have to use a DFDL schema in shared library for MQOutput node.
In order to specify the DFDL in the shared library, we wrote as berow:
Code: |
<Application container 'App' (reference to Shared Library 'AplLib')>
(message flow)
MQInput(BLOB) -> Compute(ESQL1) -> MQOutput
(ESQL1)
SET OutputRoot.Properties.MessageSet = '{AppLib}';
SET OutputRoot.DFDL.ns:aplMsg.ns1:comMsg.com = 'c';
SET OutputRoot.DFDL.ns:aplMsg.apl = 'a';
<Shared Library 'AppLib' (reference to Shared Library 'ComLib')>
(DFDL)
aplMsg
<Shared Library 'ComLib'>
(DFDL)
comMsg
|
<case01>
When message flow is witten as
Code: |
<Application container 'App' (reference to Shared Library 'AplLib')>
(message flow)
MQInput(BLOB) -> Compute(ESQL1) -> MQOutput
(ESQL1)
SET OutputRoot.Properties.MessageSet = '{AppLib}';
SET OutputRoot.DFDL.ns:aplMsg.ns1:comMsg.com = 'c';
SET OutputRoot.DFDL.ns:aplMsg.apl = 'a';
<Shared Library 'AppLib' (reference to Shared Library 'ComLib')>
(DFDL)
aplMsg
<Shared Library 'ComLib'>
(DFDL)
comMsg
|
, We can get output message.
<case02>
When message flow is witten as
Code: |
<Application container 'App' (reference to Shared Library 'AplLib')>
(message flow)
MQInput(BLOB) -> Compute(ESQL1) -> SubFlow(On Shared Library2) -> MQOutput
(ESQL1)
SET OutputRoot.Properties.MessageSet = '{AppLib}';
SET OutputRoot.DFDL.ns:aplMsg.ns1:comMsg.com = 'c';
SET OutputRoot.DFDL.ns:aplMsg.apl = 'a';
<Shared Library 'AppLib' (reference to Shared Library 'ComLib')>
(DFDL)
aplMsg
<Shared Library 'ComLib'>
(DFDL)
comMsg
(SubFlow)
Input -> Compute(ESQL2) -> Output
(ESQL2)
SET OutputRoot = InputRoot;
|
, We get Error as below
Code: |
Timestamp:TIMESTAMP '2015-08-04 21:23:31.371836'
ExceptionList:( ['MQROOT' : 0x1839d030]
(0x01000000:Name):RecoverableException = (
(0x03000000:NameValue):File = 'F:\build\slot1\S000_P\src\DataFlowEngine\TemplateNodes\ImbOutputTemplateNode.cpp' (CHARACTER)
(0x03000000:NameValue):Line = 303 (INTEGER)
(0x03000000:NameValue):Function = 'ImbOutputTemplateNode::processMessageAssemblyToFailure' (CHARACTER)
(0x03000000:NameValue):Type = 'ComIbmMQOutputNode' (CHARACTER)
(0x03000000:NameValue):Name = 'aplflow/flow#FCMComposite_1_6' (CHARACTER)
(0x03000000:NameValue):Label = 'aplflow.flow.QL02.OUT' (CHARACTER)
(0x03000000:NameValue):Catalog = 'BIPmsgs' (CHARACTER)
(0x03000000:NameValue):Severity = 3 (INTEGER)
(0x03000000:NameValue):Number = 2230 (INTEGER)
(0x03000000:NameValue):Text = 'Caught exception and rethrowing' (CHARACTER)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 14 (INTEGER)
(0x03000000:NameValue):Text = 'aplflow.flow.QL02.OUT' (CHARACTER)
)
(0x01000000:Name ):ParserException = (
(0x03000000:NameValue):File = 'F:\build\slot1\S000_P\src\MTI\MTIforBroker\DfdlParser\ImbDFDLWriter.cpp' (CHARACTER)
(0x03000000:NameValue):Line = 288 (INTEGER)
(0x03000000:NameValue):Function = 'ImbDFDLWriter::getDFDLSerializer' (CHARACTER)
(0x03000000:NameValue):Type = 'ComIbmMQInputNode' (CHARACTER)
(0x03000000:NameValue):Name = 'aplflow/flow#FCMComposite_1_4' (CHARACTER)
(0x03000000:NameValue):Label = 'aplflow.flow.QL02.IN' (CHARACTER)
(0x03000000:NameValue):Catalog = 'BIPmsgs' (CHARACTER)
(0x03000000:NameValue):Severity = 3 (INTEGER)
(0x03000000:NameValue):Number = 1312 (INTEGER)
(0x03000000:NameValue):Text = 'Shared library specified but can't access shared library' (CHARACTER)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 5 (INTEGER)
(0x03000000:NameValue):Text = 'DFDL' (CHARACTER)
)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 5 (INTEGER)
(0x03000000:NameValue):Text = '{AppLib}' (CHARACTER)
)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 5 (INTEGER)
(0x03000000:NameValue):Text = 'AppLib' (CHARACTER)
)
(0x01000000:Name ):RecoverableException = (
(0x03000000:NameValue):File = 'F:\build\slot1\S000_P\src\DataFlowEngine\MessageServices\ImbDeployedResourceGroup.cpp' (CHARACTER)
(0x03000000:NameValue):Line = 7197 (INTEGER)
(0x03000000:NameValue):Function = 'ImbDeployedResourceGroup::findSharedLibrary' (CHARACTER)
(0x03000000:NameValue):Type = 'Library' (CHARACTER)
(0x03000000:NameValue):Name = '1eeeb96a-8f8b-455e-ae49-9ca2e0a99e75' (CHARACTER)
(0x03000000:NameValue):Label = 'ComLib' (CHARACTER)
(0x03000000:NameValue):Catalog = 'BIPmsgs' (CHARACTER)
(0x03000000:NameValue):Severity = 3 (INTEGER)
(0x03000000:NameValue):Number = 1306 (INTEGER)
(0x03000000:NameValue):Text = 'The required shared library is not explicitly referenced' (CHARACTER)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 5 (INTEGER)
(0x03000000:NameValue):Text = 'ComLib' (CHARACTER)
)
(0x01000000:Name ):Insert = (
(0x03000000:NameValue):Type = 5 (INTEGER)
(0x03000000:NameValue):Text = 'AppLib' (CHARACTER)
)
)
)
)
) ---------------------------------------------------------------------------
|
<case03>
When message flow is witten as
Code: |
<Application container 'App' (reference to Shared Library 'AplLib')>
(message flow)
MQInput(BLOB) -> Compute(ESQL1) -> SubFlow(On Shared Library2) -> Compute(ESQL3) -> MQOutput
(ESQL1)
SET OutputRoot.Properties.MessageSet = '{AppLib}';
SET OutputRoot.DFDL.ns:aplMsg.ns1:comMsg.com = 'c';
SET OutputRoot.DFDL.ns:aplMsg.apl = 'a';
(ESQL3)
SET OutputRoot = InputRoot;
<Shared Library 'AppLib' (reference to Shared Library 'ComLib')>
(DFDL)aplMsg
<Shared Library 'ComLib'>
(DFDL)
comMsg
(SubFlow)
Input -> Compute(ESQL2) -> Output
(ESQL2)
SET OutputRoot = InputRoot;
|
, We get output message.
We want to know:
Whether this way is correct to specify the Shared Library for MQOutput node?
> SET OutputRoot.Properties.MessageSet = '{AppLib}';
And, how to avoid this problem commonly? |
|
Back to top |
|
 |
mqjeff |
Posted: Tue Aug 04, 2015 6:23 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
As far as I know, DFDL identifies the message model to use based on the root element of the message - name and namespace. In the same way that XMLNSC does.
So if you have OutputRoot.DFDL."ABC", then DFDL should find the schema for a message that has ABC as the top element. Without needing to set the MessageSet. |
|
Back to top |
|
 |
MizukiYamato |
Posted: Tue Aug 04, 2015 6:50 am Post subject: |
|
|
 Apprentice
Joined: 16 Dec 2009 Posts: 45 Location: Japan
|
Thank you, MQjeff.
From IIBv10, 'Shared Libraries' specification is added.
For MQInput/MQOutput node, To choosing the Shared Library's DFDL(or WSDL) on Toolkit, we have to set node properties:
Code: |
<e.g. MQInput node properties>
Message Domain = DFDL
Message model = {AppLib}
Message = {http://apl}:aplMsg
|
So, We guess there is a way to set this information by ESQL for MQOutput node. And we think <case01> is succeed.
(But, we cannot find the way about MQOutput in the knowledge center .
(and MQInput/MQGet).) |
|
Back to top |
|
 |
stoney |
Posted: Tue Aug 04, 2015 6:52 am Post subject: |
|
|
Centurion
Joined: 03 Apr 2013 Posts: 140
|
Quote: |
We want to know:
Whether this way is correct to specify the Shared Library for MQOutput node?
> SET OutputRoot.Properties.MessageSet = '{AppLib}';
And, how to avoid this problem commonly? |
I believe that your second example (case 02) should work, but currently doesn't due to what looks like a product defect.
Please could you raise a PMR and ask for it to be routed directly to IIB L3 support (reference this thread).
Quote: |
As far as I know, DFDL identifies the message model to use based on the root element of the message - name and namespace. In the same way that XMLNSC does.
So if you have OutputRoot.DFDL."ABC", then DFDL should find the schema for a message that has ABC as the top element. Without needing to set the MessageSet. |
This is only true if you do not use shared libraries.
When you deploy XML and DFDL schemas, they get compiled into a message model.
You may have seen that message model is the new name of the message set field on the node properties (however, the name in the Properties tree remains as MessageSet).
Each application has a message model that consists of all of the XML and DFDL schemas within that application and its included static libraries.
By leaving the message model field as blank, you are saying that you want to use the applications message model, and that your message is modelled by an XML or DFDL schema in that application.
Before V10, you only needed to fill out the message model field if you wished to specify the name of an MRM message set.
However, in V10, we have introduced shared libraries.
Each shared library has its own message model that consists of all the XML and DFDL schemas within that shared library, as well as all of the schemas in any referenced shared libraries.
If you leave the message model field as blank on a node in a subflow in a shared library, then you are saying that you want to use the message model for that shared library.
If an application wishes to use XML or DFDL schemas from a referenced shared library, then that application must specify "{shlibName}" as the message model field. |
|
Back to top |
|
 |
mqjeff |
Posted: Tue Aug 04, 2015 7:05 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
stoney wrote: |
However, in V10, we have introduced shared libraries. |
I knew that much. I wasn't entirely sure that MizukiYamato was using v10. It's easy enough for "shared library" to have multiple meanings that don't include runtime behavior.
I also haven't worked with v10 or shared libraries. So. But I figured someone smarter than me would be along to provide useful information and correct me if I got it wrong. |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|