Как обрабатывать подчеркивания в тегах XML - PullRequest
0 голосов
/ 03 октября 2019

Как обрабатывать подчеркивания в тегах xml. Вот код, над которым я работаю. Он генерировал мне тег xml с двойным подчеркиванием ("__") вместо единственного подчеркивания ("_"). Может ли кто-нибудь помочь мне решить эту проблему.

ConverterRoute.Java

public class ConverterRoute implements RoutesBuilder {

    private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=Source.txt";

    private static final String SOURCE_OUTPUT_PATH = "file://outbox?fileName=file_$simple{date:now:yyyyMMddHHmmssSSS}.xml";

    public void addRoutesToCamelContext(CamelContext context) throws Exception {

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                try {
                    DataFormat bindyFixed = new BindyCsvDataFormat(Test.class);

                    XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
                    xStreamDataFormat.setAliases(Collections.singletonMap("TEST_INB",Test.class.getCanonicalName()));

                    from(SOURCE_INPUT_PATH).
                            split().tokenize(System.lineSeparator()).
                            unmarshal(bindyFixed).
                            marshal(xStreamDataFormat).
                            to(SOURCE_OUTPUT_PATH).log("Finished Transformation").end();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

CamelConfig.java

@Component
public class CamelConfig extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        try {
            CamelContext context = new DefaultCamelContext();
            ConverterRoute route = new ConverterRoute();
            route.addRoutesToCamelContext(context);
            context.start();
            Thread.sleep(5000);
            context.stop();

        } catch (Exception exe) {
            exe.printStackTrace();
        }
    }
}

Test.java

@CsvRecord(separator = "\\|",skipField = true,name = "TEST_INB")
public class Test {

    @DataField(pos = 1,name = "ALT_NUM")
    private BigDecimal ALT_NUM;

    @DataField(pos = 2,name = "PRTNUM")
    private BigDecimal PRTNUM;

    @DataField(pos = 3,name = "UOMCOD")
    private Integer UOMCOD;

}

Source.txt

55158|11901|2346
55158|11101|3454

ВЫХОД

File.xml

<?xml version='1.0' encoding='UTF-8'?>    
    <TEST__INB>
            <ALT__NUM>55158</ALT__NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>2346</UOMCOD>
    </TEST__INB>

Ожидаемый ВЫХОД

File.xml

<?xml version='1.0' encoding='UTF-8'?>    
    <TEST_INB>
            <ALT_NUM>55158</ALT_NUM>
            <PRTNUM>11901</PRTNUM>
            <UOMCOD>2346</UOMCOD>
    </TEST_INB>

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

XStream внутренне использует подчеркивание для экранирования символов при создании XML.

См. FAQ: http://x -stream.github.io / faq.html # XML_double_underscores

Вы можете попробовать использовать пользовательский драйвер (а не драйвер по умолчанию):

XmlFriendlyNameCoder nameCoder = new XmlFriendlyNameCoder("_-", "_");  
Dom4JDriver myCustomDriver = new Dom4JDriver(nameCoder);
... 
XStreamDataFormat xStreamDataFormat = new XStreamDataFormat();
xStreamDataFormat.setDriver(myCustomDriver);

или, если он не работает, возможно, попытаться использовать этот другой альтернативный драйвер:

DomDriver myCustomDriver = new DomDriver("UTF_8", new NoNameCoder());

Надеюсь, что это работает!

0 голосов
/ 04 октября 2019

Не могли бы вы использовать псевдонимы Xstream: см., Например, https://www.baeldung.com/xstream-serialize-object-to-xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...