相关疑难解决方法(0)

是否可以以编程方式配置JAXB?

说我有两个JavaBeans PersonAddress.

如果我创建一个Person对象列表,我想编组这样的东西:

<persons>
  <person>...</person>
</persons>
Run Code Online (Sandbox Code Playgroud)

可以使用此处描述的技术: 使用JAXB解组/编组List <String>

通过使用@XmlRootElement(name = "persons")和注释JaxbList,@XmlElement(name = "person")可以编组上面的XML.

但是,能够重用同一个JaxbList<T>类来编组Address对象列表会很好.实际上,我会有很多其他类型的豆子.我可以用以下的东西:

<list>
   <item xsi:type="person" xmlns:xsi="http://www.w2.org/2001/XmlSchema-instance"></item>
</list>
Run Code Online (Sandbox Code Playgroud)

但是,理想情况下,将"list"替换为复数版本的类名称和"item"替换为类名称会很好.

那么,是否有可能在运行时以编程方式配置JaxbContext或其他东西,并基本上设置name内部的值@XmlRootElement@XmlElement

或者任何其他方式让这个工作,而不必JaxbList为每个bean类型编写单独的实现?也许XmlJavaTypeAdapter可以实现这种事情?

更新 @Blaise Doughan在下面接受的解决方案非常有用.对于我的用例,我需要直接从Java对象到XML,这里有用(注意这不是我的完整实现,它只是用于演示的伪代码):

    //JAXBContext is thread safe and so create it in constructor or 
    //setter or wherever:
    ... 
    JAXBContext jc = JAXBContext.newInstance(Wrapper.class, clazz);
    ... 

    public String marshal(List<T> things, Class clazz) {

      //configure JAXB and marshaller     
      Marshaller m = …
Run Code Online (Sandbox Code Playgroud)

java jaxb

19
推荐指数
1
解决办法
9519
查看次数

RESTEasy返回的集合中的根元素名称

我在JBoss AS 6中通过RestEasy使用JAX-RS.当我的JAX-RS资源返回一组项目时(例如通过List),RESTEasy总是使用该名称collection作为根元素.

例如

<collection>    
   <item>
     <description>computer</description>
     <price>2500</price>
   </item>

   <item>
     <description>tv</description>
     <price>1500</price>
   </item>
</collection>
Run Code Online (Sandbox Code Playgroud)

此XML由以下内容生成:

@Produces("application/xml")
@Path("xml")
@RequestScoped
public class MyResource {

    @GET
    @Path("myitems")
    public List<Item> getMyItems() {
        return ...
    }
}
Run Code Online (Sandbox Code Playgroud)

可以看出,RESTEasy创建的根标记始终是<collection>.

另一方面,泽西岛总是创建一个名称,该名称是列表中包含的元素的复数形式:

<items>    
   <item>
     <description>computer</description>
     <price>2500</price>
   </item>

   <item>
     <description>tv</description>
     <price>1500</price>
   </item>
</items>
Run Code Online (Sandbox Code Playgroud)

我知道可以创建一个包装器类型并返回而不是List,但这是一个相当精细的解决方法,并使代码更复杂.

是否可以轻松指定集合的​​根标签名称?

java jax-rs jaxb resteasy

15
推荐指数
1
解决办法
4041
查看次数

标签 统计

java ×2

jaxb ×2

jax-rs ×1

resteasy ×1