@XmlAttribute显示为@XmlElement

时间:2011-08-25 14:50:35

标签: java xml soap

在我的网络服务上,我将变量定义为@XmlAttribute

@XmlAttribute
protected String domain;

但是当我通过SoapUi进行查询时,它显示为XML元素:

<ns:domain>domain</ns:domain>

我在代码中找不到任何错误..

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

您在字段上显示注释,但JAXB默认使用property(getter / setter方法)访问。您是否更改了JAXB的默认访问权限?尝试将注释放在getter方法上。

编辑:由于您似乎遇到了麻烦,这是一个可执行的示例:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.*;
import java.io.StringWriter;

public static void main(String[] args) throws Exception {
    Foo foo = new Foo("my attribute value", "my element value");
    Marshaller marshaller = JAXBContext.newInstance(Foo.class).createMarshaller();
    StringWriter stringWriter = new StringWriter();
    marshaller.marshal(foo, stringWriter);
    System.out.println(stringWriter);
}

@XmlRootElement
static class Foo {
    private String anAttribute;
    private String anElement;

    Foo() {}

    public Foo(String anAttribute, String anElement) {
        this.anAttribute = anAttribute;
        this.anElement = anElement;
    }

    @XmlAttribute
    public String getAnAttribute() { return anAttribute; }
    @XmlElement
    public String getAnElement() { return anElement; }
}

输出(格式化):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo anAttribute="my attribute value">
    <anElement>my element value</anElement>
</foo>

答案 1 :(得分:1)

我使用Axis 2代码生成器重新实现了该项目。现在它有效。

我不知道这是什么错误..