2015-04-01 18 views
9

Sto usando l'API grafico di Facebook e la chiamo attraverso il framework cammello. La mia query ha caratteri non ASCII (ad esempio küçük). Sto ottenendo la seguente eccezione: -Caratteri non ascii nell'URL param in cammello

Cause: 
org.apache.commons.httpclient.URIException: Invalid query 
at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049) 
at org.apache.commons.httpclient.URI.<init>(URI.java:147) 
at org.apache.commons.httpclient.HttpMethodBase.getURI 
at org.apache.commons.httpclient.HttpClient.executeMethod 
at org.apache.commons.httpclient.HttpClient.executeMethod 
at org.apache.camel.component.http.HttpProducer.executeMethod 
at org.apache.camel.component.http.HttpProducer.process 
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) 
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) 
at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:122) 

Il cammello supporta caratteri non ASCII nell'URI? In caso contrario, quali altre cose possono essere fatte?

example URL: https://graph.facebook.com/?ids=http://www.example.com/küçük 
+2

Leggere informazioni sulla codifica url: non è un problema specifico per Camel, ma le regole degli URL in generale. –

+0

@ClausIbsen Mi sono riferito al documento cammello Apache (http://camel.apache.org/book-getting-started.html). Nella sezione "Significato di URL, URI, URN e IRI", il documento dice che un URI di cammello può supportare lettere e cifre nel set di caratteri ASCII USA. Conoscete un modo in cui posso chiedere a Camel di usare l'IRI o altre opzioni per supportare personaggi speciali? –

+0

Ho lo stesso problema, qualsiasi aiuto è apprezzato. – Sid

risposta

1

Quindi questo è quello che siamo stati in grado di fare per risolvere il problema .

In Apache Camel, il componente HTTP_URI non accetta caratteri speciali, anche dopo la codifica. Questo è un bug in Camel che non è ancora chiuso.

Fortunatamente per noi, i caratteri speciali vengono visualizzati solo nella stringa di query dell'URL e non nella parte URI principale. Camel fornisce un altro componente HTTP_QUERY, che può analizzare e comprendere correttamente i caratteri codificati UTF-8. Impostandolo nell'intestazione, siamo stati in grado di eliminare il problema.

Quindi, in pratica, prima codifichiamo l'URL su UTF-8 e quindi impostiamo il valore HTTP_QUERY come stringa di query. Questo ha funzionato come un fascino. ad es. (Scala)

.setHeader(Exchange.HTTP_QUERY, _.in[HttpRequest].uri.split(?).head) 
.setHeader(Exchange.HTTP_URI, _.in[HttpRequest].uri) 
+0

Camel supporta caratteri speciali nella parte principale dell'URL. Un problema URI non valido si verifica quando nella parte Query dell'URL sono presenti caratteri speciali. –

+0

Esatto, modificherò la mia risposta. – Sid

5

"La codifica dell'URL sostituisce caratteri non ASCII con un"% "seguito da cifre esadecimali." (more info here)

Si potrebbe provare questo:

URL url = new URL(uri.toASCIIString()); 

o forse

String xstr = URLEncoder.encode("维", "utf-8"); 
+0

Grazie per la risposta, ma questo non ha aiutato nel contesto cammello Apache. – Sid

0

Usa encodeURIComponent(url) funzionerà

Problemi correlati