将xml解析为java对象时没有单个字符串构造函数/工厂方法错误

将xml解析为java对象时没有单个字符串构造函数/工厂方法错误,java,json,xml,jackson,fasterxml,Java,Json,Xml,Jackson,Fasterxml,我试图将xml响应转换为java对象,但在解析时出错。我尝试了所有的选择,但没有成功。xml可以有多个标记。 将xml标记转换为数组对象时基本上会出现错误。 我的课程是: public static AHBESBFetchAllAccountsFullResponse parseXMLResponseForGetAllAccounts(byte[] response) throws JsonParseException, JsonMappingException, IOE

我试图将xml响应转换为java对象,但在解析时出错。我尝试了所有的选择,但没有成功。xml可以有多个标记。 将xml标记转换为数组对象时基本上会出现错误。 我的课程是:

public static AHBESBFetchAllAccountsFullResponse parseXMLResponseForGetAllAccounts(byte[] response)
            throws JsonParseException, JsonMappingException, IOException {
        ObjectMapper objectMapper;
        AHBESBFetchAllAccountsFullResponse getAllAccountsResponse = null;
        System.err.println(response);
        objectMapper = new XmlMapper();
        getAllAccountsResponse = objectMapper.readValue(StringUtils.toEncodedString(response, StandardCharsets.UTF_8),
                AHBESBFetchAllAccountsFullResponse.class);
        System.err.println(getAllAccountsResponse.getResponseBody().getCustomerAccountsReply().getCustomerNumber());
        return getAllAccountsResponse;
    }
帐目摘要答覆:

public class AccountSummaryReply {
    @JacksonXmlProperty(localName = "AccountSubType")
    private String AccountSubType;

    @JacksonXmlProperty(localName = "WorkingBalance")
    private String WorkingBalance;

    @JacksonXmlProperty(localName = "AccountStatus")
    private String AccountStatus;

    @JacksonXmlProperty(localName = "AccountNumber")
    private String AccountNumber;

    @JacksonXmlProperty(localName = "BranchCode")
    private String BranchCode;

    @JacksonXmlProperty(localName = "AccountName")
    private String AccountName;

    @JacksonXmlProperty(localName = "OpenActualBalance")
    private String OpenActualBalance;

    @JacksonXmlProperty(localName = "Currency")
    private String Currency;

    @JacksonXmlProperty(localName = "IBAN")
    private String IBAN;

    @JacksonXmlProperty(localName = "AccountType")
    private String AccountType;

    public String getAccountSubType ()
    {
        return AccountSubType;
    }

    public void setAccountSubType (String AccountSubType)
    {
        this.AccountSubType = AccountSubType;
    }

    public String getWorkingBalance ()
    {
        return WorkingBalance;
    }

    public void setWorkingBalance (String WorkingBalance)
    {
        this.WorkingBalance = WorkingBalance;
    }

    public String getAccountStatus ()
    {
        return AccountStatus;
    }

    public void setAccountStatus (String AccountStatus)
    {
        this.AccountStatus = AccountStatus;
    }

    public String getAccountNumber ()
    {
        return AccountNumber;
    }

    public void setAccountNumber (String AccountNumber)
    {
        this.AccountNumber = AccountNumber;
    }

    public String getBranchCode ()
    {
        return BranchCode;
    }

    public void setBranchCode (String BranchCode)
    {
        this.BranchCode = BranchCode;
    }

    public String getAccountName ()
    {
        return AccountName;
    }

    public void setAccountName (String AccountName)
    {
        this.AccountName = AccountName;
    }

    public String getOpenActualBalance ()
    {
        return OpenActualBalance;
    }

    public void setOpenActualBalance (String OpenActualBalance)
    {
        this.OpenActualBalance = OpenActualBalance;
    }

    public String getCurrency ()
    {
        return Currency;
    }

    public void setCurrency (String Currency)
    {
        this.Currency = Currency;
    }

    public String getIBAN ()
    {
        return IBAN;
    }

    public void setIBAN (String IBAN)
    {
        this.IBAN = IBAN;
    }

    public String getAccountType ()
    {
        return AccountType;
    }

    public void setAccountType (String AccountType)
    {
        this.AccountType = AccountType;
    }

    @Override
    public String toString()
    {
        return "AccountSummaryReply [AccountSubType = "+AccountSubType+", WorkingBalance = "+WorkingBalance+", AccountStatus = "+AccountStatus+", AccountNumber = "+AccountNumber+", BranchCode = "+BranchCode+", AccountName = "+AccountName+", OpenActualBalance = "+OpenActualBalance+", Currency = "+Currency+", IBAN = "+IBAN+", AccountType = "+AccountType+"]";
    }}
操作会计报告:

public class OperativeAccountsReply {

    @JacksonXmlProperty(localName = "AccountSummaryReply")
    private AccountSummaryReply[] AccountSummaryReply;

    public AccountSummaryReply[] getAccountSummaryReply ()
    {
        return AccountSummaryReply;
    }

    public void setAccountSummaryReply (AccountSummaryReply[] AccountSummaryReply)
    {
        this.AccountSummaryReply = AccountSummaryReply;
    }

    @Override
    public String toString()
    {
        return "OperativeAccountsReply [AccountSummaryReply = "+AccountSummaryReply+"]";
    }
}
public class CustomerAccountsReply {

        @JacksonXmlProperty(localName = "FinanceAccountsReply")
        private FinanceAccountsReply FinanceAccountsReply;

        @JacksonXmlProperty(localName = "CustomerNumber")
        private String CustomerNumber;

        @JacksonXmlProperty(localName = "InvestmentAccountsReply")
        private InvestmentAccountsReply InvestmentAccountsReply;

        @JacksonXmlProperty(localName = "ReturnCode")
        private String ReturnCode;

        @JacksonXmlProperty(localName = "OperativeAccountsReply")
        private OperativeAccountsReply OperativeAccountsReply;

        @JacksonXmlProperty(localName = "ReferenceNum")
        private String ReferenceNum;

        @JacksonXmlProperty(localName = "ReturnText")
        private String ReturnText;

        public FinanceAccountsReply getFinanceAccountsReply ()
        {
            return FinanceAccountsReply;
        }

        public void setFinanceAccountsReply (FinanceAccountsReply FinanceAccountsReply)
        {
            this.FinanceAccountsReply = FinanceAccountsReply;
        }

        public String getCustomerNumber ()
        {
            return CustomerNumber;
        }

        public void setCustomerNumber (String CustomerNumber)
        {
            this.CustomerNumber = CustomerNumber;
        }

        public InvestmentAccountsReply getInvestmentAccountsReply ()
        {
            return InvestmentAccountsReply;
        }

        public void setInvestmentAccountsReply (InvestmentAccountsReply InvestmentAccountsReply)
        {
            this.InvestmentAccountsReply = InvestmentAccountsReply;
        }

        public String getReturnCode ()
        {
            return ReturnCode;
        }

        public void setReturnCode (String ReturnCode)
        {
            this.ReturnCode = ReturnCode;
        }

        public OperativeAccountsReply getOperativeAccountsReply ()
        {
            return OperativeAccountsReply;
        }

        public void setOperativeAccountsReply (OperativeAccountsReply OperativeAccountsReply)
        {
            this.OperativeAccountsReply = OperativeAccountsReply;
        }

        public String getReferenceNum ()
        {
            return ReferenceNum;
        }

        public void setReferenceNum (String ReferenceNum)
        {
            this.ReferenceNum = ReferenceNum;
        }

        public String getReturnText ()
        {
            return ReturnText;
        }

        public void setReturnText (String ReturnText)
        {
            this.ReturnText = ReturnText;
        }

        @Override
        public String toString()
        {
            return "CustomerAccountsReply [FinanceAccountsReply = "+FinanceAccountsReply+", CustomerNumber = "+CustomerNumber+", InvestmentAccountsReply = "+InvestmentAccountsReply+", ReturnCode = "+ReturnCode+", OperativeAccountsReply = "+OperativeAccountsReply+", ReferenceNum = "+ReferenceNum+", ReturnText = "+ReturnText+"]";
        }
    }
客户帐户报告:

public class OperativeAccountsReply {

    @JacksonXmlProperty(localName = "AccountSummaryReply")
    private AccountSummaryReply[] AccountSummaryReply;

    public AccountSummaryReply[] getAccountSummaryReply ()
    {
        return AccountSummaryReply;
    }

    public void setAccountSummaryReply (AccountSummaryReply[] AccountSummaryReply)
    {
        this.AccountSummaryReply = AccountSummaryReply;
    }

    @Override
    public String toString()
    {
        return "OperativeAccountsReply [AccountSummaryReply = "+AccountSummaryReply+"]";
    }
}
public class CustomerAccountsReply {

        @JacksonXmlProperty(localName = "FinanceAccountsReply")
        private FinanceAccountsReply FinanceAccountsReply;

        @JacksonXmlProperty(localName = "CustomerNumber")
        private String CustomerNumber;

        @JacksonXmlProperty(localName = "InvestmentAccountsReply")
        private InvestmentAccountsReply InvestmentAccountsReply;

        @JacksonXmlProperty(localName = "ReturnCode")
        private String ReturnCode;

        @JacksonXmlProperty(localName = "OperativeAccountsReply")
        private OperativeAccountsReply OperativeAccountsReply;

        @JacksonXmlProperty(localName = "ReferenceNum")
        private String ReferenceNum;

        @JacksonXmlProperty(localName = "ReturnText")
        private String ReturnText;

        public FinanceAccountsReply getFinanceAccountsReply ()
        {
            return FinanceAccountsReply;
        }

        public void setFinanceAccountsReply (FinanceAccountsReply FinanceAccountsReply)
        {
            this.FinanceAccountsReply = FinanceAccountsReply;
        }

        public String getCustomerNumber ()
        {
            return CustomerNumber;
        }

        public void setCustomerNumber (String CustomerNumber)
        {
            this.CustomerNumber = CustomerNumber;
        }

        public InvestmentAccountsReply getInvestmentAccountsReply ()
        {
            return InvestmentAccountsReply;
        }

        public void setInvestmentAccountsReply (InvestmentAccountsReply InvestmentAccountsReply)
        {
            this.InvestmentAccountsReply = InvestmentAccountsReply;
        }

        public String getReturnCode ()
        {
            return ReturnCode;
        }

        public void setReturnCode (String ReturnCode)
        {
            this.ReturnCode = ReturnCode;
        }

        public OperativeAccountsReply getOperativeAccountsReply ()
        {
            return OperativeAccountsReply;
        }

        public void setOperativeAccountsReply (OperativeAccountsReply OperativeAccountsReply)
        {
            this.OperativeAccountsReply = OperativeAccountsReply;
        }

        public String getReferenceNum ()
        {
            return ReferenceNum;
        }

        public void setReferenceNum (String ReferenceNum)
        {
            this.ReferenceNum = ReferenceNum;
        }

        public String getReturnText ()
        {
            return ReturnText;
        }

        public void setReturnText (String ReturnText)
        {
            this.ReturnText = ReturnText;
        }

        @Override
        public String toString()
        {
            return "CustomerAccountsReply [FinanceAccountsReply = "+FinanceAccountsReply+", CustomerNumber = "+CustomerNumber+", InvestmentAccountsReply = "+InvestmentAccountsReply+", ReturnCode = "+ReturnCode+", OperativeAccountsReply = "+OperativeAccountsReply+", ReferenceNum = "+ReferenceNum+", ReturnText = "+ReturnText+"]";
        }
    }
将xml解析为类的代码如下:

public static AHBESBFetchAllAccountsFullResponse parseXMLResponseForGetAllAccounts(byte[] response)
            throws JsonParseException, JsonMappingException, IOException {
        ObjectMapper objectMapper;
        AHBESBFetchAllAccountsFullResponse getAllAccountsResponse = null;
        System.err.println(response);
        objectMapper = new XmlMapper();
        getAllAccountsResponse = objectMapper.readValue(StringUtils.toEncodedString(response, StandardCharsets.UTF_8),
                AHBESBFetchAllAccountsFullResponse.class);
        System.err.println(getAllAccountsResponse.getResponseBody().getCustomerAccountsReply().getCustomerNumber());
        return getAllAccountsResponse;
    }
响应xml为:

<HB_EAI_REPLY>
    <HB_EAI_HEADER>
        <MsgFormat> FULL.ACCOUNT.INQUIRY </MsgFormat>
        <MsgVersion>0000</MsgVersion>
        <RequestorId>HB</RequestorId>
        <RequestorChannelId>IB</RequestorChannelId>
        <RequestorUserId/>
        <RequestorLanguage>E</RequestorLanguage>
        <RequestorSecurityInfo/>
        <EaiReference>0</EaiReference>
        <ReturnCode>0000</ReturnCode>
    </HB_EAI_HEADER>
    <Reply>
        <CustomerAccountsReply>
            <ReferenceNum>20100407183503799</ReferenceNum>
            <CustomerNumber>1234567</CustomerNumber>
            <ReturnText>OK</ReturnText>
            <OperativeAccountsReply>
                <AccountSummaryReply >  
                    <AccountNumber>545545453</AccountNumber>
                    <IBAN>AE12345678901234567890123456789012</IBAN>
                    <AccountType> </AccountType>
                    <AccountSubType />  
                    <AccountStatus>SA</AccountStatus>
                    <BranchCode>AE0010004</BranchCode>
                    <AccountName> Mohammad </AccountName>
                    <Currency >011</Currency >
                    <OpenActualBalance/>
                    <WorkingBalance > </WorkingBalance >
                </AccountSummaryReply>
                <AccountSummaryReply>   
                    <AccountNumber>545545453</AccountNumber>
                    <IBAN>AE12345678901234567890123456789012</IBAN>
                    <AccountType>Mohammad</AccountType >
                    <AccountSubType />  
                    <AccountStatus>SA</AccountStatus >
                    <BranchCode>AE0010004</BranchCode>
                    <AccountName/>
                    <Currency>011</Currency >
                    <OpenActualBalance>00</OpenActualBalance >
                    <WorkingBalance>AED</WorkingBalance >
                </AccountSummaryReply>
                </OperativeAccountsReply>
                    <InvestmentAccountsReply>
                        <InvestmentContract>
                            <InvestmentContractNo>0903123243</InvestmentContractNo>
                            <InvestmentHolderName>This is the holder’s Name</InvestmentHolderName>
                                    <InvestmentAccountType>One Year Term Deposit</InvestmentAccountType>
                                    <InvestmentBranchCode>AE0010004</InvestmentBranchCode>
                                    <InvestmentCurrencyCode>AED</InvestmentCurrencyCode>
                                    <InvestmentAmount>100000</InvestmentAmount>
                                    <InvestmentOpenDate>20090207</InvestmentOpenDate>
                                    <MaturityDate>20100207</MaturityDate>
                                    <DepositTenor>12</DepositTenor>
                                    <CategoryID>21016</CategoryID>
                                </InvestmentContract>
                                <InvestmentContract>
                            <InvestmentContractNo>0903123243</InvestmentContractNo>
                            <InvestmentHolderName>This is the holder’s Name</InvestmentHolderName>
                                    <InvestmentAccountType>One Year Term Deposit</InvestmentAccountType>
                                    <InvestmentBranchCode>AE0010004</InvestmentBranchCode>
                                    <InvestmentCurrencyCode>AED</InvestmentCurrencyCode>
                                    <InvestmentAmount>100000</InvestmentAmount>
                                    <InvestmentOpenDate>20090207</InvestmentOpenDate>
                                    <MaturityDate>20100207</MaturityDate>
                                    <DepositTenor>12</DepositTenor>
                                    <CategoryID>21016</CategoryID>
                                </InvestmentContract>
                            </InvestmentAccountsReply>
                            <FinanceAccountsReply>
                                <FinanceContract>
                                    <LoanContractNumber>LD0831601635</LoanContractNumber>
                                    <FinanceHolderName>This is the name of Finance Holder</FinanceHolderName>
                                    <FinanceBranchCode>AE0010004</FinanceBranchCode>
                                    <FinanceCurrencyCode>AED</FinanceCurrencyCode>
                                    <FinanceOpenDate>20081106</FinanceOpenDate>
                                    <InstallmentAmount>11974</InstallmentAmount>
                                    <OutstandingDueAmount>1939858.9</OutstandingDueAmount>
                                    <InitialLoanAmount>1127100</InitialLoanAmount>
                                    <DueDate>20100701</DueDate>
                                    <RemainingNoOfInstallments>162</RemainingNoOfInstallments>
                                    <InitialNoOfInstallments>180</InitialNoOfInstallments>
                                    <LoanType>Retail Tawaruq</LoanType>
                                    <NumOfDaysPastDuedate>32</NumOfDaysPastDuedate>
                                </FinanceContract>
                                <FinanceContract>
                                    <LoanContractNumber>LD0909004393</LoanContractNumber>
                                    <FinanceHolderName>This is the name of Finance Holder</FinanceHolderName>
                                    <FinanceBranchCode>AE0010004</FinanceBranchCode>
                                    <FinanceCurrencyCode>AED</FinanceCurrencyCode>
                                    <FinanceOpenDate>20090329</FinanceOpenDate>
                                    <InstallmentAmount>-301732.95</InstallmentAmount>
                                    <OutstandingDueAmount>1360190.99</OutstandingDueAmount>
                                    <InitialLoanAmount>2025000</InitialLoanAmount>
                                    <DueDate>20100930</DueDate>
                                    <RemainingNoOfInstallments>2</RemainingNoOfInstallments>
                                    <InitialNoOfInstallments>3</InitialNoOfInstallments>
                                    <LoanType>Leasehold - Regular Forward Ijara</LoanType>
                                    <NumOfDaysPastDuedate>32</NumOfDaysPastDuedate>
                                </FinanceContract>
                                </FinanceAccountsReply>
                                <ReturnCode>0000</ReturnCode>
                            </CustomerAccountsReply>
                            </Reply>    
                            </HB_EAI_REPLY>
AccountSummaryReply数组似乎已在XML中展开。它通常看起来像:

<AccountSummaryReplies>
   <AccountSummaryReply>
      <AccountNumber>545545453</AccountNumber>
   </AccountSummaryReply>
   <AccountSummaryReply>
      <AccountNumber>545545454</AccountNumber>
   </AccountSummaryReply>
</AccountSummaryReplies>
作为一个旁注,请考虑用X/MP>配置XMLMAPER。 这意味着XML中的所有属性名称都以大写字母开头,并允许跳过所有@JacksonXmlPropertylocalName=注释