Создать и заполнить очень большой автоматически сгенерированный с классом CXF - PullRequest
0 голосов
/ 26 апреля 2018

У меня очень большой объект, сгенерированный с org.apache.cxf

Этот класс выглядит так:

public class AcceptorBatchTransfer {

    @XmlElement(name = "Hdr", required = true)
    protected Header3 hdr;
    @XmlElement(name = "DataSet", required = true)
    protected List<CardPaymentDataSet1> dataSet;
    @XmlElement(name = "SctyTrlr", required = true)
    protected ContentInformationType1 sctyTrlr;

    getters and setters and not constructor

Класс Header3 выглядит следующим образом:

public class Header3 {

    @XmlElement(name = "DwnldTrf")
    protected boolean dwnldTrf;
    @XmlElement(name = "FrmtVrsn", required = true)
    protected String frmtVrsn;
    @XmlElement(name = "XchgId", required = true)
    protected String xchgId;
    @XmlElement(name = "CreDtTm", required = true)
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar creDtTm;
    @XmlElement(name = "InitgPty", required = true)
    protected GenericIdentification32 initgPty;
    @XmlElement(name = "RcptPty")
    protected GenericIdentification32 rcptPty;

    getters and setters and not constructor

И все вложенные классы выглядят одинаково. Мне нужно создать и заполнить это AcceptorBatchTransfer, и мне нужно написать очень-очень много кода ((((((

Это выглядит так

final AcceptorBatchTransferV01 acceptBTransfer = new AcceptorBatchTransferV01();
      request.setAccptrBtchTrf(acceptBTransfer);

      Header3 header = createHeader(paymentRequest.getInitgPty());
      acceptBTransfer.setHdr(header);

      final List<CardPaymentDataSet1> dataSets = acceptBTransfer.getDataSet();
      CardPaymentDataSet1 dataSet = createDataSet(paymentRequest);
      dataSets.add(dataSet);
...
private Header3 createHeader(String senderId) {
    final Header3 header = new Header3();
    header.setDwnldTrf(DWNLD_TRF);
    header.setFrmtVrsn(FRMT_VRSN);
    header.setXchgId(XCHG_ID);
    final XMLGregorianCalendar creDtTm = XMLGregorianCalendarConverter.asXMLGregorianCalendar(new Date());
    header.setCreDtTm(creDtTm);
    final GenericIdentification32 sender = new GenericIdentification32();
    sender.setId(senderId);//MEGAR
    header.setInitgPty(sender);
    return header;
  }

и 277 строк кода для заполнения одного объекта! Я хочу упростить этот процесс, но я знаю, как.

Эти классы созданы с помощью cxf и не имеют конструкторов. Маббе, есть подходящий дизайн шаблона? Я не могу создать Builder, потому что классы создаются автоматически. Может быть, я могу создать какую-нибудь обертку ... или что-то еще?

1 Ответ

0 голосов
/ 27 апреля 2018

Если вы хотите автоматически сгенерировать конструктор для сгенерированного pojo. Вы можете использовать плагин-конструктор значений как зависимость от cxf-codegen-plugin, а затем передать аргумент -xjc-Xvalue-constructor в плагин, чтобы включить его.

 <dependency>
      <groupId>org.jvnet.jaxb2_commons</groupId>
      <artifactId>jaxb2-value-constructor</artifactId>
      <version>3.0</version>
 </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...