2014-07-25 108 views
0

我試圖運行一個簡單的Akka駱駝消費者。我創建了一個服務器來回復uri中的地址(在代碼示例中)。當我運行代碼時,我得到一個異常。 我不知道我做錯了什麼,我需要以某種方式配置Jetty嗎?如果是這樣,怎麼樣?Akka駱駝與碼頭拋出NoSuchMethodError:UnsafeUriCharactersEncoder

我用這個Akka樣本作爲例子,在他們的例子中,uri是用簡單的字符串寫的。 (https://github.com/akka/akka/tree/master/akka-samples/akka-sample-camel-java

例外:

Uncaught error from thread [test-system-akka.actor.default-dispatcher-4] shutting down  JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[test-system] 
java.lang.NoSuchMethodError: org.apache.camel.util.UnsafeUriCharactersEncoder.encodeHttpURI(Ljava/lang/String;)Ljava/lang/String; 
at org.apache.camel.component.jetty.JettyHttpComponent.createEndpoint(JettyHttpComponent.java:169) 
at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:91) 
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:461) 
at org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:50) 
at org.apache.camel.model.RouteDefinition.resolveEndpoint(RouteDefinition.java:186) 
... 
... 

我的代碼:

public static void main(String[] args) { 
    ActorSystem system = ActorSystem.create("test-system"); 
    ActorRef historyActor = system.actorOf(Props.create(CamelActor.class)); 
} 


public class CamelActor extends UntypedConsumerActor { 
    private String uri; 
    public CamelActor() { this.uri = "jetty:http://0.0.0.0:9000/mymain?myparam=true"; } 

    @Override 
    public String getEndpointUri() { return uri; } 

    @Override 
    public void onReceive(Object message) throws Exception { 
     if (message instanceof CamelMessage) { 
      CamelMessage camelMessage = (CamelMessage) message; 
      System.out.println("==>"+camelMessage.toString()); 
     } else { 
      unhandled(message); 
     } 
    } 
} 

謝謝,

蓋伊

+1

看起來您無法在類路徑_at runtime_上提供所有必需的jar文件。 –

+0

你是對的,我的確忘了駱駝核心。 –

+0

請添加答案並將其標記爲已解決。 –

回答

0

在我的情況,這是由多個camel,servlet-api,jetty版本在項目的依賴項中使用引起的。刪除重複apis解決了這個問題。從構建路徑中刪除所有重複的依賴關係。