使用Datastage 9.1中的MQ Stage读取XML文件

时间:2015-12-15 17:48:40

标签: xml mq datastage

我正在尝试使用DS中的MQ阶段读取XML文件。 设计 - MQ - > XML Stage - > Seq文件

使用的XML文件 -

<?xml version="1.0" encoding="UTF-8"?> 
<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note>

遵循流程 -

1)使用XML文件加载MQ 2)仅在DS中的MQ阶段定义了包含此XML的1个输出列 3)在XML Assembly中,使用&#39; String Set&#39;选项 4)在Document Root中提供XSD文件 5)选择严格验证选项 6)将源点击到目标

但它给我带来了以下错误 -

XML_1,0: 2015-12-14 09:43:40,801 Error [XML_Parser] [] Unable to parse the XML stream: <?xml version='1.0' encoding='UTF-8'?> 
2015-12-14 09:43:40,821 Error [XML_Parser] [] com.ibm.e2.xml.exceptions.XMLRuntimeException: CDIER0007E: An error occurred while reading input: language=XML, cause=javax.xml.stream.XMLStreamException: The root element is required in a well-formed document., systemId=null, line number=2, column number=1, step=XML_Parser, source=<?xml version='1.0' encoding='UTF-8'?>. 
XMLRuntimeException$FactoryImpl.errorWhenReadingXML() 13 
RuntimeNodeBase.consumeEvent() 752 
RuntimeNodeBase.consumeEventWithLogging() 2318 
RuntimeNodeBase.consumeAction() 482 
RuntimeNodeBase.execute() 339 
NodeExecutor.processOneEvent() 163 
XMLReaderUtils.runExecutorStreaming() 201 
XMLInputStreamingHandler.itemEnd() 44 
AbstractTraverser.handleEventForHandler() 663 
AbstractTraverser.handleEvent() 534 
ItemTraverser.handleCurrentState() 91 
AbstractTraverser.continueTraversal() 475 
AbstractTraverser.startTraversal() 463 
ItemTraverser.itemBegin() 122 
AbstractTraverser.handleEventForHandler() 668 
AbstractTraverser.handleEvent() 534 
VectorTraverser.handleCurrentState() 133 
AbstractTraverser.continueTraversal() 475 
AbstractTraverser.startTraversal() 463 
AbstractRuntimeFrame.runTraverser() 1426 
AbstractRuntimeFrame.runTraverser() 1409 
UserRuntimeOperatorAdapter.runTraverser() 138 
AbstractRuntimeOperator.runTraverser() 199 
AbstractXMLProviderRuntime.process() 254 
UserRuntimeOperatorFrame.process() 93 
OperatorController.callOperatorProcess() 314 
OperatorController.runOperator() 264 
OperatorController.doReadyToExecute() 168 
OperatorController.runDataStateTransistion() 123 
OperatorController.runTransitions() 85 
OperatorController.runOperatorStep() 63 
OperatorTask.runFrame() 86 
OperatorTask.execute() 40 
AbstractTask.run() 27 
ThreadPoolExecutor$Worker.runTask() 886 
ThreadPoolExecutor$Worker.run() 908 
Thread.run() 736  

知道这是什么以及我们如何解决这个问题?

我尝试使用External Source Stage读取相同的XML文件,并且文件已正确解析并且数据已加载到Seq文件中。 因此,这意味着XML文件是正确的,并且它符合XSD。

但是它不能与MQ一起工作..有什么建议吗?

1 个答案:

答案 0 :(得分:0)

真实文件是否如上所示? (文件中有多行)因为错误消息读起来不像文件中的CRLF(回车换行)或LF(换行)。尝试删除CRLF(或LF)。

<?xml version="1.0" encoding="UTF-8"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

或者可能是它想要第2行中的'doctype'。 即。

<!DOCTYPE note>