2012-12-27 172 views
2

考虑:JAXB:内联元素

@XmlRootElement(name = "foo") 
class Foo { 
    public Bar getBar() {...} 
} 

class Bar { 
    @XmlElement(name = "string") 
    public String getString() {return "hello";} 
} 

我如何诠释这样XML将是:

<foo> 
    <string>hello</string> 
</foo> 

回答

3

你可以做以下借力@XmlValue注解。

@XmlRootElement 
class Foo { 
    @XmlElement(name="string") 
    public Bar getBar() {...} 
} 

酒吧

class Bar { 
    @XmlValue 
    public String getString() {return "hello";} 
} 

更多信息

+1

问题的提出方式,这个答案在技术上是正确的,并且应该被接受,尽管我猜这不是OP想要的。我想OP的主要关注点主要是消除 ...标签,而不是像XML内容那样渲染字符串。他可能想到了(像我一样)一个“Bar”对象,它除了一个字符串外还包含更多的东西,他希望所有这些东西都显示为没有“Bar”标签的“Foo”的直接子对象。 –

1

您可能需要使用@XmlSeeAlso注解你的类的顶部。

如果希望在XML输出中包含另一个实体bean,则可以使用@XmlSeeAlso批注。你可以在你的Foo类

@XmlRootElement(name = "foo") 
@XmlSeeAlso(Bar.class) 
class Foo { 
    public Bar getBar() {...} 
} 

UPDATE1试试这个:

的评论删除栏标签中的XML尝试使用EclipseLink JAXB (MOXy)'s。 @XmlPath将解决您的问题。

@XmlRootElement(name = "foo") 
@XmlSeeAlso(Bar.class) 
class Foo { 
    @XmlPath(".") 
    public Bar getBar() {...} 
} 

有关更多详细信息,请参阅here

+0

这是不是仍然导致你好? – IttayD

+0

你可以检查更新的答复。 – Jayamohan

+0

+1 - 你可以在这个用例中使用MOXy的'@ XmlPath'扩展,但是看看我的答案是如何使用标准的JAXB注解来完成这个工作的:http://stackoverflow.com/a/14052993/383861。这个用例不需要'@ XmlSeeAlso'注解。 –