Apache Camel: URI escapando en HTTP (y otros productores)

En una ruta Apache Camel, quiero tomar varios encabezados y componerlos en una cadena de consulta HTTP de una manera segura. Los únicos ejemplos que he encontrado usan constant (), que no es útil para crear cadenas de consulta dinámicas, o usan simple () que no ofrece escape de URL.

Por ejemplo, tome el siguiente fragmento directamente de la documentación del componente HTTP:

   from("direct:start")
      .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
      .to("http://oldhost");

Esto es el 90% del camino hasta allí, pero ¿qué pasa si no siempre quieres la identificación de pedido 123? Nos gustaría poder sustituir un valor de encabezado aquí. Entonces, la siguiente versión lógica de esto es cambiar a simple:

   from("direct:start")
    .setHeader(Exchange.HTTP_QUERY, simple("order=${header.orderId}&detail=short"))
    .to("http://oldhost");

Pero esto tiene el problema principal de no estar codificado en URL. Esto significa que un espacio (o cualquier carácter reservado) en header.orderId da como resultado una excepción lanzada por el componente HTTP para una cadena de consulta no válida.

Entonces, la única forma que queda es usar JavaScript, que es muy detallado para algo como esto, o escribir un procesador personalizado. Parece que esto debería ser algo incorporado, por lo que pregunto aquí para ver si me falta una forma obvia / normal de hacer lo que estoy buscando aquí.

Respuesta 1

¿Qué es mejor rendimiento: string.matches ("regex") o Pattern.compile ("regex"). Coincide (string) .find ()? A lo que me refiero es a la coincidencia a través de las coincidencias de String.java () o API en Pattern ...

Estoy usando java.util.logging.Logger para iniciar sesión en mi aplicación Java GoogleAppEngine. Esto funciona a la perfección cuando se implementa la aplicación. Sin embargo, no puedo ver mis mensajes de registro cuando ejecuto mi aplicación en ...

Tengo lo siguiente: fruitMap.remove (fruitId, fruitProperties); El fruitMap es: mapa privado <FruitId, FruitProperties> fruitMap = new HashMap <FruitId, FruitProperties> (); Cuando yo ...

Tengo un Objeto Axis2 devuelto de mi código Java. ¿Cómo puedo convertir ese objeto a XML o generarlo como XML en la consola? Sé que hay muchas bibliotecas de terceros disponibles para serializar objetos ...