JAXB сортировка с вложенными тегами - PullRequest
0 голосов
/ 29 марта 2019

Я создаю XML файлы, используя JAXB на основе XSD сгенерированных шаблонами классов.

Но вывод XML не ожидается.

public class ProcessXMLService {

    public static void main(String[] args) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance("com.ford.xml.poc");      

         StringBuilder xmlSB = new StringBuilder();
         try {
         FileWriter out = new FileWriter("C:\\gopal\\sales.xml");
         int count=0;
             while(count<2){         
                 StringWriter xmlStr = new StringWriter();
                 Marshaller marshaller = context.createMarshaller();             
                 marshaller.setProperty("jaxb.formatted.output",Boolean.FALSE);
                 marshaller.marshal(getMSGBody("DONE"), xmlStr);
                 xmlSB.append(xmlStr.toString()+"\n");
                 count++;
             }
         out.write(xmlSB.toString());
         out.close();
         }
         catch (Exception e) {
             e.printStackTrace();
         }

    }


    static JAXBElement<MessageBodyType> getMSGBody(String serviceName){
        ObjectFactory factory = new ObjectFactory();
        RequestInfoType reqInfoType = factory.createRequestInfoType();
        reqInfoType.setRequesterName("ETL Sales");
        reqInfoType.setRequestId("123");
        //JAXBElement<RequestInfoType> reqInfoJaxB = factory.createRequestInfo(reqInfoType);
        SalesDataType saleDataType = factory.createSalesDataType();
        saleDataType.setGlobalSourceRecordId("c0a460e0-60aa-4bd5-9155-5645b4afe1de");// Update GSRID
        //JAXBElement<SalesDataType> saleDataJaxB = factory.createSaleData(saleDataType);
        MessageBodyType msgBdType = factory.createMessageBodyType();
        msgBdType.setRequestInfo(reqInfoType);
        msgBdType.getSaleData().add(saleDataType);

        JAXBElement<MessageBodyType> msgBd = factory.createMessageBody(msgBdType);
        return msgBd;

    }
}

Получение приведенного ниже вывода XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns4:MessageBody
    xmlns:ns2="urn:ford/identifier/v1.0"
    xmlns:ns4="urn:ford/Consumer/Sales/v1.0"
    xmlns:ns3="urn:ford/crfcommon/v1.0">
    <ns3:RequestInfo>
        <RequestId>123</RequestId>
        <RequesterName>ETL Sales</RequesterName>
    </ns3:RequestInfo>
    <SaleData>
        <ns2:GlobalSourceRecordId>c0a460e0-60aa-4bd5-9155-5645b4afe1de</ns2:GlobalSourceRecordId>
    </SaleData>
</ns4:MessageBody>

Но ожидаемый вывод XML:

<?xml version="1.0" encoding="UTF-8"?>
<tns:MessageBody
    xmlns:tns="urn:ford/Consumer/Sales/v1.0">
    <com:RequestInfo
        xmlns:com="urn:ford/crfcommon/v1.0">
        <com:RequestId>123</com:RequestId>
        <com:RequesterName>ETL Sales</com:RequesterName>
    </com:RequestInfo>
    <tns:SaleData>
        <ns1:GlobalSourceRecordId
            xmlns:ns1="urn:ford/identifier/v1.0">c0a460e0-60aa-4bd5-9155-5645b4afe1de
        </ns1:GlobalSourceRecordId>
    </tns:SaleData>ns4:MessageBody>
...