如何在mule中提取Web服务方法名称<cxf:proxy-service> </cxf:proxy-service>

时间:2012-12-12 20:36:35

标签: cxf mule interceptor

我正在处理mule <cxf:proxy-service>,需要提取Web服务方法名称以附加到邮件以供日后使用。

我们有一个实现Callable接口的服务代理类。最初我们尝试获取这样的操作名称:

public Object onCall(MuleEventContext eventContext) throws Exception {  
    try {
        MuleMessage inboundMessage = eventContext.getMessage();

        Set<String> props = inboundMessage.getInvocationPropertyNames();
        System.out.println("CXF invocation properties ==> " + props);
        System.out.println("CXF invocation property ==> " +  inboundMessage.getInvocationProperty("cxf_operation"));

但上面的代码给出了错误的操作名称。 (我们在服务中有4个操作,它总是给出第二个操作名称)。以下是用于此的骡子流:

<flow name="proxyService">
    <http:inbound-endpoint address="${some.address}"
        exchange-pattern="request-response">

        <cxf:proxy-service wsdlLocation="classpath:abc.wsdl"
            namespace="http://namespace"
            service="MyService">

        </cxf:proxy-service>
    </http:inbound-endpoint>
    <component class="com.services.MyServiceProxy" />

因此,我使用写入入站cxf拦截器来提取操作名称。我在下面写了拦截器,它适用于<cxf:jaxws-service>但不适用于<cxf:proxy-service>元素。

这是我的拦截器:

public class GetCXFOperation extends AbstractPhaseInterceptor<Message> {

public GetCXFOperation() {
    super(Phase.PRE_INVOKE);

}

@Override
public void handleMessage(Message message) throws Fault {
    Exchange exchange = message.getExchange();
    Endpoint ep = exchange.get(Endpoint.class);
    OperationInfo op = exchange.get(OperationInfo.class);
    if(op != null){
    System.out.println("Operation Name: " + op.getName().getLocalPart());
    } else{
         Object nameProperty = exchange.get("org.apache.cxf.resource.operation.name"); 
    if(nameProperty != null)

    System.out.println(nameProperty.toString());
    }

}

}

寻求如何在<cxf:proxy-service>中提取操作名称的指导?是否有一种简单的方法来获得正确答案?或者是否有一个不同的阶段,我应该调用我的拦截器?哪些阶段适用于<cxf:proxy-service>

0 个答案:

没有答案