2013-10-24 4 views
0

Пожалуйста, помогите мне в этой ошибке. У меня есть мыльный клиент, вызывающий службу с 3-мя операциями. Поэтому в flow1 я устанавливаю сеанс varaible для хранения операции. И в flow2 я использовал , чтобы установить значение для доступа к этим переменным в качестве исходящего сообщения. Свойство перед cxf: jaxws-client. Как описано в этой ссылке: mule dynamically setting soap operation, но я получаю исключение, так как «локальная часть не может быть« null »при создании QName».Mule ESB -Error при динамической настройке Мыльная операция в муле

Я контролировал, сохраняя регистратор после , установленного свойства. Может видеть операцию со значениями в свойстве исходящего сообщения. Не уверен, почему значение не помещено в поле операции мыла. Пожалуйста, найдите мою конфигурацию 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

Атрибут operation пользователя jaxws-клиента CXF берется, когда он находится внутри тега элемента cxf:jaxws-client. Таким образом, вы можете объявить operation в теге cxf:jaxws-client.

Во-вторых, атрибут operation в cxf: jaxws-клиент не может оценить Mule Expression Language. Поэтому он не может принимать выражения MEL. Он может принимать только String. Именно по этой причине он работает, когда вы вводите его вручную и не загружаете динамически.

Проверьте Mule Jira, если есть такая проблема.

Mule Jira

0

Я получаю исключение типа «локальная часть не может быть„нулевой“при создании QName»

operation свойство вы настраиваете должны стать javax.xml.namespace.QName. Поэтому вам нужно извлечь URI пространства имен и локальную часть из sessionVars.cxf_operation и использовать this QName constructor в set-property до cxf:jaxws-client.

Предполагается, что sessionVars.cxf_operation имеет форму {namespaceURI}localPart. Если это не так, и на самом деле он содержит только localPart, вам придется жестко закодировать URI пространства имен в конструкторе QName, используя, мы надеемся, уникальное пространство имен, в которое будут определены все операции.

0

Просто используйте его перед CXF: JAXWS-клиент

<set-variable value="#[message.inboundProperties['operation']]" variableName="operation" />