【问题标题】:Apache Camel How convert DB response to XMLApache Camel 如何将 DB 响应转换为 XML
【发布时间】:2017-09-09 13:26:14
【问题描述】:

我使用 ServiceMix (Apache Camel),但在 StackOverFlow 上没有找到类似的主题。

我描述了顺序:

为了处理数据,我需要将 SQL 结果集转换为 XML。

【问题讨论】:

    标签: java xml apache-servicemix camel-sql


    【解决方案1】:

    为了将数据库结果转换为 XML,我接下来要做:

    数据库连接器 bean:

    <bean
        class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/intertest"/>
        <property name="username" value="test"/>
        <property name="password" value="pass"/>
    </bean>
    

    骆驼路线:

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route id="_route1">
            <from id="_from1" uri="activemq:dev.input"/>
            <to id="_to1" uri="sql:SELECT * FROM h4_rs4?dataSource=dataSource"/>
            <bean id="_bean1" method="transform" ref="myTransform"/>
            <to id="_to2" uri="activemq:queue:dev.output"/>
        </route>
    </camelContext>
    

    将数据库响应转换为 XML 的 bean 代码

    try {
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    
        // root elements
        Document doc = docBuilder.newDocument();
        Element rootElement = doc.createElement("DBResult");
        doc.appendChild(rootElement);
    
        ArrayList rsRowsArray = (ArrayList) body; // Responce
        Iterator<LinkedHashMap> rsRowsIterator = rsRowsArray.iterator();
        while (rsRowsIterator.hasNext()) {
    
            Element row = doc.createElement("row");
            rootElement.appendChild(row);
    
            Attr attr = doc.createAttribute("id");
            attr.setValue("1");
            row.setAttributeNode(attr);
    
            LinkedHashMap rsRow = rsRowsIterator.next(); 
            // LOGGER.info("Полей в строке = " + rsRow.size());
            Set fieldsNames = rsRow.keySet(); // Get fields name
            Iterator<String> fieldsIterator = fieldsNames.iterator();
            while (fieldsIterator.hasNext()) {
                String fieldName = fieldsIterator.next();
                Element field = doc.createElement(fieldName);
                field.appendChild(doc.createTextNode(rsRow.get(fieldName).toString()));
                row.appendChild(field);
            }
        }
        return doc;
    } catch (ParserConfigurationException pce) {
        pce.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多