繁体   English   中英

MULE中的Oracle数据源配置

[英]Oracle Data source configuration in MULE

我已经使用apikit-with-munit示例项目创建了一个项目。

我对项目进行了修改,现在有1个名为api.xml的应用程序文件和1个api-test-suite.xml文件。 我试图在测试中添加数据库引用,并且在仅从Maven启动测试时,在启动测试遇到以下错误

从Anypoint Studio启动测试时,“我的MUnit”工作正常。

我不知道我的配置有什么问题...我怀疑我的问题与我的命名空间有关。有人可以指出我做错了什么吗?

Failed to execute goal com.mulesoft.munit.tools:munit-maven-plugin:1.1.0:test (test) on project testing-apikit-with-munit_1.3.3-1: 
Execution test of goal com.mulesoft.munit.tools:munit-maven-plugin:1.1.0:test failed: org.mule.api.config.ConfigurationException: 
Configuration problem: Failed to import bean definitions from URL location [classpath:api.xml]

[错误]令人反感的资源:URL [文件:/ C:/Workspaces/Coverage1/testing-apikit-with-munit_1.3.3-1/target/test-classes/api-test-suite.xml]; 嵌套的异常是org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源[api.xml]的XML文档中的第40行无效; 嵌套的异常是org.xml.sax.SAXParseException; lineNumber:40; columnNumber:101; cvc-complex-type.2.4.a:发现无效的内容,从元素'db:oracle-config'开始。

 One of '{"http://www.springframework.org/schema/beans":beans, "http://www.springframework.org/schema/beans":bean,   "http://www.springframework.org/schema/context":property-placeholder, 
"http://www.springframework.org/schema/beans":ref, "http://www.mulesoft.org/schema/mule/core":global-property, "http://www.mulesoft.org/schema/mule/core":configuration, 
"http://www.mulesoft.org/schema/mule/core":notifications, "http://www.mulesoft.org/schema/mule/core":abstract-extension, 
"http://www.mulesoft.org/schema/mule/core":abstract-shared-extension, 
"http://www.mulesoft.org/schema/mule/core":abstract-mixed-content-extension, 
"http://www.mulesoft.org/schema/mule/core":abstract-agent, "http://www.mulesoft.org/schema/mule/core":abstract-security-manager, 
"http://www.mulesoft.org/schema/mule/core":abstract-transaction-manager, "http://www.mulesoft.org/schema/mule/core":abstract-shared-transaction-manager, 
"http://www.mulesoft.org/schema/mule/core":abstract-connector, "http://www.mulesoft.org/schema/mule/core":abstract-shared-connector, 
"http://www.mulesoft.org/schema/mule/core":abstract-global-endpoint, "http://www.mulesoft.org/schema/mule/core":abstract-exception-strategy, 
"http://www.mulesoft.org/schema/mule/core":abstract-flow-construct, "http://www.mulesoft.org/schema/mule/core":flow, "http://www.mulesoft.org/schema/mule/core":sub-flow, 
"http://www.mulesoft.org/schema/mule/core":abstract-model, "http://www.mulesoft.org/schema/mule/core":abstract-interceptor-stack, "http://www.mulesoft.org/schema/mule/core":abstract-filter, 
"http://www.mulesoft.org/schema/mule/core":abstract-transformer, "http://www.mulesoft.org/schema/mule/core":processor-chain, "http://www.mulesoft.org/schema/mule/core":custom-processor, 
"http://www.mulesoft.org/schema/mule/core":abstract-empty-processor, "http://www.mulesoft.org/schema/mule/core":invoke, 
"http://www.mulesoft.org/schema/mule/core":set-payload, "http://www.mulesoft.org/schema/mule/core":abstract-global-intercepting-message-processor, 
"http://www.mulesoft.org/schema/mule/core":custom-queue-store, "http://www.mulesoft.org/schema/mule/core":abstract-processing-strategy}' is expected. (org.mule.api.lifecycle.InitialisationException)

我的api.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:db="http://www.mulesoft.org/schema/mule/db"
xmlns:vm="http://www.mulesoft.org/schema/mule/vm"
xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw"
xmlns="http://www.mulesoft.org/schema/mule/core" 
xmlns:apikit="http://www.mulesoft.org/schema/mule/apikit" 
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
xmlns:http="http://www.mulesoft.org/schema/mule/http" 
xmlns:spring="http://www.springframework.org/schema/beans" 
xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
                    http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd 
                    http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd 
                    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
                    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
                    http://www.mulesoft.org/schema/mule/apikit http://www.mulesoft.org/schema/mule/apikit/current/mule-apikit.xsd 
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
                    http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">

 <apikit:config consoleEnabled="true" consolePath="console" doc:name="Router" name="api-config" raml="api.raml">
    <apikit:flow-mapping action="get" flow-ref="get:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="post" flow-ref="post:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="put" flow-ref="put:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="delete" flow-ref="delete:/munit:api-config" resource="/munit"/>
</apikit:config>

    <!-- Configure the data source bean -->
<spring:beans>
    <spring:bean id="dbwebDataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <spring:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <spring:property name="url"             value="jdbc:oracle:thin:@server:1111:DB"/>
        <spring:property name="username"        value="xxxx"/>
        <spring:property name="password"         value="xxxx"/>
        <spring:property name="initialSize"     value="1"/>
        <spring:property name="maxActive"       value="3"/>
    </spring:bean>
</spring:beans>

<db:oracle-config name="dbweb" dataSource-ref="dbwebDataSource" doc:name="dbweb configuration"/>

<http:listener-config doc:name="HTTP Listener Configuration" host="0.0.0.0" name="HTTP_Listener_Configuration" port="9090"/>

<apikit:mapping-exception-strategy name="api-apiKitGlobalExceptionMapping">
    <apikit:mapping statusCode="404">
        <apikit:exception value="org.mule.module.apikit.exception.NotFoundException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Resource not found&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="405">
        <apikit:exception value="org.mule.module.apikit.exception.MethodNotAllowedException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Method not allowed&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="415">
        <apikit:exception value="org.mule.module.apikit.exception.UnsupportedMediaTypeException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="406">
        <apikit:exception value="org.mule.module.apikit.exception.NotAcceptableException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Not acceptable&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="400">
        <apikit:exception value="org.mule.module.apikit.exception.BadRequestException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Bad request&quot; }"/>
    </apikit:mapping>
</apikit:mapping-exception-strategy>

<flow name="api-main">
    <http:listener config-ref="HTTP_Listener_Configuration" doc:name="HTTP" path="api/*"/>

    <apikit:router config-ref="api-config" doc:name="APIkit Router"/>
    <exception-strategy doc:name="Reference Exception Strategy" ref="api-apiKitGlobalExceptionMapping"/>
</flow>

<flow name="put:/munit:api-config">
    <set-payload doc:name="Set Payload" value="#['PUT RESPONSE']"/>
</flow>

<flow name="delete:/munit:api-config">

    <set-payload doc:name="Set Payload" value="#['DELETE RESPONSE']"/>
</flow>

<flow name="post:/munit:api-config">

    <set-payload doc:name="Set Payload" value="#['POST RESPONSE']"/>
</flow>

<flow name="get:/munit:api-config">

    <vm:inbound-endpoint exchange-pattern="request-response" path="serviceA" doc:name="Service A"/>

    <db:select config-ref="dbweb" doc:name="select items">
        <db:parameterized-query><![CDATA[${sql.dbweb.select.items}]]></db:parameterized-query>
    </db:select>
</flow>

我的api-test-suite.xml文件:

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

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

<munit:config doc:name="Munit configuration" mock-connectors="false" mock-inbounds="false"/>
<spring:beans>
    <spring:import resource="classpath:api.xml"/>
</spring:beans>
<http:request-config name="HTTP_Request_Configuration" host="localhost" port="9090" basePath="api" doc:name="HTTP Request Configuration">
</http:request-config>

<munit:test name="api-test-get" description="Test">
    <munit:set payload="#['']" doc:name="Set Message"/>
    <http:request config-ref="HTTP_Request_Configuration" path="/munit" method="GET" doc:name="HTTP"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <munit:assert-on-equals message="The HTTP Status code is not correct!" expectedValue="#[200]" actualValue="#[message.inboundProperties['http.status']]" doc:name="Assert Equals"/>
    <munit:assert-payload-equals message="The response payload is not correct!" expectedValue="&quot;GET RESPONSE&quot;" doc:name="Assert Payload"/>
</munit:test>

<munit:test name="api-test-post" description="Test">
    <munit:set payload="#['']" doc:name="Set Message"/>
    <http:request config-ref="HTTP_Request_Configuration" path="/munit" method="POST" doc:name="HTTP"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <munit:assert-on-equals message="The HTTP Status code is not correct!" expectedValue="#[201]" actualValue="#[message.inboundProperties['http.status']]" doc:name="Assert Equals"/>
    <munit:assert-payload-equals message="The response payload is not correct!" expectedValue="&quot;POST RESPONSE&quot;" doc:name="Assert Payload"/>
</munit:test>

<munit:test name="api-test-put" description="Test">
    <munit:set payload="#['']" doc:name="Set Message"/>
    <http:request config-ref="HTTP_Request_Configuration" path="/munit" method="PUT" doc:name="HTTP"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <munit:assert-on-equals message="The HTTP Status code is not correct!" expectedValue="#[201]" actualValue="#[message.inboundProperties['http.status']]" doc:name="Assert Equals"/>
    <munit:assert-payload-equals message="The response payload is not correct!" expectedValue="&quot;PUT RESPONSE&quot;" doc:name="Assert Payload"/>
</munit:test>

<munit:test name="api-test-delete" description="Test">
    <munit:set payload="#['']" doc:name="Set Message"/>
    <http:request config-ref="HTTP_Request_Configuration" path="/munit" method="DELETE" doc:name="HTTP"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <munit:assert-on-equals message="The HTTP Status code is not correct!" expectedValue="#[200]" actualValue="#[message.inboundProperties['http.status']]" doc:name="Assert Equals"/>
    <munit:assert-payload-equals message="The response payload is not correct!" expectedValue="&quot;DELETE RESPONSE&quot;" doc:name="Assert Payload"/>
</munit:test>

我不知道您使用的是哪个版本的Mule,但我认为这是最新版本。

通常,仅在运行Maven测试时,与无效内容有关的所有问题都是由于缺少Maven依赖关系引起的

实际上,大多数模块都已提供,这意味着它们已经存在于m子中,因此即使它们不在您的POM中,该应用程序也将在独立服务器上运行,甚至已部署。 在运行测试时,情况并非如此,在maven测试中使用的mule服务器是一种轻巧的服务器,不含电池,因此您需要指定所有依赖项。

因此, 简短的答案是您可能缺少对pom的依赖

<dependency>
    <groupId>org.mule.modules</groupId>
    <artifactId>mule-module-db</artifactId>
    <version>${mule.version}</version>
    <scope>provided</scope>
</dependency>

无论如何,仅出于完整性考虑,请不要过分使用oracle配置,而应改用通用db配置。

<db:generic-config name="Generic_Database_Configuration" doc:name="Generic Database Configuration" url="asdasdasd"/>

无论如何,如果仍然要使用不建议使用的配置,并且正在运行Mule Enterprise Edition,则还应该注意,最新版本是mule-transport-jdbc-ee模块的一部分,因此在pom中,您应该具有此依赖关系

<dependency>
    <groupId>com.mulesoft.muleesb.transports</groupId>
    <artifactId>mule-transport-jdbc-ee</artifactId>
    <version>${mule.version}</version>
    <scope>provided</scope>
</dependency>

和xml conf看起来像

<jdbc-ee:oracle-data-source name="Oracle_Data_Source" password="" url="jdbc:oracle:thin:@//localhost:1521/[instanceName]" transactionIsolation="UNSPECIFIED" doc:name="Oracle Data Source"/>

希望这可以帮助。

对于一个基本的oracle示例:

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

xsi:schemaLocation="http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd
                    http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-current.xsd                      
                    http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd 
                    http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
                    http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
                    http://www.mulesoft.org/schema/mule/apikit http://www.mulesoft.org/schema/mule/apikit/current/mule-apikit.xsd 
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
                    http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">

 <apikit:config consoleEnabled="true" consolePath="console" doc:name="Router" name="api-config" raml="api.raml">
    <apikit:flow-mapping action="get" flow-ref="get:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="post" flow-ref="post:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="put" flow-ref="put:/munit:api-config" resource="/munit"/>
    <apikit:flow-mapping action="delete" flow-ref="delete:/munit:api-config" resource="/munit"/>
</apikit:config>

    <!-- Configure the data source bean -->
<spring:beans>
    <spring:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"    destroy-method="close"> 
            <spring:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
            <spring:property name="url" value="jdbc:oracle:thin:@server:1521:DBNAME"/> 
            <spring:property name="username" value="user"/> 
            <spring:property name="password" value="passwd"/> 
            <spring:property name="removeAbandoned" value="true"/> 
            <spring:property name="initialSize" value="1"/> 
            <spring:property name="maxActive" value="5"/> 
    </spring:bean> 
</spring:beans>

<db:generic-config name="dbweb" dataSource-ref="dataSource" doc:name="Generic Database Configuration" />


<http:listener-config doc:name="HTTP Listener Configuration" host="0.0.0.0" name="HTTP_Listener_Configuration" port="9090"/>

<apikit:mapping-exception-strategy name="api-apiKitGlobalExceptionMapping">
    <apikit:mapping statusCode="404">
        <apikit:exception value="org.mule.module.apikit.exception.NotFoundException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Resource not found&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="405">
        <apikit:exception value="org.mule.module.apikit.exception.MethodNotAllowedException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Method not allowed&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="415">
        <apikit:exception value="org.mule.module.apikit.exception.UnsupportedMediaTypeException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Unsupported media type&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="406">
        <apikit:exception value="org.mule.module.apikit.exception.NotAcceptableException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Not acceptable&quot; }"/>
    </apikit:mapping>
    <apikit:mapping statusCode="400">
        <apikit:exception value="org.mule.module.apikit.exception.BadRequestException"/>
        <set-property doc:name="Property" propertyName="Content-Type" value="application/json"/>
        <set-payload doc:name="Set Payload" value="{ &quot;message&quot;: &quot;Bad request&quot; }"/>
    </apikit:mapping>
</apikit:mapping-exception-strategy>

<flow name="api-main">
    <http:listener config-ref="HTTP_Listener_Configuration" doc:name="HTTP" path="api/*"/>

    <apikit:router config-ref="api-config" doc:name="APIkit Router"/>
    <exception-strategy doc:name="Reference Exception Strategy" ref="api-apiKitGlobalExceptionMapping"/>
</flow>

<flow name="put:/munit:api-config">
    <set-payload doc:name="Set Payload" value="#['PUT RESPONSE']"/>
</flow>

<flow name="delete:/munit:api-config">

    <set-payload doc:name="Set Payload" value="#['DELETE RESPONSE']"/>
</flow>

<flow name="post:/munit:api-config">

    <set-payload doc:name="Set Payload" value="#['POST RESPONSE']"/>
</flow>

<flow name="get:/munit:api-config">
     <vm:inbound-endpoint exchange-pattern="request-response" path="path" doc:name="service name"/>
    /////////////////////
    CODE HERE
    <db:select config-ref="dbweb" doc:name="select items">
        <db:parameterized-query><![CDATA[SELECT A, B, C FROM TABLE]]></db:parameterized-query>
    </db:select>
    /////////////////////
    <set-payload doc:name="Set Payload" value="#['GET RESPONSE']"/>    
 </flow>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM