请帮我解决这个错误。我有一个soap客户端通过3次操作调用该服务。所以在flow1中我设置会话变量来存储操作。在flow2中,我使用 set属性来访问这些变量,作为 cxf:jaxws-client之前的出站消息属性。如此链接中所述:{{3}但是我在创建QName时会遇到像“本地部分不能为空”的异常“。
我通过在设置属性之后保留记录器进行监控。能够在出站消息属性中查看值的操作。不知道为什么值没有放在soap操作字段中。请找到我的xml配置。
<flow name="Flow1" doc:name="eFlow" tracking:enable-default-events="false">
<wmq:inbound-endpoint queue="InputQ" connector ref="WMQ_Connector" doc:name="connector">
<wmq:transaction action="NONE"/>
</wmq:inbound-endpoint>
<set-session-variable variableName="cxf_operation"
value="#[xpath('fn:local-name(/root/*[2])')]" doc:name="Set_Operation" />
<some logic here.../>
</flow>
<flow name="Service_call" doc:name="Service">
<set-property propertyName="operation" value="#[sessionVars.cxf_operation]"
doc:name="Property" />
<logger message="***outbound properties: #[message.outboundProperties]***" level="INFO" doc:name="Logger"/>
<cxf:jaxws-client enableMuleSoapHeaders="true" doc:name="SOAP" serviceClass="com.valid.ICase"/>
<http:outbound-endpoint exchange-pattern="request-response"
method="POST" doc:name="HTTP" address="http://localhost:8085/callingService" />
<some logic here.../>
</flow>
因为我设置了财产,所以我没有设置肥皂操作。我仍然得到错误。任何人都可以帮助这个。 但是当我手动输入操作名称时。能够看到回应。
答案 0 :(得分:0)
当CXF jaxws-client位于operation
元素标记内时,将获取属性cxf:jaxws-client
。
因此,您可以在operation
代码中声明cxf:jaxws-client
。
第二件事是cxf中的operation
属性:jaxws-client无法评估Mule Expression Language
。所以它不能采用MEL表达式。它只需要String。这就是当你手动输入它而不是动态加载时它工作的原因。
如果报告任何此类问题,请检查Mule Jira。
答案 1 :(得分:0)
我在创建QName时遇到“本地部分不能为空”的异常“
您设置的operation
属性应为javax.xml.namespace.QName
。因此,您需要从sessionVars.cxf_operation
中提取名称空间URI和本地部分,并在set-property
之前的cxf:jaxws-client
中使用this QName constructor。
这假定sessionVars.cxf_operation
的格式为{namespaceURI}localPart
。如果不是这样,并且它实际上只包含localPart
那么你将不得不在QName
构造函数中对命名空间URI进行硬编码,使用希望唯一的命名空间,所有操作都定义在其中
答案 2 :(得分:0)
在cxf之前使用它:jaxws-client
<set-variable value="#[message.inboundProperties['operation']]" variableName="operation" />