2016-01-05 2 views
0

Я довольно новый с Camel. Я пытаюсь получить данные из http-источника. Вот мой код:Apache camel простой пример http

from("timer://runOnce?repeatCount=1") 
    .to("http4://webservice.com/example.xml") 
    .process(new structureXML()) 
    .to("mock:resource") 
    .stop(); 

И:

class structureXML implements Processor { 

    public void process(Exchange httpExchange) throws Exception { 
     String httpres = httpExchange.getIn().getBody(String.class); 
     String[] lines = httpres.split("\n"); 
     Pattern p = Pattern.compile("<Map Key='(.+)' Value='(.+)'/>"); 
     HashMap<String, Integer> mapdata = new HashMap<String, Integer>(); 

     for(String line : lines) { 
      Matcher m = p.matcher(line); 

      if(m.find()) 
       mapdata.put(m.group(1), Integer.parseInt(m.group(2))); 
     } 

     httpExchange.getIn().setBody(mapdata); 
    } 
} 

Ну пример работает правильно, но я хочу знать о возможных путях дальнейшего улучшения этой ситуации (например, обработка XML с помощью XPath и т.д.), также я хочу знать о способах, которыми я могу хранить объект java внутри сообщения, поэтому я могу использовать его в другом маршруте (например: direct: resource вместо mock)

ответ

1

О java-объектах:

Более подробную информацию можно найти здесь: http://camel.apache.org/data-format.html

  • JAXB
  • XStream
  • BeanIO
  • JiBX
  • XMLBeans

Эти форматы данных будут очень полезны для преобразования XML для POJO. Я рекомендую вам попробовать BeanIO (подробная документация, много примеров и т. Д.).

О Xpath:

это трудно что-либо сказать, указанный без ответа веб-службы.

Пример:

setBody().xpath("/soap:Envelope/soap:Body/s:insertResponse/s:data", 
      XmlNamespaces.getNamespace()). 

О вашем примере:

Обычно требуется установить много свойств и заголовка (до запроса HTTP), поэтому он работал отлично. Пример:

setProperty(Exchange.CONTENT_TYPE).constant("application/soap+xml"). 
    setProperty(Exchange.CONTENT_ENCODING).constant("gzip"). 
    setProperty(Exchange.CHARSET_NAME).constant("utf-8"). 
    setHeader(Exchange.CONTENT_TYPE).exchangeProperty(Exchange.CONTENT_TYPE). 

И я не вижу создания запроса к веб-сервису. Легко сделать с помощью скорость (http://camel.apache.org/velocity.html) или, может быть, используя формат даты SOAP (http://camel.apache.org/soap.html).

Вы можете использовать причалом (http://camel.apache.org/jetty.html) вместо http4 (для меня это проще)

+0

Очень подробный и полезный ответ, спасибо много – lkn2993

Смежные вопросы