2014-07-30 3 views
0

XML-файл выглядит следующим образом:XML в JavaBean

<AuthnRequest xmlns="A" ID="B"> 
    <Issuer xmlns="A">SOMETHING</Issuer> 
    <NameIDPolicy Format="B" AllowCreate="true"/> 
</AuthnRequest> 

Так как преобразовать этот файл с большим количеством атрибутов в бина?

Я устал это так, но не работает

@XmlRootElement(name="AuthnRequest") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class UserAuthn { 

    @XmlAttribute 
    private String xmlns; 
    @XmlAttribute 
    private String ID; 
    @XmlAttribute 
    private String Version; 
    @XmlAttribute 
    private String IssueInstant; 
    @XmlElement 
    private List<Issuer> Issuers; 
    @XmlElement 
    private List<NameIDPolicy> NameIDPolicys; 

    // Getters and Setters 
} 

Класс эмитента

private String xmlns; 

@XmlAttribute 
public String getXmlns() { 
    return xmlns; 
} 

public void setXmlns(String xmlns) { 
    this.xmlns = xmlns; 
} 

Класс NameIDPolicy тот же:

private String Format; 
private String AllowCreate; 

@XmlAttribute(name="AllowCreate") 
public String getFormat() { 
    return Format; 
} 

public void setFormat(String format) { 
    Format = format; 
} 
@XmlAttribute(name="Format") 
public String getAllowCreate() { 
    return AllowCreate; 
} 

public void setAllowCreate(String allowCreate) { 
    AllowCreate = allowCreate; 
} 

И ошибка

threw exception [Request processing failed; nested exception is 
javax.xml.bind.UnmarshalException: unexpected element (uri:"A", local:"AuthnRequest"). 
Expected elements are <{}AuthnRequest>] with root cause 
+0

Get (или записи) в XSD и использовать такой инструмент, как [JAXB] (HTTPS://jaxb.java.net/). – sp00m

+0

@ sp00m Привет. Не могли бы вы взглянуть на мою работу, которую уже сделали? –

+0

'xmlns' не является атрибутом, это объявление пространства имен. Вам необходимо настроить аннотации JAXB для использования правильного пространства имен, которое вы обычно делаете с аннотацией на уровне пакета. –

ответ

0

В сообщении об ошибке сообщается, что элемент <AuthnRequest> находится в пространстве имен A, и ваши аннотации не указывают это пространство имен. Это пространство имен задается в специальном xmlns атрибут, который вы пытаетесь сопоставить с @XmlAttribute

Попробуйте это:

@XmlRootElement(name="AuthnRequest", namespace="A") 

и удалить @XmlAttribute для xmlns.

Вы можете также указать namespace для некоторых @XmlElement -annotated полей в UserAuthn, такие, как

@XmlElement(name="Issuer", namespace="A") 
private List<Issuer> Issuers; 
+0

Вы довольно правы! Спасибо. –

Смежные вопросы