0

電子メールの内容を含む XML ファイルを吐き出すアプリケーションがあります。この XML ファイルは別のアプリケーションによって解析され、電子メールが配信されます。アプリケーションが電子メールを送信する部分が検証されます。

実際にメールを送信するメソッドは次のとおりです。

public void sendEmail(List<String> toRecipients, List<String> ccRecipients, List<String> bccRecipients, String subject, String body) { 

// code.. 

}

送信しようとしているテスト メールは、次の XML ファイルから送信されます。

<?xml version="1.0" encoding="utf-8"?>
<email>
  <to>
    <recipient>user1@somecompany.com</recipient>
    <recipient>user2@somecompany.com</recipient>
  </to>
  <cc>
    <recipient>user3@somecompany.com</recipient>
  </cc>
  <bcc>
    <recipient>user5@somecompany.com</recipient>
  </bcc>
  <subject>test ABC </subject>
  <body><h1>test XYZ</h1></body>
</email>

私は XStream ライブラリを使用していますが、私の問題は のリストの解析にあります。私はいくつかの異なるアプローチを試みましたが、立ち往生しています。XML 解析方法は次のとおりです。

private void parseXmlFile(String xmlFilePath) {
        XStream xstream = new XStream(new DomDriver());

        xstream.alias("email", EmailPojo.class);
        xstream.alias("recipient", Recipient.class);
        xstream.alias("to", To.class);
        xstream.alias("cc", Cc.class);
        xstream.alias("bcc", Bcc.class);

        xstream.addImplicitCollection(To.class, "to", "to", Recipient.class);
        // xstream.addImplicitCollection(To.class, "to");
        // xstream.addImplicitCollection(Cc.class, "cc");
        // xstream.addImplicitCollection(Bcc.class, "bcc");

        EmailPojo emailPojo = new EmailPojo();

        StringBuilder sb = new StringBuilder();
        try {
            // filename is filepath string
            BufferedReader br = new BufferedReader(new FileReader(new File(xmlFilePath)));
            String line;

            while ((line = br.readLine()) != null) {
                sb.append(line.trim());
            }
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        List<EmailPojo> emailPojoList = new ArrayList<EmailPojo>();

        try {
            emailPojoList = (List<EmailPojo>) xstream.fromXML(sb.toString());

        } catch (Exception e) {
            emailPojo = null;// TODO: handle exception
        }
    }

これは簡単なことのように思えますが、私はこれをうまく進めることができません。ここで何が欠けていますか?ここで何が問題なのですか?

前もって感謝します!

編集:例外出力を忘れました:

Exception in thread "main" com.thoughtworks.xstream.InitializationException: No field "to"暗黙的なコレクション

4

1 に答える 1

1

この線:

xstream.addImplicitCollection(To.class, "to", "to", Recipient.class);

Toと呼ばれるクラスにコレクションフィールドtoがあり、そこにインスタンスをRecipient追加する必要があると言っています。

クラスを見ない限り、Toこれは推測ですが、クラスのコレクションフィールドのフィールドToが呼び出される可能性が高く、recipients登録する必要があると思います:

xstream.addImplicitCollection(To.class, "recipients", Recipient.class);

JavaDoc を参照してください。xstream.addImplicitCollection(Class, String, Class)

于 2013-01-21T13:05:01.453 に答える