5

我正在使用 Mule 3 使用 JDBC 查询数据库,并且我想根据 .properties 文件的输入来修改查询。我的xml中有这个...

<context:property-placeholder location="C:\path\to\file\settings.properties" />

得到以下异常...

Exception in thread "main" org.mule.module.launcher.DeploymentInitException: SAXParseException: The prefix "context" for element "context:property-placeholder" is not bound.

我需要包含一些特殊的 .xsd 文件吗?

4

5 回答 5

7

将 xmlns 命名空间前缀和模式位置添加到您的 Mule 配置 mule 元素标记。

字首:

xmlns:context="http://www.springframework.org/schema/context"

架构位置:

http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd

它应该如下所示。

例如:

<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:spring="http://www.springframework.org/schema/beans"      
    xmlns:http="http://www.mulesoft.org/schema/mule/http" 
    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="
        http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.3/mule.xsd
        http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.3/mule-http.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd      
        ">


<context:property-placeholder location="C:/path/to/file/settings.properties" />


  ...........  Other stuff



</mule>
于 2013-06-25T19:30:12.870 回答
4

我遇到了同样的问题并修复了它。这就是我所做的。

  1. 将所有 .properties 保留在 src/main/resources 下
  2. < context:property-placeholder location="file.dev.properties,file.stage.properties" />
  3. 将所有文件保存在类路径中是一个挑战。所以转到您的项目文件夹,在文本键盘中打开 .classpath 文件并添加以下行

    < classpathentry 
      including="file.dev.properties|file.prod.properties|file.stage.properties"
      kind="src" path="src/main/resources"/ >
    
  4. 保存,刷新,它的工作原理。
于 2013-10-07T19:19:50.293 回答
0

其他答案涵盖了命名空间问题,但我要补充一点,我发现 context:property-placeholder 标签需要位于“spring:beans”标签之间。这是一个假设属性文件设置名为“jmsBrokerURL”的属性的示例:

<mule xmlns="http://www.mulesoft.org/schema/mule/core" version="EE-3.4.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:spring="http://www.springframework.org/schema/beans"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
          http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
          http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <spring:beans>
        <context:property-placeholder location="C:/path/to/file/settings.properties" />
        <spring:bean name="myConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <spring:property name="brokerURL" value="${jmsBrokerURL}" />
        </spring:bean>
    </spring:beans>

    <flow name="MyFlow" doc:name="MyFlow">
        <!-- Flow configuration here. -->
    </flow>

</mule>

另一种读取属性的方法(也是我更喜欢的方法)是使用 Spring 的“util:properties”标签将属性读取到 Properties bean 中,然后使用 Spring EL 引用它。在这种情况下请注意,您使用 Spring EL“#{}”表示法而不是“${}”来引用对象及其变量。这是针对该技术修改的上述示例:

<mule xmlns="http://www.mulesoft.org/schema/mule/core" version="EE-3.4.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:spring="http://www.springframework.org/schema/beans"
      xmlns:util="http://www.springframework.org/schema/util"
      xsi:schemaLocation="
          http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">

    <spring:beans>
        <util:properties id="myConfig"  location="C:/path/to/file/settings.properties" />
        <spring:bean name="myConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
            <spring:property name="brokerURL" value="#{myConfig.jmsBrokerURL}" /> <!-- Note the pound (hash) symbol. -->
        </spring:bean>
    </spring:beans>

    <flow name="MyFlow" doc:name="MyFlow">
        <!-- Flow configuration here. -->
    </flow>

</mule>

我喜欢后一种方法,主要是因为我可以更轻松地处理多个属性文件并包含应用程序上下文文件。在处理多个属性文件或将应用程序上下文文件包含在另一个文件中时,context:property-placeholder 标记可能会出现问题。

于 2013-06-25T19:59:13.887 回答
0

在 xsi:schemaLocation 中使用以下 xsd --

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd

于 2013-06-25T18:21:38.800 回答
0

只需将属性文件放在资源文件夹下,然后

在属性占位符中使用这个“classpath:settings.properties”,它将起作用......

于 2013-07-07T10:06:11.490 回答