名称的方法:在bean上找不到sayHi - 使用apache Camel

时间:2013-12-04 12:51:11

标签: apache-camel

我正在使用apache camel与部署在Weblogic Server 12c中的远程EJB进行通信。当我调用远程EJB时,它会抛出以下异常 org.apache.camel.component.bean.MethodNotFoundException: Method with name: sayHi not found on bean: ClusterableRemoteRef(3961905123449960886S:192.168.1.98:[7001,7001,-1,-1,-1,-1,-1]:weblogic:AdminServer [3961905123449960886S:192.168.1.98:[7001,7001,-1,-1,-1,-1,-1]:weblogic:AdminServer/394])/394 of type: com.iexceed.study.HelloRemoteEJBImpl_6zix6y_IHelloRemoteEJBImpl_12120_WLStub. Exchange[Message: [Body is null]]

我的Came-context.xml文件如下所示

    <bean id="ejb" class="org.apache.camel.component.ejb.EjbComponent"> 
    <property name="properties" ref="jndiProperties" /> 
    </bean> 
    <util:properties id="jndiProperties"> 
        <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop> 
        <prop key="java.naming.provider.url">t3://IPADDRESS:PORT</prop> 
        <prop key="java.naming.security.principal">weblogic</prop> 
        <prop key="java.naming.security.credentials">Weblogic@01</prop> 
    </util:properties> 
    <camelContext id="camelclient" xmlns="http://camel.apache.org/schema/spring">
    <template id="template" />

    <endpoint id="camelejb" uri="ejb:EJBRemoteModule-1_0-SNAPSHOTEJBRemoteModule-1_0-SNAPSHOT_jarHelloRemoteEJBImpl_IHelloRemoteEJB?method=sayHi"/>

    <route>
        <from uri="direct:start_0" />
        <to uri="camelejb" />
    </route>
</camelContext>

我正在使用的java客户端类是

   public void postRequest(){
    try {
        String camelID = "camelejb";
        Exchange exchange = null;
        Message msg = null;
        getCamelContext();
        springCamelContext.start();
        System.out.println("Starting camel context.....");
        getUriMap();
        ProducerTemplate template = springCamelContext.createProducerTemplate();
        System.out.println("camelejb::::::" + getUriMap().get("camelejb"));
        exchange = template.request(getUriMap().get(camelID), new Processor() {

            public void process(Exchange exchng) throws Exception {
               exchng.getIn().setBody("");
            }
        });
        System.out.println("Exception:" + exchange.getException());
        exchange.getException().printStackTrace();
        msg = exchange.getOut();

        System.out.println("Message:" + msg);
        springCamelContext.stop();
        System.out.println("Stopping Camel Context....");
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    }

EJB:

    @Remote
    public interface IHelloRemoteEJB {

    public void sayHello(String name);

    public void sayHi();
    }

在我的EJB中可用该方法时,不知道为什么会抛出此错误。 我会非常感激,因为我已经在喝汤了。

1 个答案:

答案 0 :(得分:0)

以下代码的结果是什么?

getUriMap().get("camelejb")

如果你想在驼峰路线中引用一个端点,你应该这样做

<endpoint id="endpoint1" uri="direct:start"/>
<endpoint id="endpoint2" uri="mock:end"/>

<route>
  <from ref="endpoint1"/>
  <to uri="ref:endpoint2"/>
</route>