解析骡子配置中的元素列表

时间:2011-08-02 20:37:15

标签: java xml spring mule connector

我正在构建一个新的Mule传输,以便与DDS进行通信。为了保持QoS一致,连接器需要“流量控制器”。可能存在零个或多个流量控制器。

连接器的XSD已经过修改,允许以下内容:

<connector>
  <flowController attr="1">
  <flowController attr="2">
</connector>

使用ChildDefinitionParser很容易读取单个flowController,但这还不够。

ChildListEntryDefinitionParser返回一个包含正确元素数的列表,但每个元素都为null。

除非为扩展提供所有属性的setter,否则ChildListDefinitionParser不起作用。这样做之后,我仍然只得到第一个条目。

源和文档并没有非常有用。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我有一个类似的用例。 ChildListEntryDefinitionParser工作正常(使用Mule ESB 3.4测试)。列表元素将正确设置。

<强>骡-config.xml中

<your:xpath-resolver-transformer>
   <your:expression xpath="//order/status" />
   <your:expression xpath="//order/type" />
</your:xpath-resolver-transformer>

<强> YourNamespaceHandler

MessageProcessorDefinitionParser xpathResolver = new MessageProcessorDefinitionParser(XPathResolver.class);
xpathResolver.registerPreProcessor(new CheckExclusiveAttributesAndChildren(new String[]
{ "xpath" }, new String[]
{ "expression" }));
registerBeanDefinitionParser("expression", new ChildListEntryDefinitionParser("xpathExpression", "xpath"));
registerBeanDefinitionParser("xpath-resolver-transformer", xpathResolver);

Mule XSD(mule-your.xsd)

<xsd:element name="xpath-resolver-transformer" type="xpathResolverTransformerType" substitutionGroup="mule:abstract-transformer" />     
<xsd:complexType name="xpathResolverTransformerType">
    <xsd:complexContent>
        <xsd:extension base="mule:abstractTransformerType">
            <xsd:sequence>
                <xsd:element name="expression" minOccurs="0" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:attribute name="xpath" type="xsd:string" use="required"></xsd:attribute>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>