WSO2 CEP 格式化程序 "The processing instruction target matching "[xX][mM][lL]“不允许”

WSO2 CEP Formatter "The processing instruction target matching "[xX][mM][lL]" is not allowed"

是否可以添加类似的内容:

<?xml version="1.0" encoding="UTF-8"?>

到 WSO2 XML 内联 部分中的格式化程序? 我看到标签总是添加在标签 "eventFormatter" 之前,但是当我通过 CEP 传递事件并在我的队列中得到答案时,输出 XML 没有没有这个标签。

如果我想在 inline 部分添加它,我会收到此错误:

Failed to update event formatter, Exception: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,10] Message: The processing instruction target matching "[xX][mM][lL]" is not allowed.

//更新

我的格式化程序看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<eventFormatter name="Formatter_XML_Out" statistics="disable"
  trace="disable" xmlns="http://wso2.org/carbon/eventformatter">
    <from streamName="Test_stream_out_xml" version="1.0.0"/>
    <mapping customMapping="enable" type="xml">
        <inline>
            <Event>
                <Name>{{Name}}</Name>
                <Surname>{{Surname}}</Surname>
            </Event>
        </inline>
    </mapping>
    <to eventAdaptorName="ActiveMQ_Output" eventAdaptorType="jms">
        <property name="transport.jms.Destination">myQueue</property>
    </to>
</eventFormatter>

我在输出消息中得到这个:

<Event>
    <Name>XXXX</Name>
    <Surname>YYYYY</Surname>
</Event>

为什么这个标签 <?xml version="1.0" encoding="UTF-8"?> 不见了?

没有。 ?xml text declaration 必须出现在文档的开头:

The text declaration MUST NOT appear at any position other than the beginning of an external parsed entity.

这是由 XML 解析器强制执行的。

根据您的编辑,您似乎希望输出文档包含声明。控制它的唯一方法是通过外部 eventFormatter 配置。 documentation doesn't show a way to do this.

然而,没有必要 - UTF-8 在没有声明的情况下已经是默认值,因此可以省略。

似乎 WSO2CEP 3.x 在使用带有 <?xml version="1.0" encoding="UTF-8"?> 标签的 XML 映射时无法格式化消息。

解决方法是使用文本映射,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<eventFormatter name="Formatter_XML_Out" statistics="disable"
  trace="disable" xmlns="http://wso2.org/carbon/eventformatter">
    <from streamName="Test_stream_out_xml" version="1.0.0"/>
    <mapping customMapping="enable" type="text">
        <inline>
          <![CDATA[
            <?xml version="1.0" encoding="UTF-8"?>
            <Event>
                <Name>{{Name}}</Name>
                <Surname>{{Surname}}</Surname>
            </Event>
          ]]>
        </inline>
    </mapping>
    <to eventAdaptorName="ActiveMQ_Output" eventAdaptorType="jms">
        <property name="transport.jms.Destination">myQueue</property>
    </to>
</eventFormatter>

在这里使用type="text"