Отображение данных XML в JSON - Дочерние классы (подклассы) xml не отображаются для сопоставления с JSON в mule dataweave - PullRequest
0 голосов
/ 16 октября 2018

Я создаю службу SOAP, которая получает входные данные XML, как показано ниже.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:inv="http://bac.com/wsdl/cbl.WCC/InvolvedPartyMaintenanceServicingV001" xmlns:inf="http://bac.com/xmlschema/osa/InfrastructureV003" xmlns:bac="http://bac.com/xmlschema/cbl/bac024">
   <soapenv:Header>
      <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd">
         <wsse:UsernameToken>
            <wsse:Username>*********</wsse:Username>
            <wsse:Password>XXXXX</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
   </soapenv:Header>
   <soapenv:Body>
      <inv:combineInvolvedPartiesRequest>
         <inv:osaRequestHeader>
            <inf:providerService>
               <inf:name>BCC</inf:name>
            </inf:providerService>
         </inv:osaRequestHeader>
         <inv:involvedPartyRoleSummary xsi:type="bac:CustomerRoleSummary">
            <bac:summarizedParty xsi:type="bac:IndividualSummary">
               <bac:contactPreferences>
                  <bac:prefers xsi:type="bac:PostalAddress">
                     <bac:addressLine>TEST ADDRESS LINE ONE</bac:addressLine>
                     <bac:addressLine>TESTADDRESSTWO</bac:addressLine>
                     <bac:city>MMNAGAR</bac:city>
                     <bac:countryCode>US</bac:countryCode>
                     <bac:postalCode>68293-8000</bac:postalCode>
                     <bac:state>FL</bac:state>
                  </bac:prefers>
               </bac:contactPreferences>
               <bac:involvedPartyName xsi:type="bac:IndividualName">
                  <bac:firstName>KRISHNA</bac:firstName>
                  <bac:lastName>PRASAD</bac:lastName>
                  <bac:middleNames>M</bac:middleNames>
               </bac:involvedPartyName>
               <bac:birthDate>1981-08-28</bac:birthDate>
            </bac:summarizedParty>
         </inv:involvedPartyRoleSummary>
         <inv:nonSurvivorPartyIdentifier xsi:type="bac:CustomerIdentifier">
            <bac:identifier>34234234234</bac:identifier>
         </inv:nonSurvivorPartyIdentifier>
         <inv:survivorPartyIdentifier xsi:type="bac:CustomerIdentifier">
            <bac:identifier>234234234234</bac:identifier>
            <bac:subsystemIdentifier>BCC</bac:subsystemIdentifier>
            <bac:systemIdentifier>0001</bac:systemIdentifier>
         </inv:survivorPartyIdentifier>
      </inv:combineInvolvedPartiesRequest>
   </soapenv:Body>
</soapenv:Envelope>

Этот XML содержит множество элементов "xsi: type", которые представляют возможные подтипы.Когда я пытаюсь преобразовать этот xml в json, я не могу найти подтипы (дочерние классы) в компоненте преобразования данных.

Например: «почтовый адрес» является подклассом абстрактного класса «точка контакта».В компоненте сообщения преобразования отображаются поля из «контактной точки», но поля из «почтового адреса» не отображаются для отображения. Поэтому я не могу сопоставить поля в классе почтового адреса с json.

Пожалуйста, помогите мне, как сделать отображение для этого сценария?

1 Ответ

0 голосов
/ 18 октября 2018

Я решил эту проблему, написав java-функцию и вызвав ее из dataweave (см. Глобальные функции и вызов java-функций из нее).Эта функция выполнит проверку «instanceof» для дочерних подтипов и вернет логическое значение.

На основе логического значения поля заполняются.

...