当试图按照WSO2 directions更新salesforce记录时,我收到以下错误 .
Saleforce适配器 - 将sObjects注入有效负载时出错:org.apache.axiom.om.OMException:com.ctc.wstx.exc.WstxUnexpectedCharException:prolog中出现意外字符“{”(代码123);预期'<'
<?xml version="1.0" encoding="UTF-8"?>
<proxy
xmlns="http://ws.apache.org/ns/synapse"
xmlns:sfdc="sfdc" name="SalesforceUpdateTest" startOnLoad="true" statistics="enable" trace="enable" transports="http,https">
<target>
<inSequence>
<sequence key="conf:/SalesforceLoginInfo"/>
<payloadFactory>
<format>
<sfdc:sObjects
xmlns:sfdc="sfdc" type="Account">
<sfdc:sObject>
<sfdc:Id>TestId1</sfdc:Id>
<sfdc:ValueToChange>Yes</sfdc:ValueToChange>
</sfdc:sObject>
</sfdc:sObjects>
</format>
<args/>
</payloadFactory>
<salesforce.update>
<allOrNone>0</allOrNone>
<allowFieldTruncate>0</allowFieldTruncate>
<sobjects
xmlns:sfdc="sfdc">{//sfdc:sObjects}
</sobjects>
</salesforce.update>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
我使用的是WSO2 EI 6.1.0和salesforce connector 2.0.1 . Salesforce ID TestId1与字段ValueToChange一样存在 . 我的SalesforceLoginInfo是正确的(我可以执行Salesforce查询,而不是更新) .
试图解决这个问题我看到了这个very similar问题 . 但我根据解决方案添加了行到 axis2.xml ,重新启动,问题仍然存在 .
<messageBuilder contentType="application/json" class="org.wso2.carbon.integrator.core.json.JsonStreamBuilder"/>
<messageBuilder contentType="text/javascript" class="org.wso2.carbon.integrator.core.json.JsonStreamBuilder"/>
<messageFormatter contentType="application/json" class="org.wso2.carbon.integrator.core.json.JsonStreamFormatter"/>
<messageFormatter contentType="text/javascript" class="org.wso2.carbon.integrator.core.json.JsonStreamFormatter"/>
有谁知道如何解决这个问题?我觉得我只是在关注一个教程(我的代码几乎完全是给定的wso2 salesforce示例)但问题还在继续 .
更新:为了减少对SalesforceLoginInfo调用的混淆,我将其删除并将salesforce.init放入代码中 . 错误仍然是一样的 .
<?xml version="1.0" encoding="UTF-8"?>
<proxy
xmlns="http://ws.apache.org/ns/synapse"
xmlns:sfdc="sfdc" name="SalesforceUpdateTest" startOnLoad="true" statistics="enable" trace="enable" transports="http,https">
<target>
<inSequence>
<salesforce.init>
<username>developer@mycompany.com</username>
<password>mypasswordandmytoken</password>
<loginUrl>https://test.salesforce.com/services/Soap/u/27.0</loginUrl>
<blocking>true</blocking>
</salesforce.init>
<payloadFactory>
<format>
<sfdc:sObjects
xmlns:sfdc="sfdc" type="Account">
<sfdc:sObject>
<sfdc:Id>TestId1</sfdc:Id>
<sfdc:ValueToChange>Yes</sfdc:ValueToChange>
</sfdc:sObject>
</sfdc:sObjects>
</format>
<args/>
</payloadFactory>
<salesforce.update>
<allOrNone>0</allOrNone>
<allowFieldTruncate>0</allowFieldTruncate>
<sobjects
xmlns:sfdc="sfdc">{//sfdc:sObjects}
</sobjects>
</salesforce.update>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
</proxy>
4 回答
能够使用WSO2 EI 6.1.0和salesforce connector 2.0.1复制以下行为 .
找到用于修复它的以下代理序列 . 解决方法是将有效负载加载到属性中,并通过Synapse XPath变量
$ctx
将其传递给salesforce操作<salesforce.update>
salesforce记录已更新,在本例中为Account Object记录的Description属性 .
此外,无需在Salesforce连接器模板中将
messageBuilder
或messageFormatter
添加到axis2.xml
中作为messageType is : text/xml
,默认情况下,这些模板包含在Axis2配置中 .我可以通过删除init操作来重现错误 .
请添加更新方法的init操作顶部 .
或者为init创建本地条目并在代理[1]中调用它 .
[1] https://docs.wso2.com/display/ESB500/Using+a+Connector
我有两个问题需要了解你来到这里的问题 .
首先,您要使用以下内容在帐户中更新什么?您是否需要更新记录ID,如果是,您必须提供有效的ID?
第二件事是什么是“ValueToChange”?它是Account对象的字段(我不认为这是Account对象的字段)?
你可以修改代理如下,然后尝试 .
此错误的原因是为连接器提供的xpath参数后面有一个换行符 .
在附件中,
应该是正确的
当发生这种情况时[1]将获得XPATH表达式而不是评估值,这会导致此问题 . 测试并找到工作代理 .
[1] https://github.com/wso2-extensions/esb-connector-salesforce/blob/master/connector/src/main/java/org/wso2/carbon/connector/salesforce/SalesforceUtil.java#L72