当尝试按照WSO2 指示更新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>
Run Code Online (Sandbox Code Playgroud)
我使用的是WSO2 EI 6.1.0和salesforce connector 2.0.1.Salesforce ID TestId1与字段ValueToChange一样存在.我的SalesforceLoginInfo是正确的(我可以执行Salesforce查询,而不是更新).
试图解决这个问题我看到了这个非常相似的问题.但是我已根据解决方案将行添加到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"/>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题?我觉得我只是在关注一个教程(我的代码几乎完全是给定的wso2 salesforce示例)但问题还在继续.
更新:为了减少对SalesforceLoginInfo调用的混淆,我将其删除并将salesforce.init放入代码中.错误仍然是一样的.
<?xml version="1.0" encoding="UTF-8"?>
<proxy
xmlns="http://ws.apache.org/ns/synapse" …
Run Code Online (Sandbox Code Playgroud) 任何人都会通过调用和发送调解员之间的区别以及使用这两个调解器的用例来取悦.
我是WSO2 ESB的新手,我有一个具有这种特定行为的自定义消息处理器:在从消息存储中检索元素之后,在执行与此消息处理器相关的序列之前执行操作.
我试着详细解释一下.
这是我的ESB消息处理器定义:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
Run Code Online (Sandbox Code Playgroud)
它从transferFromMessageStore(队列)中检索一些元素(XML文档),并将此对象传递给使用它的transferProcessorSequence.xml序列.正如您在此时所看到的,我已经实现了一个自定义消息处理器SamplingProcessorHeaderRateLimit,它只是扩展了org.apache.synapse.message.processor.impl.sampler.SamplingProcessor WSO2类.此时,它仅在执行init()方法时显示日志.我将它部署在我的Carbon服务器上,它可以工作.
在这里,您可以找到整个项目代码.
好但是从我所理解的获得所需的行为我不必简单地扩展SamplingProcessor类,因为为了在每个消息消耗和调度序列之间进行自定义实现,需要扩展类SamplingService类,这一个.
我认为我需要覆盖execute()或fetch(MessageConsumer msgConsumer).
此时应该还可以插入日志,每次从消息存储库中检索元素时都会写入日志文件,在此之前执行与消息处理器相关的序列.
可能吗?
所以我的主要主要是:
1)我是否要创建一个将SamplingService类扩展到我实现自定义消息处理器的同一项目中的类(此行为必须仅用于我的WSO2 ESB项目中的此特定消息处理器,所有其他使用的消息处理器在这个项目中必须使用标准的SamplingService实现).
2)另一个疑问与此自定义SamplingService实现如何传递给我的自定义消息处理器有关.进入SamplingProcessor WSO2类(如何将特定的自定义消息处理器实现与处理其生命周期的自定义SamplingService实现相关联).
我在服务器上部署了REST服务,并希望通过WSO2 ESB公开它(代理它)并使用ESB安全性来保护对服务的访问(可能是在ESB用户数据库中按用户名和密码查找的HTTP BASIC身份验证) ).我找不到描述如何做的好文档.这可以使用WSO2 ESB完成吗?
您通常如何调试ESB代码?我正在使用日志语句,但它们在系统日志中丢失了.有没有更好的机制可供使用?
谢谢,
我创建了一个AXIS服务,它连接到WSO2 Identity Server并验证令牌.当我在WSO2 App Server上部署此轴服务时,我得到了正确的响应.当我在WSO2 ESB上部署它时,我收到以下错误
org.apache.axis2.AxisFault: The input stream for an incoming message is null.
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:93)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:68)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:346)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:413)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:224)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:149)
at org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub.validate(OAuth2TokenValidationServiceStub.java:184)
at com.xxx4.yyy.security.token.service.TokenValidationService.validateToken(TokenValidationService.java:67)
at com.xxx4.yyy.security.token.facade.TokenValidationFacade.validateToken(TokenValidationFacade.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:404)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:184)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Run Code Online (Sandbox Code Playgroud)
[2013-10-03 14:42:56,160]错误 - TargetHandler I/O错误:主机的主机名验证失败:172.20.5.110 javax.net.ssl.SSLException:主机的主机名验证失败:org的172.20.5.110位于org.apache.http的org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:285)的.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(ClientSSLSetupHandler.java:152)位于org.apache.http.impl.nio的org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:118)的.nio.reactor.ssl.SSLIOSession.isAppInputReady(SSLIOSession.java:372)位于org.apache.http.impl.nio.reactor.AbstractIOReactor的org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:342)的.reactor.BaseIOReactor.readable(BaseIOReactor.java:160). .processEvents(AbstractIOReactor.java:320)org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:280)org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106)at org java.lang.Thread.run中的.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor $ Worker.run(AbstractMultiworkerIOReactor.java:604)(Thread.java:724)
我想明白之间的差别grant_type=client_credentials
,并grant_type=password
在Authentication
或OAuth2 Flow
概念.我关注以下网站:
我相信grant_type=password
在not secure
这样只要使用gran_type
的JavaScript开发.但我还是有些人可以帮助理解这个概念.
我还观察到,grant_type=client_credentials
不提供" refresh_token
",它只是提供了access_token
其中的grant_type=password
同时提供了access_token
和refresh_token
.
希望得到详细的解释.我正在使用WSO2 API Manager
OAuth2进行应用程序开发
我正在研究这个材料用于WSO2 ESB认证:
https://wso2.com/training/enterprise-integrator-developer-fundamentals#request_training_enroll
在"下载实验工具包"部分中,有一个关于如何设置入站端点的教程.基本上它只是简单地为此先前实现的教程项目添加入站端点:
https://docs.wso2.com/display/EI611/Sending+a+Simple+Message+to+a+Service
我已经完成了它并且它工作正常,基本上在我的项目中我有这个REST API:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/healthcare" name="HealthcareAPI" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET" uri-template="/querydoctor/{category}">
<inSequence>
<log description="Request Log" level="custom">
<property name="message" value="Welcome to HealthcareService"/>
</log>
<send>
<endpoint key="QueryDoctorEP"/>
</send>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
Run Code Online (Sandbox Code Playgroud)
可以通过以下声明直接调用:
curl -v http://localhost:8280/healthcare/querydoctor/surgery
Run Code Online (Sandbox Code Playgroud)
然后我将此入站端点添加到项目中:
<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="QueryDoctorInboundEndpoint" protocol="http" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
<parameters>
<parameter name="inbound.http.port">8285</parameter>
<parameter name="dispatch.filter.pattern">/healthcare/querydoctor/.*</parameter>
</parameters>
</inboundEndpoint>
Run Code Online (Sandbox Code Playgroud)
这意味着我也可以使用这个新的映射URL调用此服务:
curl -v http://localhost:8285/healthcare/querydoctor/surgery
Run Code Online (Sandbox Code Playgroud)
我正在使用另一个端口,因为此入站端点正在执行此映射:
<parameter name="dispatch.filter.pattern">/healthcare/querydoctor/.*</parameter>
Run Code Online (Sandbox Code Playgroud)
我的疑问是:为什么我要使用入站端点而不是我的REST API的经典URL?有什么好处或可能的用例?
我尝试阅读有关此端点类型的官方文档页面:https …
正如它在DBLookup Mediator的文档中所说的那样,它只返回查询的第一行,如果忽略则返回其他结果.
我想知道是否有一种"最好的方法"来运行一个返回多个记录然后处理它们的查询(SELECT*FROM X).现在有一天我们正在实现实现axis2服务,但是有另一种方法使用wso2 esb提供的调解器的组合来完成该要求吗?
提前致谢.
圣地亚哥.
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer 90d2c018-73d1-324b-b121-a162cf870ac0' 'https://172.17.0.1:8243/V1.0.2/stock/getNA?name=te'
Run Code Online (Sandbox Code Playgroud)
终端提示
"curl:(51)SSL:证书使用者名称(localhost)与目标主机名"172.17.0.1"不匹配
Howerver,在我将"172.17.0.1"更改为"localhost"后,它工作并获得了结果.
为什么?是不是有错误的配置?同时,http_access.log中没有登录.
wso2esb ×10
wso2 ×9
java ×2
wso2carbon ×2
api-manager ×1
axis2 ×1
esb ×1
integration ×1
java-ee ×1
mediator ×1
sfdc ×1
ssl ×1
wso2is ×1