Groovy Выходной XML-источник из JSON - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь получить отличный скрипт для вывода того, что мне нужно, в соответствии со спецификацией производителя.В конце концов, я буду заполнять JsonSlurper файлом, а не статическими строками, но для простоты я предоставил пример JSON.При выполнении следующего кода в GroovyConsole я не могу точно определить, почему узлы UserReference и Bal включают в себя указанное мной пространство имен.Любая помощь приветствуется!

    import groovy.xml.* 
    import groovy.json.JsonSlurper  
    def queryResultsResponseString =  
    ''' 
    { 
    "rows": [ 
    { 

                     "account_num": 123, 
                     "name": "Mr Bigbucks", 
                     "balance": 83.23 
                   }, 
                   { 
                     "account_num": 8675309, 
                     "name": "Johnny", 
                     "balance": 45.75 
                   } 
                  ] 
       } 
     ''' 
     def jsonResp = (new JsonSlurper()).parseText(queryResultsResponseString); 
     def xml = new groovy.xml.StreamingMarkupBuilder()
     xml.encoding = "UTF-8"
     def prints = xml.bind{ 
        mkp.xmlDeclaration()  
      mkp.declareNamespace(p1 :"com/my/namespace/woot" + "\"" + " " + "xsi:schemaLocation=\"http://www.w3.org/2001/XMLSchema-instance") 

      'p1:BatchEidvPersonSearch' { 
       jsonResp.rows.each{row -> 
         EidvPersonSearchRequest { 
           InternalId('Internal Id')
           UserReference('CLEAR ID Confirm Person Search')
           criteria {
           acctNum row.account_num 
           custName row.name 
           bal row.balance 
           }
         } 
       } 
     } 
     }
    println XmlUtil.serialize(prints).replaceAll('"','"')
// ---Results Here ---
    <?xml version="1.0" encoding="UTF-8"?><p1:BatchEidvPersonSearch xmlns:p1="com/my/namespace/woot" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">
      <EidvPersonSearchRequest>
        <InternalId>Internal Id</InternalId>
        <UserReference xmlns:p1="com/my/namespace/woot" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">CLEAR ID Confirm Person Search</UserReference>
        <criteria>
          <acctNum>123</acctNum>
          <custName>Mr Bigbucks</custName>
          <bal xmlns:p1="com/my/namespace/woot" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">83.23</bal>
        </criteria>
      </EidvPersonSearchRequest>
      <EidvPersonSearchRequest>
        <InternalId>Internal Id</InternalId>
        <UserReference xmlns:p1="com/my/namespace/woot" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">CLEAR ID Confirm Person Search</UserReference>
        <criteria>
          <acctNum>8675309</acctNum>
          <custName>Johnny</custName>
          <bal xmlns:p1="com/my/namespace/woot" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">45.75</bal>
        </criteria>
      </EidvPersonSearchRequest>
    </p1:BatchEidvPersonSearch>

--- Обновление -----

Я пытаюсь вызвать этот скрипт Groovy с помощью инструмента ETL, который поставляется с локально загруженным кувшином 2.2.и заметил, что при вызове скрипта через инструмент ETL он выдает ожидаемый результат.Итак ... Я скачал 2.2 groovy из архивов и вызвал мой скрипт, используя groovy console и BAM, он работает.Я не уверен, что изменилось между версиями, но определенно есть изменения в выводе.Я подозреваю, что когда мы обновим наш инструмент ETL, JAR будет обновлен до последней версии.Есть идеи, что может существенно отличаться между двумя выпусками?

...