Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


7 questions online user: 24

0
votes
answers
21 views
+10

Apache Kafka + Apache Camel集成+ POC問題java.util.Hashtable.put上的java.lang.NullPointerException(Hashtable.java:459)

0

這是我的路由生成器。在這裏,我試圖從我的文件插入數據topic.Later,我通過我的主要方法,並使用駱駝上下文我運行它。我嘗試了幾個代碼,但沒有人幫助我。我正在開發Apache kafka的POC - 駱駝。Apache Kafka + Apache Camel集成+ POC問題java.util.Hashtable.put上的java.lang.NullPointerException(Hashtable.java:459)

public class SimpleRouteBuilder extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 

     String topicName = "test120"; 
     String kafkaServer = "kafka:localhost:9092"; 
     String zooKeeperHost = "zookeeperHost=localhost&zookeeperPort=2181"; 
     String serializerClass = "serializerClass=kafka.serializer.StringEncoder"; 

     String toKafka = "kafka:localhost:9092?topic=test120;zookeeperHost=localhost;zookeeperPort=2181;groupId=group1"; 


    // toKafka = new StringBuilder().append("&").append(serializerClass).toString(); 

       /*new StringBuilder().append(kafkaServer).append("?").append(topicName).append("&") 
       .append(zooKeeperHost).append("&").append(serializerClass).toString();*/ 

     from("file:C:/inbox?noop=true").to(toKafka); 


    } 
} 

這是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>HelloWorld</groupId> 
    <artifactId>Pallavi</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-core</artifactId> 
      <version>2.20.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.camel</groupId> 
      <artifactId>camel-kafka</artifactId> 
      <version>2.20.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>2.11.0</version> 
     </dependency> 
    </dependencies> 

</project> 

這是我的主類:

import org.apache.camel.CamelContext; 
import org.apache.camel.impl.DefaultCamelContext; 

public class MainApp { 

    public static void main(String[] args) { 
     SimpleRouteBuilder routeBuilder = new SimpleRouteBuilder(); 
     CamelContext ctx = new DefaultCamelContext(); 
     try { 
      ctx.addRoutes(routeBuilder); 
      ctx.start(); 
      Thread.sleep(5 * 60 * 1000); 
      ctx.stop(); 
      System.out.println("hi i am working"); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 

錯誤是:

java.lang.NullPointerException 
    at java.util.Hashtable.put(Hashtable.java:459) 
    at org.apache.camel.component.kafka.KafkaProducer.getProps(KafkaProducer.java:63) 
    at org.apache.camel.component.kafka.KafkaProducer.doStart(KafkaProducer.java:89) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
    at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:75) 
    at org.apache.camel.impl.DeferServiceStartupListener.onCamelContextStarted(DeferServiceStartupListener.java:49) 
    at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3859) 
    at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3638) 
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3490) 
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:208) 
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3249) 
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3245) 
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3268) 
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3245) 
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61) 
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3168) 
    at demo.MainApp.main(MainApp.java:13) 
Picked up _JAVA_OPTIONS: -Xmx512M -Xms512M 
+0

可能重複[什麼是NullPointerException,以及如何解決它?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix -it) –

+0

您尚未配置代理選項 –

沙发
0
0

您需要配置brokers選項在端點上。或者在全球的kafka組件上。

我已經登錄了票,使駱駝在報告在下一個版本一個更好的異常:https://issues.apache.org/jira/browse/CAMEL-12090

這裏有一個例子卡夫卡,你可以看看太:https://github.com/apache/camel/tree/master/examples/camel-example-kafka

+0

我試過github代碼,我收到此錯誤:org.apache.kafka.common.errors.TimeoutException:無法在60000毫秒後更新元數據。 –

板凳
0
0

也許你沒有設置生產性能其中有爲卡夫卡製作人提供的配置。

駱駝卡夫卡組件需要配置強制卡夫卡生產者屬性。

地板
0
0

確保目錄C: inbox確實存在。此外,請確保您更改POM文件在本教程中提到的那些依賴的版本,因爲駱駝卡夫卡2.17.0事情已經改變,它不再接受zookeeperHostzookeeperPort值在到Kafka字符串中。

0
votes
answers
13 views
+10

Apache Camel路由和Spring引導:應用程序啓動

-2

我有一個Spring Boot(1.5.1)應用程序。Apache Camel路由和Spring引導:應用程序啓動

作爲應用程序啓動的一部分,它需要調用外部服務。這很好 - 我實現了一個實現ApplicationListener的類,並且外部服務被正確調用。

我的問題是,外部服務立即將我的應用程序調回回調URL。對我的應用程序的調用失敗,出現404 Not Found。 URL端點被設置爲Apache Camel(v。2.17.0)路由。當外部服務獲得404時,這意味着在外部服務調用它之前,我的應用程序中尚未啓動該路由。

事實上,我通過調試應用程序並在調用外部服務之前添加一個斷點來證明這一點。如果我自己在代碼暫停的情況下調用回調URL,我自己就會得到404。直到整個ApplicationListener類的方法完成並且我的應用程序完全啓動(消息:「FrameworkServlet'dispatcherServlet':初始化已完成」),回調URL變爲可用。

有沒有什麼辦法可以在調用外部服務之前啓動Apache Camel路由?

在此先感謝您的幫助。

沙发
0
0

通過將ApplicationListener代碼傳遞到配置爲在回調URL路由之後啓動的新Camel路由來解決問題。它通過駱駝計時器運行。

0
votes
answers
18 views
+10

Camel路由可以將數據發送到TCP客戶端嗎?

0

TCP客戶端將連接到我們的服務器接收數據,它不會發送數據。我想建立一條駱駝路線來傳輸數據給客戶端,這可能嗎?Camel路由可以將數據發送到TCP客戶端嗎?

+0

退房網狀TCP組件。它應該是可能的。 –

沙发
0
0

你可以用netty做到這一點。

我希望這個鏈接可以幫助你:

http://camel.apache.org/netty4.html

0
votes
answers
28 views
+10

爲什麼我會在JBoss Dev Studio上遇到小孩計數更新問題?

-1

當我嘗試調試並檢查變量時出現此錯誤。爲什麼我會在JBoss Dev Studio上遇到小孩計數更新問題?

在「子數計數更新」期間發生內部錯誤。 org.eclipse.jdt.internal.debug.core.logicalstructures.JavaStructureErrorValue不能轉換爲org.eclipse.jdt.debug.core.IJavaObject

enter image description here

package com.optum.propel.service; 

import org.apache.camel.Exchange; 

import com.optum.propel.commons.handler.BaseHandler; 

public class Kafka_Consumer extends BaseHandler { 

    @Override 
    public void process(Exchange exchange) throws Exception { 
     // TODO Auto-generated method stub 
//  String temp = exchange.getIn().getBody(String.class); 

    System.out.println(exchange.getIn().getBody().toString()); 
    System.out.println("From Kafka_Consumer:"); 
} 

} 
+0

請分享一下你的代碼。目前,這是不是真的可以解決... –

+1

請把代碼放入問題,而不是註釋 –

+0

我得到的錯誤在行「System.out.println(exchange.getIn()。getBody()。toString() )」。調試時如果我想查看交換變量的內容。它會拋出上述錯誤。 –

沙发
0
0

爲什麼不打破命令[1 ]分成4個命令,將每個調用分配給一個變量,並嘗試/捕獲異常以查看發生了什麼問題?

[1]的System.out.println(exchange.getIn()。getBody()。toString()方法)

0
votes
answers
12 views
+10

駱駝 - 如何移動碼頭集裝箱外的文件

0

我有一個容器內的彈簧啓動應用程序,我用駱駝來讀取一些文件,但我需要告訴駱駝開始讀取容器外,然後將相同的文件移動到一個這也是在容器外具體路徑,有人可以幫我?駱駝 - 如何移動碼頭集裝箱外的文件

這是我的代碼:

@Component 
public class Controlador extends RouteBuilder { 

    @Autowired 
    Procesador objProcesador; 

    @Override 
    public void configure() throws Exception { 
     from("ftp://[email protected]:port?password=password&passiveMode=true&delete=true").streamCaching().convertBodyTo(InputStream.class).process(objProcesador).to("/var/lib"); 
    } 

} 

在此先感謝

+0

使用[移動](http://camel.apache.org/file2.html)URI選項而不是刪除。 https://stackoverflow.com/questions/19905462/how-to-rename-and-move-the-file-on-ftp-once-processed-by-camel – Bedla

+0

是的,這將移動該文件,但我怎麼能指定一個在容器外面的路徑? –

+0

不確定你對「容器外」意味着什麼。如果這意味着在遠程FTP服務器上移動文件,那麼從camel-file2組件繼承的「move」選項應該可以工作 – Bedla

沙发
0
1

你怎麼在容器外的意思是?如果您的意思是運行容器的主機上的路徑,則需要將該路徑作爲卷共享。在使用"docker run.."時或在Dockerfile中設置音量。如果您的意思是駱駝應該通過ftp或sftp獲取文件,請確保容器可以先訪問該站點。

+0

是的,我需要一個來自主機的文件,但是有可能在兩個不同的路徑之間讀取和移動文件?因爲我需要從/ mnt /文件讀取文件,但後來將文件移動到主機上的另一個位置例如/ var/lib/files –

+0

是的。這兩個路徑必須被模仿爲[卷](https://docs.docker.com/engine/admin/volumes/volumes/#create-and-manage-volumes),以便容器可以訪問它。然後,您可以使用具有相對或絕對路徑的&移動選項來安裝音量。 – Bedla

+0

主機上需要的任何路徑都需要作爲卷裝入,以便容器到達它。 –

0
votes
answers
28 views
+10

如何在apache駝峯DSL或駱駝處理器內部設置其他認證屬性?

0

在這裏,我試圖將Json數據轉換爲CSV格式,最後將此文件發送到Ofbiz服務器api,但是當我在URL中發送參數時,api端點需要一些身份驗證內容我得到了下面的輸出。如何在apache駝峯DSL或駱駝處理器內部設置其他認證屬性?

{ 「_ERROR_MESSAGE _」:「錯誤調用事件:org.apache.ofbiz.webapp.event.EventHandlerException:實測值URL參數[的configId]傳遞給安全(HTTPS)請求地圖URI [uploadAndImportFileFromCSVFile]與事件調用服務[uploadAndImportFile];這是不允許出於安全原因!數據應該通過使其成爲請求主體(表單域)而不是請求URL的一部分進行加密,而且如果您可以創建Jira子任務https://issues.apache.org/jira/browse/OFBIZ-2330(如果您不確定如何創建Jira問題,請在https://cwiki.apache.org/confluence/display/OFBIZ/OFBiz+Contributors+Best+Practices之前查看,謝謝您的幫助。),「」 sessionId「:」someId .jvm1「,」removePathAlias「:false,」loggedIn「:true,」USERNAME「:」__「 ,「_ LOGIN_PASSED _」:「TRUE」,「webSiteId」:「API」}

之後,我使用MultipartBuilder發送請求。

exchange.getIn().setHeader("bearer",token);   
MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
File file =new File("//home/r2/Desktop/ofBizFile/orderFile.csv"); 
builder.addPart("configId",new StringBody("CON_ID")); 
builder.addPart("fileTypeEnumId",new StringBody("CSV_FILE")); 
builder.addPart("_uploadedFile_contentType",new StringBody("text/csv")); 
builder.addPart("uploadedFile",new FileBody(file)); 
exchange.getIn().setBody(builder.build()); 

我也試過類似的東西。

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1"); 
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69"); 
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE"); 

這裏是我的駱駝航線

//Route 1 
from("couchdb:http://localhost:5984/order") 
     .process(new JsonToCsvProcessor()) 
     //Storing file into local directory 
     .to("file:/home/r2/Desktop/ofBizFile?fileExist=append&fileName=order-${date:now:yyyyMMdd}.csv"); 

    .to("direct:jsonToCsv"); 
//Route 2 
    from("direct:jsonToCsv") 
    .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__")) 
    //For get token 
    .to("https4://SomeAddress.com/centerAPI/getAuthenticationToken") 
    //Get the token and set required parameter for route 3 
    .process(new ProcessorGetToken()) 
    .to("direct:hold");  
//Route 3 
    from("direct:hold") 
    .setHeader(Exchange.HTTP_QUERY,constant("USERNAME=__&PASSWORD=__")) 
    .to("https4://SomeAddress.com/centerAPI/uploadAndImportFileFromCSVFile?throwExceptionOnFailure=false") 
    //How I know the file is submited successfuly ? 
    .to("stream:out").end(); 

所以問題是我怎麼能在Route2到ProcessorGetToken發送數據體內明年路徑3

沙发
0
0

我會在這裏拍攝一片黑暗。讀你的錯誤消息:

的數據應通過使請求主體(表單域)的一部分進行加密,而不是請求URL

你沒有這個集成文檔?我認爲你需要更多關於這個過程的說明,以及在發送數據之前需要加密哪些數據。

另外,儘量將Exchange.HTTP_METHODPOST設置成你的路線,像這樣:

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1"); 
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST"); 
exchange.getIn().setHeader(Exchange.HTTP_QUERY,"USERNAME=abc&PASSWORD=bc69"); 
exchange.getIn().setBody("configId=CON_ID&fileTypeEnumId=CSV_FILE"); 

看看到this unit test看到更多的例子在HTTP發送數據。那裏還有很多其他的測試。

0
votes
answers
24 views
+10

如何爲https請求定義camel jetty路由並將參數傳遞給某個api進行認證?

1

我想使用camel-jetty組件發送https使用者請求,並且該地址以JSON格式返回一些響應,下面我提到我的DSL代碼。如何爲https請求定義camel jetty路由並將參數傳遞給某個api進行認證?

from("jetty:https://someSiteAddress.com/api/control/authorizeUser?username=__&password=__").to("stream:out"); 

I am getting this warning: 
[WARNING] 
java.net.SocketException: Permission denied 
at sun.nio.ch.Net.bind0 (Native Method) 
at sun.nio.ch.Net.bind (Net.java:433) 
at sun.nio.ch.Net.bind (Net.java:425) 
at sun.nio.ch.ServerSocketChannelImpl.bind 

但是,無論何時我在瀏覽器中點擊此HTTP URL,它都將與身份驗證一起完美執行。
如果有人知道該怎麼做才能在apache駱駝中執行這個動作,請幫助我,這對我和其他人來說會非常開心。

我怎麼能知道哪個方法駱駝使用發送請求像POST或GET。
謝謝

+0

嗨!如果我理解正確,您想要使用此端點:「https://someSiteAddress.com/api/control/authorizeUser?username = __&password = __',正確嗎?如果我是對的,你應該在'to'中使用'camel-http'組件。您的代碼被描述的方式,您**暴露**的URL,而不是消耗它。如果您遇到問題,請告訴我,我已將其解答。 –

+0

@RicardoZanini謝謝你的幫助,讓我明確指出在這裏我想擊中端點:從(「提及上面」)返回一些token_Id和這些token_Id的我在控制檯上打印到(「stream:out」)。但我越來越錯誤,我認爲這個錯誤是因爲** jetty **。 –

+0

嗨!請,看我的答案。你使用jetty的方式是在這個地址公開一個端點:'https:// someSiteAddress.com'不會從它消耗。要使用url來使用,你必須使用'to()'指定它。 –

沙发
0
1

你可以試試這個嗎?我會評論每一行以幫助理解您的問題。

// endpoint to start your route. could be a http endpoint you expose via jetty, jms, vm, seda or any other option. Here I'm using the simplest one. 
from("direct:start") 
    // logs on 
    .to("log:DEBUG?showBody=true&showHeaders=true") 
    // consume the endpoint 
    .to("https://someSiteAddress.com/api/control/authorizeUser?username=__&password=__"") 
    // log the body to the console so you could process the response later knowing what to do (the token you are mentioning should be in here. 
    .to("log:DEBUG?showBody=true&showHeaders=true") 
    .to("stream:out") //or whatever you want to 

不要忘了camel-http依賴這個例子的工作:

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-http</artifactId> 
</dependency> 

乾杯!

+0

你好@RicardoZanini我很喜歡清理我的概念,代碼是*** Build Success ***,但我仍然沒有得到迴應(以令牌和id的形式)。以防萬一,如果你對我的*** URL響應有疑問,***它在瀏覽器中工作正常。 –

+0

@RajatTemaniya請發佈您在瀏覽器中查看的回覆。響應機構應該在您的回覆中。 –

+0

你好@RicardoZanini這是我正在尋找*** {「organizationPartyId」:「MY_COMPANY」,「sessionId」:「somerandomid.jvm1」,「_ LOGIN_PASSED _」:「TRUE」,「authorizeUserResult」:{「userLoginId」:「 myuser「,」responseMessage「:」success「,」partyId「:」myparty「,」token「:」mytoken ==「}} *** 我試圖得到交換,但沒有迴應。 –

板凳
0
0

這也工作正常。

from("direct:in") 
.to("https://www.someAddress.com/api/control /authorizeUser?username=__ &password=__") 
.to("stream:out"); 

感謝@RicardoZanini