2

我正在 MuleStudio 中编写一些流程,用于保存和查询 MongoDB 数据库。当指向具有一个具有 dbAdmin 和 userAdmin 角色的用户并使用该用户的凭据配置的数据库时,流程可以正常工作。但是,当我将它指向一个没有添加用户的不同数据库时,我收到以下错误。我将用户名和密码保存在 Mule 的 MongoDB 连接器配置中,作为文档中建议的虚拟文本,然后将它们取出,但无济于事。我正在使用 3.3.1 CE 运行时。

带有虚拟凭据的错误消息:

ERROR 2013-10-10 14:48:08,176 [[sso-mds].connector.http.mule.default.receiver.02] org.mule.retry.notifiers.ConnectNotifier: Failed to connect/reconnect: Work Descriptor. Root Exception was: Could not create a validated object, cause: Couldn't connect with the given credentials. Type: class java.util.NoSuchElementException
ERROR 2013-10-10 14:48:08,181 [[sso-mds].connector.http.mule.default.receiver.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Failed to invoke findObjectsUsingQueryMap. Message payload is of type: LinkedHashMap
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Could not create a validated object, cause: Couldn't connect with the given credentials (java.util.NoSuchElementException)
  org.apache.commons.pool.impl.GenericKeyedObjectPool:1219 (null)
2. Failed to invoke findObjectsUsingQueryMap. Message payload is of type: LinkedHashMap (org.mule.api.MessagingException)
  org.mule.module.mongo.processors.FindObjectsUsingQueryMapMessageProcessor:177 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.util.NoSuchElementException: Could not create a validated object, cause: Couldn't connect with the given credentials
    at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1219)
    at org.mule.module.mongo.connectivity.MongoCloudConnectorConnectionManager.acquireConnection(MongoCloudConnectorConnectionManager.java:437)
    at org.mule.module.mongo.connectivity.MongoCloudConnectorConnectionManager.acquireConnection(MongoCloudConnectorConnectionManager.java:27)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

没有凭据的错误消息:

ERROR 2013-10-10 14:19:48,572 [[sso-mds].connector.http.mule.default.receiver.02] org.mule.retry.notifiers.ConnectNotifier: Failed to connect/reconnect: Work Descriptor. Root Exception was: null. Type: class java.lang.NullPointerException
ERROR 2013-10-10 14:19:48,574 [[sso-mds].connector.http.mule.default.receiver.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Failed to invoke findObjectsUsingQueryMap. Message payload is of type: LinkedHashMap
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. null (java.lang.NullPointerException)
  org.mule.module.mongo.connectivity.MongoCloudConnectorConnectionKey:86 (null)
2. Failed to invoke findObjectsUsingQueryMap. Message payload is of type: LinkedHashMap (org.mule.api.MessagingException)
  org.mule.module.mongo.processors.FindObjectsUsingQueryMapMessageProcessor:177 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.NullPointerException
    at org.mule.module.mongo.connectivity.MongoCloudConnectorConnectionKey.hashCode(MongoCloudConnectorConnectionKey.java:86)
    at java.util.HashMap.hash(Unknown Source)
    at java.util.HashMap.getEntry(Unknown Source)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

骡子配置:

<mongo:config name="Mongo_DB"  doc:name="Mongo DB" database="${mongo.db}" host="${mongo.host}" port="${mongo.port}" password="${db.password}" username="${db.username}>
    <mongo:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
</mongo:config>
<flow name="user_gets_simple" doc:name="user_gets_simple">
    <composite-source doc:name="Composite Source">
        <http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.ID}" path="user/getAll" doc:name="HTTP /user/getAll"/>
        <http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.ID}" path="user/getByUsername" doc:name="HTTP /user/getByUsername"/>
        <http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.ID}" path="user/getById" doc:name="HTTP /user/getById"/>
        <http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.ID}" path="user/getByEmail" doc:name="HTTP /user/getByEmail"/>
    </composite-source>
    <flow-ref name="get_from_MongoDB" doc:name="Get from MongoDB subflow"/>
</flow>

<flow name="user_save_flow" doc:name="user_save_flow">
    <http:inbound-endpoint exchange-pattern="request-response" host="${my.host}" port="${my.ID}" path="user/save" doc:name="HTTP /user/save" />
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <json:json-to-object-transformer doc:name="JSON to Object" returnClass="java.util.Map"/>
    <mongo:insert-object-from-map config-ref="Mongo_DB" collection="${mongo.collection}" doc:name="Insert in Mongo DB"  >
        <mongo:element-attributes>
            <mongo:element-attribute key="firstName">#[payload.firstName]</mongo:element-attribute>
            <mongo:element-attribute key="lastName">#[payload.lastName]</mongo:element-attribute>
            <mongo:element-attribute key="location">#[payload.location]</mongo:element-attribute>
        </mongo:element-attributes>
    </mongo:insert-object-from-map>
    <set-payload value="Saved successfully" doc:name="Set Payload"/>
</flow>

<sub-flow name="get_from_MongoDB" doc:name="get_from_MongoDB">
    <byte-array-to-string-transformer doc:name="Byte Array to String"/>
    <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/>
    <mongo:find-objects-using-query-map config-ref="Mongo_DB" collection="${mongo.collection}" doc:name="Find objects in Mongo DB" limit="5">
        <mongo:query-attributes ref="#[payload]"/>
    </mongo:find-objects-using-query-map>
    <mongo:mongo-collection-to-json doc:name="Mongo collection to JSON"/>
</sub-flow>

关于如何在不添加用户的情况下连接到该数据库的任何建议?

4

3 回答 3

1

不确定放置任何虚拟值如何工作,因为连接器会将其作为用户名和密码传递。但是我尝试了这个技巧并且它有效。${db.user}在 mule-app.properties 中只有一个空条目db.user=,并且工作正常。

于 2015-03-01T19:02:14.033 回答
0

嗨,这是一个问题,因为 Mule ESB 在没有身份验证的情况下无法工作......用户和密码字段不是“@optional”。

用于在 mongo 中创建用户并在身份验证模式下运行 mongo

http://www.mkyong.com/mongodb/mongodb-authentication-example/

然后你可以把它的凭据放在 Mule ESB 中,你很高兴....

于 2014-06-20T14:57:27.930 回答
0

只需添加 mongo-java-driver: 2.13.3 依赖项。检查 Maven 依赖项是否存在冲突。

于 2015-09-29T19:47:17.757 回答