2016-05-04 18 views
0

これはサービスクラスです。データベースから値を読み取ってXMLファイルを作成しています。コードは3つのpojoクラスを使用しています。 Mt700、ヘッダーとスウィフトの詳細。 MT700はヘッダーと迅速な詳細のメインクラスです。問題は、すべてを一度に保存できることです。ファイルが1つのレコードで生成されたときのデータの行数は重要ではありません。ヘッダが1つしかなく、迅速な詳細が1つしかありません。どのように私はループでこの作品を作ることができますか?私はリストを使用しなければならないと思うが、私はそれを動作させるためにどのように使用するか分からない。JavaからXMLファイルを作成するjaxB

public void generateEliteExtracts(int trdCustomerKy, Date lastRunDate, Date currentDate) throws TradeException { 
      FileOutputStream fout = null; 
      try { 

          MT700 mt700 = getMT700(trdCustomerKy,lastRunDate,currentDate); 
          if (null != mt700){ 
          StringBuffer fileName = new StringBuffer(1024); 
          fileName.append(mConfiguration.getOutDirectory()).append(MT700_MSGTYPE) 
            .append(DOT).append(mConfiguration.getOutputFileExtn()); 
          smLog.debug("Generated Extract for BankRef" + fileName.toString()); 
          mTracer.log("Generated Extract for BankRef" + fileName.toString()); 
          File xmlFile = new File(fileName.toString()); 
          fout = new FileOutputStream(xmlFile); 
          fout.write(MT700_XMLHEADER.getBytes()); 
          JAXBContext jaxbContext = JAXBContext.newInstance(MT700.class); 
          Marshaller marshaller = jaxbContext.createMarshaller(); 
          marshaller.setProperty(Marshaller.JAXB_ENCODING, ENCODING_ASCII); 
          marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
          marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE); 
          marshaller.setProperty("com.sun.xml.internal.bind.xmlDeclaration", Boolean.FALSE); 
          marshaller.marshal(mt700, fout); 
          IOUtils.closeQuietly(fout); 
          } 
     }catch(

     Exception ex) 

     { 
      smLog.error("Caught unexpected error while creating extracts. ", ex); 
      throw new TradeException("Caught unexpected error while creating extracts.", ex); 
     } finally 

     { 
      IOUtils.closeQuietly(fout); 
     } 

     } 

     private MT700 getMT700(int trdCustomerKy, Date lastRunDate, Date currentDate) throws TradeException { 
      MT700 mt700 = new MT700(); 

      AbInBevEliteExtractDAO dao = new AbInBevEliteExtractDAO(mConnection); 
      CompanyCodesHelper ccHelper = new CompanyCodesHelper(mConnection); 
      String cifCodes = ccHelper.getDescription(trdCustomerKy, "CIF Codes", "CIF Codes"); 
      if (false == TradeUtil.isStringNull(cifCodes)) { 
       mTracer.log("Fetching records for CIFs: " + StringUtils.replace(cifCodes, PIPE, COMMA)); 
       String[] codes = StringUtils.split(cifCodes, PIPE); 
       List<ExportAdvicesData> exportList = dao.getExportAdvices(trdCustomerKy, lastRunDate, currentDate, codes); 
       for (int i = 0; i < exportList.size(); i++) { 

        ExportAdvicesData exportData = exportList.get(i); 

        if ("XXLC".equalsIgnoreCase(exportData.getDocAcronym())) { 
         Header header = new Header(); 
         header.setMessageType("N"); 
         header.setVersionNo("1.0"); 
         header.setRevisionNo("00"); 
         header.setDocumentDate(DateUtil.formatDate(new Date(), DATE_FORMAT_YYYY_MM_DD_HHMMSS)); 
         header.setBankId("BOA" + StringUtils.substring(exportData.getCustRef(), 0, 4)); 
         header.setCustId("XOM"); 
         SwiftDetails swiftTest = new SwiftDetails(); 
         header.setDocumentType(MT700_MSGTYPE); 

         SwiftParserBankDocs parser = new SwiftParserBankDocs(exportData.getDocumentContent()); 

         String bankRef = parser.getTagValue("21"); 
         String custRef = parser.getTagValue("20"); 

         if (TradeUtil.isStringNull(bankRef)) { 
          header.setCustRefNo("NONREF"); 
          header.setBankRefNo(custRef); 
         } else { 
          header.setCustRefNo(custRef); 
          header.setBankRefNo(bankRef); 
         } 

         swiftTest.setTAG_27("1/1"); 
         swiftTest.setTAG_20(custRef); 
         swiftTest.setTAG_23(EMPTY_STRING); 
         String issueDate = parser.getTagValue("31C"); 
         swiftTest.setTAG_31C(getDateInYYMMDD(issueDate)); 
         swiftTest.setTAG_40E("UCP LATEST VERSION"); 
         String datePlaceOfExpiry = parser.getTagValue("31D"); 
         swiftTest.setTAG_31D(getFormattedDatePlaceOfExpiry(datePlaceOfExpiry)); 
         swiftTest.setTAG_50(parser.getTagValue("50")); 
         swiftTest.setTAG_59(parser.getTagValue("59")); 
         swiftTest.setTAG_32B(getCurrencyCdAmount(parser.getTagValue("32B"))); 
         if (false == TradeUtil.isStringNull(exportData.getPositiveTolerance())) { 
          swiftTest.setTAG_39A(
            exportData.getPositiveTolerance() + "/" + exportData.getPositiveTolerance()); 
         } else { 
          swiftTest.setTAG_39A(EMPTY_STRING); 
         } 
         swiftTest.setTAG_39B(EMPTY_STRING); 
         swiftTest.setTAG_39C(EMPTY_STRING); 
         swiftTest.setTAG_41A(parser.getTagValue("41D")); 
         String tag42A = parser.getTagValue("42A"); 
         swiftTest.setTAG_42A(tag42A); 
         if (TradeUtil.isStringNull(tag42A)) { 
          swiftTest.setTAG_42A(parser.getTagValue("42D")); 
         } 

         swiftTest.setTAG_42C(parser.getTagValue("42C")); 
         swiftTest.setTAG_42M(parser.getTagValue("42M")); 
         swiftTest.setTAG_42P(parser.getTagValue("42P")); 
         swiftTest.setTAG_43P(parser.getTagValue("43P")); 
         swiftTest.setTAG_43T(parser.getTagValue("43T")); 

         if (!(TradeUtil.isStringNull(parser.getTagValue("44A")))) { 
          swiftTest.setTAG_44A(parser.getTagValue("44A")); 
         } 

         if (!(TradeUtil.isStringNull(parser.getTagValue("44B")))) { 
          swiftTest.setTAG_44B(parser.getTagValue("44B")); 
         } 

         if (!(TradeUtil.isStringNull(parser.getTagValue("44E")))) { 
          swiftTest.setTAG_44E(parser.getTagValue("44E")); 
         } 

         if (!(TradeUtil.isStringNull(parser.getTagValue("44F")))) { 
          swiftTest.setTAG_44F(parser.getTagValue("44F")); 
         } 

         Date latestShipDate = exportData.getLatestShipDate(); 
         if (null != latestShipDate) { 
          swiftTest.setTAG_44C(DateUtil.formatDate(latestShipDate, DATE_FORMAT_YYMMDD)); 
         } else { 
          swiftTest.setTAG_44C(EMPTY_STRING); 
         } 
         swiftTest.setTAG_44D(parser.getTagValue("44D")); 

         swiftTest.setTAG_45A(parser.getTagValue("45") + BLANK_STRING + parser.getTagValue("45A") 
           + BLANK_STRING + parser.getTagValue("45B")); 
         swiftTest.setTAG_46A(parser.getTagValue("46") + BLANK_STRING + parser.getTagValue("46A") 
           + BLANK_STRING + parser.getTagValue("46B")); 
         swiftTest.setTAG_47A(parser.getTagValue("47") + BLANK_STRING + parser.getTagValue("47A") 
           + BLANK_STRING + parser.getTagValue("47B")); 
         swiftTest.setTAG_71B(parser.getTagValue("71B")); 
         swiftTest.setTAG_48(parser.getTagValue("48")); 
         swiftTest.setTAG_49(parser.getTagValue("49")); 
         swiftTest.setTAG_50B(EMPTY_STRING); 
         swiftTest.setTAG_51A(EMPTY_STRING); 

         String issuingBank = parser.getAddress(SwiftParserBankDocs.ISSUING_BANK); 
         if (TradeUtil.isStringNull(issuingBank)) { 
          String errorMsg = "Issuing Bank address not found in bankdoc text, SWIFT content is possibly invalid, skipped processed record: " 
            + exportData.getCustRef(); 
          smLog.error(errorMsg); 
          mTracer.log("ERROR: " + errorMsg); 

         } 
         issuingBank = StringUtils.replace(issuingBank, CRLF, BLANK_STRING + CRLF); 
         swiftTest.setTAG_52A(issuingBank); 
         swiftTest.setTAG_53A(parser.getTagValue("53A")); 
         swiftTest.setTAG_78(parser.getTagValue("78")); 
         swiftTest.setTAG_57A(parser.getAddress("TO:")); 
         swiftTest.setTAG_72(parser.getTagValue("72")); 
         swiftTest.setTAG_40A(parser.getTagValue("40B")); 
         if (parser.is710Advice()) { 
          swiftTest.setTAG_20(parser.getTagValue("21")); 

         } 
         mt700.setSwift700(swiftTest); 
         mt700.setHeader(header); 
        } else if ("XAMD".equalsIgnoreCase(exportData.getDocAcronym())) { 
         Header header = new Header(); 
         header.setMessageType("N"); 
         header.setVersionNo("1.0"); 
         header.setRevisionNo("00"); 
         header.setDocumentDate(DateUtil.formatDate(new Date(), DATE_FORMAT_YYYY_MM_DD_HHMMSS)); 
         header.setBankId("BOA" + StringUtils.substring(exportData.getCustRef(), 0, 4)); 
         header.setCustId("XOM"); 
         SwiftDetails swift = new SwiftDetails(); 
         header.setDocumentType(MT707_MSGTYPE); 
         SwiftParserBankDocs parser = new SwiftParserBankDocs(exportData.getDocumentContent()); 

         String custRef = parser.getTagValue("20"); 
         String bankRef = parser.getTagValue("23"); 

         if (TradeUtil.isStringNull(bankRef)) { 
          header.setBankRefNo("NONREF"); 
         } else { 
          header.setBankRefNo(bankRef); 
         } 
         header.setCustRefNo(custRef); 
         swift.setTAG_20(custRef); 
         swift.setTAG_21(parser.getTagValue("21")); 
         swift.setTAG_23(EMPTY_STRING); 
         String issuingBank = parser.getAddress(SwiftParserBankDocs.ISSUING_BANK); 
         if (TradeUtil.isStringNull(issuingBank)) { 
          String errorMsg = "Issuing Bank address not found in bankdoc text, SWIFT content is possibly invalid, skipped processed record: " 
            + exportData.getCustRef(); 
          smLog.error(errorMsg); 
          mTracer.log("ERROR: " + errorMsg); 
          swift.setTAG_52A(EMPTY_STRING); 
         } else { 
          issuingBank = StringUtils.replace(issuingBank, CRLF, BLANK_STRING + CRLF); 
          swift.setTAG_52A(issuingBank); 
         } 
         swift.setTAG_31C(getDateInYYMMDD(parser.getTagValue("31C"))); 
         swift.setTAG_30(getDateInYYMMDD(parser.getTagValue("30"))); 
         swift.setTAG_26E(parser.getTagValue("26E")); 
         swift.setTAG_59(parser.getTagValue("59")); 
         swift.setTAG_31E(getDateInYYMMDD(parser.getTagValue("31E"))); 
         swift.setTAG_79(parser.getTagValue("79")); 
         swift.setTAG_72(parser.getTagValue("72")); 
         swift.setTAG_32B(getCurrencyCdAmount(parser.getTagValue("32B"))); 
         swift.setTAG_33B(getCurrencyCdAmount(parser.getTagValue("33B"))); 
         swift.setTAG_34B(getCurrencyCdAmount(parser.getTagValue("34B"))); 
         swift.setTAG_39A(parser.getTagValue("39A")); 
         swift.setTAG_39B(parser.getTagValue("39B")); 
         swift.setTAG_39C(parser.getTagValue("39C")); 
         swift.setTAG_44A(parser.getTagValue("44A")); 
         swift.setTAG_44B(parser.getTagValue("44B")); 
         swift.setTAG_44C(parser.getTagValue("44C")); 
         swift.setTAG_44D(parser.getTagValue("44D")); 
         swift.setTAG_44E(parser.getTagValue("44E")); 
         swift.setTAG_44F(parser.getTagValue("44F")); 
         mt700.setHeader(header); 
         mt700.setSwift700(swift); 
        } 


       } 
      } 
      return mt700; 
     } 

これはMT700 POJOクラスです。このクラスでは、ヘッダーと素早く詳細なpojoクラスを呼び出しています。

@XmlRootElement(name = "MT700") 
    public class MT700 implements Serializable 
    { 

     /** 
     * serialVersionUID 
     */ 
     private static final long serialVersionUID = 1L; 

     private Header header; 
     private SwiftDetails swift700; 

     private String version = "1.0"; 

     public Header getHeader() 
     { 
      return header; 
     } 

     @XmlElement(name = "Header") 
     public void setHeader(Header header) 
     { 
      this.header = header; 
     } 

     /** 
     * @return the swift700 
     */ 
     public SwiftDetails getSwift700() 
     { 
      return swift700; 
     } 

     @XmlElement(name = "Swift_Details_700") 
     public void setSwift700(SwiftDetails swift700) 
     { 
      this.swift700 = swift700; 
     } 

     public String getVersion() 
     { 
      return version; 
     } 


     @XmlAttribute(name = "Version") 
     public void setVersion(String version) 
     { 
      this.version = version; 
     } 

    } 

これはヘッダークラ​​スです。私はポストを作るために、このクラスのゲッターとセッターを追加しておりませんタグを持っており、それが迅速詳細

@XmlRootElement(name = "Header") 
    @XmlType(propOrder = { "documentType", "messageType", "versionNo", 
      "revisionNo", "documentDate", "bankId", "custId", "custRefNo", 
      "bankRefNo" }) 
    public class Header implements Serializable 
    { 

     private static final long serialVersionUID = 1L; 

     private String documentType; 
     private String messageType; 
     private String versionNo; 
     private String revisionNo; 
     private String documentDate; 
     private String bankId; 
     private String custId; 
     private String custRefNo; 
     private String bankRefNo; 

である、これを好きに類似した私のクラスは、あなたが1つのMT700インスタンスを作成し、その後にされているシンプルな

答えて

0

を見ますこのループは、ループを通るたびに、ヘッダーを再割り当てし、迅速なフィールドされています。これは、あなたが出力されている文書がデータベースクエリから返されるだけで、最後のヘッダ/ SWIFTが含まれていることを意味

MT700 mt700 = new MT700(); 
for (int i = 0; i < exportList.size(); i++) { 
    ... 
    mt700.setHeader(header); 
    mt700.setSwift700(swift); 
} 

これらの3つのうちの1つ以上を何らかの並べ替えのリストにする必要があります。あなたのMT700には、ヘッダーとスウィフトのリストが含まれています。あるいは、ヘッダーとスウィフトをそれぞれ1つずつ持つMT700のリストを作成する可能性が高くなります。

つまり、XMLドキュメントの実際のルートとなる4番目のタイプを使用したいとします。この要素には、クエリによって検出された各行に対して1つのMT700要素が含まれます。各MT700要素には、ヘッダ要素とスウィフト要素があります。

ので、より具体的に、ここにあなたが何をしたいです:

@XmlRootElement 
class MT700s { 
    @XmlElement(name = "MT700") 
    private List<MT700> mt700s = new ArrayList<>(); 
    public List<MT700> getMT700s() { return mt700s; } 
    // Etc. 
} 

MT700s mt700s = new MT700s(); 
for (int i = 0; i < exportList.size(); i++) { 
    MT700 mt700 = new MT700(); 
    ... 
    mt700.setHeader(header); 
    mt700.setSwift700(swift); 
    mt700s.getMT700s().add(mt700); 
} 
+0

私は今、ファイルが生成なっていることでした。私はデータを持っていますが、XMLではありません。私はLIstを作成しました。しかし、JAXBではエラーが発生しています。 JAXBがリストを受け入れていないようです.... – Sam

+0

私はこの状況にぴったりです。私は何をすべきか? http://stackoverflow.com/questions/12139996/how-to-convert-arraylistobject-to-a-xml-using-jaxb – Sam

+0

その質問に対する答えは、あなたがしたいことを正確に示しています。より具体的なガイダンスを提供するために私の答えを編集します。 – Rob

関連する問題