2014-02-25 8 views
0

비누 기반 웹 서비스에서 Mule 메시지 속성에 액세스하려고합니다. RequestContext.getEvent(). getMessage()를 사용하는 한 가지 방법을 알고 있지만이 방법은 더 이상 사용되지 않습니다. 웹 서비스에서 MuleMessage 속성에 액세스하는 다른 방법. 누군가가 이것에 대한 조언을 해줄 수 있습니까?비누 기반 웹 서비스에서 MuleMessage에 액세스

코드 조각

<flow name="MyWebService" doc:name="MyWebService"> 
    <http:inbound-endpoint exchange-pattern="request-response" address="${WEB_SERVICE_PROTOCOL}://${WEB_SERVICE_HOST}:${WEB_SERVICE_PORT}/MyWebService?wsdl" tracking:enable-default-events="true"> 
     <cxf:jaxws-service serviceClass="com.XXX.XXX.service.MyWebService" doc:name="SOAP"/> 
    </http:inbound-endpoint> 
    <component doc:name="My Web Service"> 
     <spring-object bean="WebServiceImpl"/> 
    </component> 
</flow>    

답변

0

서비스 클래스의 직렬화되지 않은 객체를 처리하는 대신 서비스 인터페이스를 전혀 구현하지 않고 SOAP 요청을 Mule 메시지 (속성에 액세스 할 수 있음)로 처리하면이 작업을 수행 할 수 있습니다. 한 옵션을 사용하는 것입니다

<flow name="WebServiceFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     address="http://localhost:8080/services/some" /> 

    <cxf:jaxws-service 
     serviceClass="com.amce.SomePortType" /> 

    <choice> 
     <when 
      expression="#[cxf_operation.localPart == 'SomeOperation']"> 
      <flow-ref name="HandleSomeOperation" /> 
     </when> 
+0

그냥 내 웹 서비스 인터페이스와 같이 above.I로 구현이 아이디어를 제공하기 위해이 코드를 추가 내 질문을 편집 한 단편. – user2714010

+0

그래서 구현 클래스에서 MuleMessage 페이로드 만 사용할 수 있습니다. – user2714010

+0

구현 클래스가 있으면'RequestContext.getEvent(). getMessage()'를 사용해야합니다. 더 이상 사용되지 않지만 MuleSoft는 유스 케이스의 대체품을 제공하지 않았으므로 다른 옵션은 없습니다. –

0

당신이 MuleMessage에 액세스 할 수있는 경우 다음 MuleMessage 클래스의

Set<String> getPropertyNames(PropertyScope scope); 

사용할 수있는 방법을 사용하여 필요한 특성을 얻을. MuleMessage를 얻으려면 MuleClient에 액세스해야합니다. MuleClient에 액세스 할 수 있습니까? 예인 경우 다음을 사용하십시오.

muleClient = muleContext.getClient(); 
MuleMessage result = muleClient.send(webaddress, "", props); 

달성하려는 작업은 무엇입니까?

1

메시지 속성을 얻기위한 목적이 무엇인지에 따라 다음과 같습니다

는 WSDL2Java의와 WSDL에서 필요한 클래스와 인터페이스를 생성 한 가정, 예를 들어 조각입니다 메시지에 액세스하는 cxf 인터셉터 다음 예제를 참조하십시오.

인터셉터를 추가 :

<cxf:jaxws-service serviceClass="org.example.HelloWorld"> 
    <cxf:inInterceptors> 
    <spring:bean class="org.example.MyInterceptor"/> 
    </cxf:inInterceptors> 
</cxf:jaxws-service> 

인터셉터 클래스 :

package org.example; 

import org.apache.cxf.binding.soap.SoapMessage; 
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor; 
import org.apache.cxf.interceptor.Fault; 
import org.apache.cxf.phase.Phase; 
import org.mule.api.MuleEvent; 
import org.mule.api.MuleMessage; 

public class MyInterceptor extends AbstractSoapInterceptor { 

    public MyInterceptor() { 
     super(Phase.USER_PROTOCOL); 
    } 

    @Override 
    public void handleMessage(SoapMessage message) throws Fault { 
     MuleEvent muleEvent = (MuleEvent)message.getContextualProperty("mule.event"); 
     MuleMessage muleMessage = muleEvent.getMessage(); 
     System.out.println(muleMessage.toString()); 
    } 

} 
+0

귀하의 입력에 감사드립니다 안도 이것은 CXF 인터셉터를 사용하여 메시지를 얻는 또 하나의 방법입니다. 그러나 웹 서비스 impl 내에서 파일 메타 데이터를 포함하고 데이터베이스를 업데이트하는 Mule 메시지 속성을 읽고 싶습니다. 그래서 웹 서비스에서 데이터베이스에 메타 데이터를 저장하는 DAO 계층에 대한 호출이 있었을 것입니다. 그래서 저는 David의 제안과 함께 갈 것입니다. – user2714010

관련 문제