Java JAXB解组列表

Java JAXB解组列表,java,xml,jaxb,Java,Xml,Jaxb,我试图将这个XML解组为Java对象,一个包含电子邮件地址列表的客户对象 <customer> <emailAddresses>janed@example.com</emailAddresses> <emailAddresses>jdoe@example.org</emailAddresses> </customer> 单元测试失败 @Test public void shouldDeserialiseCusomerX

我试图将这个XML解组为Java对象,一个包含电子邮件地址列表的客户对象

<customer>
 <emailAddresses>janed@example.com</emailAddresses>
 <emailAddresses>jdoe@example.org</emailAddresses>
</customer>
单元测试失败

@Test
public void shouldDeserialiseCusomerXMLToObject() throws JAXBException
{
    String xml = "<customer>"
            + "    <emailAddresses>janed@example.com</emailAddresses>"
            + "    <emailAddresses>jdoe@example.org</emailAddresses>"
            + "</customer>";

    JAXBContext jaxbContext = JAXBContext.newInstance( Customer.class );
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

    StringReader reader = new StringReader( xml );
    Customer msg = ( Customer ) jaxbUnmarshaller.unmarshal( reader );

    // This passes, I have 2 emailAddresses
    assertEquals( 2, msg.getEmailAddresses().size() );

    // This fails, I have a null pointer instead of the email address
    assertEquals( "janed@example.com", msg.getEmailAddresses().get( 0 ).getEmailAddresses() );
}
@测试
public void应反序列化SecureSomerXmlToObject()引发JAXBEException
{
字符串xml=“”
+ "    janed@example.com"
+ "    jdoe@example.org"
+ "";
JAXBContext JAXBContext=JAXBContext.newInstance(Customer.class);
解组器jaxbUnmarshaller=jaxbContext.createUnmarshaller();
StringReader=新的StringReader(xml);
Customer msg=(Customer)jaxbunmarshall.unmarshal(reader);
//通过后,我有2个电子邮件地址
assertEquals(2,msg.getEmailAddresses().size());
//这失败了,我有一个空指针,而不是电子邮件地址
资产质量(”janed@example.com,msg.getEmailAddresses().get(0.getEmailAddresses());
}

您的电子邮件地址太多了

如果您应该将电子邮件地址列表更改为字符串列表,如

@XmlRootElement( name = "customer" )
public class Customer
{
    private List<String> emailAddresses;

    public Customer()
    {
        emailAddresses = new ArrayList<String>();
    }

    public List<String> getEmailAddresses()
    {
        return emailAddresses;
    }

    public void setEmailAddresses( List<String> emailAddresses )
    {
        this.emailAddresses = emailAddresses;
    }
}
@XmlRootElement(name=“customer”)
公共类客户
{
私人名单电邮地址;
公众客户()
{
emailAddresses=新的ArrayList();
}
公共列表getEmailAddresses()
{
返回电子邮件地址;
}
public void setEmailAddresses(列出emailAddresses)
{
this.emailAddresses=电子邮件地址;
}
}

您的电子邮件地址太多了

如果您应该将电子邮件地址列表更改为字符串列表,如

@XmlRootElement( name = "customer" )
public class Customer
{
    private List<String> emailAddresses;

    public Customer()
    {
        emailAddresses = new ArrayList<String>();
    }

    public List<String> getEmailAddresses()
    {
        return emailAddresses;
    }

    public void setEmailAddresses( List<String> emailAddresses )
    {
        this.emailAddresses = emailAddresses;
    }
}
@XmlRootElement(name=“customer”)
公共类客户
{
私人名单电邮地址;
公众客户()
{
emailAddresses=新的ArrayList();
}
公共列表getEmailAddresses()
{
返回电子邮件地址;
}
public void setEmailAddresses(列出emailAddresses)
{
this.emailAddresses=电子邮件地址;
}
}

您的电子邮件地址太多了

如果您应该将电子邮件地址列表更改为字符串列表,如

@XmlRootElement( name = "customer" )
public class Customer
{
    private List<String> emailAddresses;

    public Customer()
    {
        emailAddresses = new ArrayList<String>();
    }

    public List<String> getEmailAddresses()
    {
        return emailAddresses;
    }

    public void setEmailAddresses( List<String> emailAddresses )
    {
        this.emailAddresses = emailAddresses;
    }
}
@XmlRootElement(name=“customer”)
公共类客户
{
私人名单电邮地址;
公众客户()
{
emailAddresses=新的ArrayList();
}
公共列表getEmailAddresses()
{
返回电子邮件地址;
}
public void setEmailAddresses(列出emailAddresses)
{
this.emailAddresses=电子邮件地址;
}
}

您的电子邮件地址太多了

如果您应该将电子邮件地址列表更改为字符串列表,如

@XmlRootElement( name = "customer" )
public class Customer
{
    private List<String> emailAddresses;

    public Customer()
    {
        emailAddresses = new ArrayList<String>();
    }

    public List<String> getEmailAddresses()
    {
        return emailAddresses;
    }

    public void setEmailAddresses( List<String> emailAddresses )
    {
        this.emailAddresses = emailAddresses;
    }
}
@XmlRootElement(name=“customer”)
公共类客户
{
私人名单电邮地址;
公众客户()
{
emailAddresses=新的ArrayList();
}
公共列表getEmailAddresses()
{
返回电子邮件地址;
}
public void setEmailAddresses(列出emailAddresses)
{
this.emailAddresses=电子邮件地址;
}
}

默认情况下,
EmailAddress
EmailAddress
字段被视为子元素,希望XML为:

<customer>
    <emailAddresses>
        <emailAddresses>janed@example.com</emailAddresses>
    </emailAddresses>
    <emailAddresses>
        <emailAddresses>jdoe@example.org</emailAddresses>
    </emailAddresses>
</customer>

@XmlValue
注释与结合使用时特别有用,以支持如下XML:

<Person sex="male" age="25">John Doe</Person>

默认情况下,
EmailAddress
EmailAddress
字段被视为一个子元素,希望XML为:

<customer>
    <emailAddresses>
        <emailAddresses>janed@example.com</emailAddresses>
    </emailAddresses>
    <emailAddresses>
        <emailAddresses>jdoe@example.org</emailAddresses>
    </emailAddresses>
</customer>

@XmlValue
注释与结合使用时特别有用,以支持如下XML:

<Person sex="male" age="25">John Doe</Person>

默认情况下,
EmailAddress
EmailAddress
字段被视为一个子元素,希望XML为:

<customer>
    <emailAddresses>
        <emailAddresses>janed@example.com</emailAddresses>
    </emailAddresses>
    <emailAddresses>
        <emailAddresses>jdoe@example.org</emailAddresses>
    </emailAddresses>
</customer>

@XmlValue
注释与结合使用时特别有用,以支持如下XML:

<Person sex="male" age="25">John Doe</Person>

默认情况下,
EmailAddress
EmailAddress
字段被视为一个子元素,希望XML为:

<customer>
    <emailAddresses>
        <emailAddresses>janed@example.com</emailAddresses>
    </emailAddresses>
    <emailAddresses>
        <emailAddresses>jdoe@example.org</emailAddresses>
    </emailAddresses>
</customer>

@XmlValue
注释与结合使用时特别有用,以支持如下XML:

<Person sex="male" age="25">John Doe</Person>

我做不到,因为我还需要向emailAddresses添加一些XML属性(代码中省略),我做不到,因为我还需要向emailAddresses添加一些XML属性(代码中省略),我做不到,因为我还需要向emailAddresses添加一些XML属性(代码中省略),我做不到,由于我还需要向emailAddresses添加一些XML属性(代码中省略),我已尝试按照下面的说明添加多个注释,但没有成功。我尝试按照下面的说明添加多个注释,但没有成功。我尝试按照下面的说明添加多个注释,但没有成功。我尝试按照下面的说明添加多个注释,但是运气不好。谢谢你的详细解释,非常感谢!现在工作很好。非常感谢您的详细解释,非常感谢!现在工作很好。非常感谢您的详细解释,非常感谢!现在工作很好。非常感谢您的详细解释,非常感谢!现在工作得很好。