2013-10-16 2 views
0

XML 파일에서 문자열을 가져 와서 해당 값을 개체에 설정하려고했지만이를 수행하는 방법을 알 수 없습니다. 여기에 내가 지금까지했던 작업은 다음과 같습니다낙타가 파일에서 문자열을 가져옵니다.

public class Converter { 

public static void main(String[] args) throws Exception { 

    final XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat(); 
    xmlJsonFormat.setTypeHints(String.valueOf("YES")); 

    CamelContext context = new DefaultCamelContext(); 
    context.getTypeConverterRegistry().addTypeConverter(User.class, String.class, new UserConverter());   

    context.addRoutes(new RouteBuilder() { 
     public void configure() { 
      from("ftp://[email protected]") 
        .to("seda:input").marshal(xmlJsonFormat).to("seda:out"); 
     } 
    }); 

    User user = context.getTypeConverter().convertTo(User.class, "seda:out"); // Here i need to access string from "seda:out" 

    context.start(); 
    Thread.sleep(5000); 
    System.out.println(user.getLogin()); 

} 

private static class UserConverter extends TypeConverterSupport { 

    @SuppressWarnings("unchecked") 
    public <T> T convertTo(Class<T> type, Exchange exchange, Object value) { 
     User user = new User(); 
     user.setLogin(String.valueOf(value.toString())); 
     return (T) user; 
    } 
} 
} 

내 출력은 Seda의이다 : 알아,하지만 난 그 seda:out에, 문자열로 출력을해야합니다.
어떻게이 작업을 수행 할 수 있습니까?

답변

0

TypeConvertor를 사용하는 대신 프로세서를 사용하십시오. 프로세서는 낙타 교환으로부터 문자열을 추출하고 사용자 객체를 생성해야한다. 경로는 다음과 같아야합니다.

from("ftp://[email protected]").to("file://someDirPath").marshal(xmlJsonFormat).process(
    new Processor() { 
     public void process(Exchange exchange) throws Exception { 
      String payload = exchange.getIn().getBody(String.class); 
      // create the User object and set in the body 
      exchange.getIn().setBody(userObject);} }); 
+0

'process()'메소드에 매개 변수로 넣어야하는 것은 무엇입니까? 당신이 그것을 쓴 방법은 효과가 없습니다. – qiGuar

+0

지금 코드를 수정했습니다. –

+0

'exchange.getIn(). setBody (userObject)'가하는 일에 대해 설명해 주시겠습니까? 내 상황에서는 코드가이 줄이 있든 없든 같은 방식으로 작동합니다. – qiGuar

관련 문제