如何对具有包名称的元素进行 JaxB XML 解组/编组?

问题描述 投票:0回答:1

我得到了以下 XML,其中元素名称与其包名称一起出现。如何使用 JaxB 编组/解组给定的 XML?

<com.jaraws.api.Vehicle>
  <number>KT12356</number>
  <engine>DIESEL<engine>
</com.jaraws.api.Vehicle>

Java 类写成:

package com.jaraws.api;

@XmlRootElement
public class Vehicle{
  private String number;
  private String engine;

  // Getters Setter for number and engine attributes
  @XmlElement
  public String getNumber(){
    return number;
  }

  public void setNumber(){
    this.number=number;
  }

  @XmlElement
  public String getEngine(){
    return engine;
  }

  public void setEngine(){
    this.engine=engine;
  }
}

它是否可以实现,或者我没有在正确的事情上做某事。我只想以给定的格式编组/解组 xml。

java jaxb xml-binding jaxb2-basics
1个回答
0
投票

按照 Thomas 在评论中的建议,只需将

name
属性添加到
@XmlRootElement
注释到您期望的名称即可:

@XmlRootElement(name = "com.jaraws.api.Vehicle")
public class Vehicle {
  // class definition ...
}

您不能执行以下操作:

@XmlRootElement(name = Vehicle.class.getName())

如果您尝试这样做,您将收到以下错误:

The value for annotation attribute XmlRootElement.name must be a constant expression

默认情况下,根据javadoc,如果未设置名称,则它是从类名派生的:

public @interface XmlRootElement {
    // some stuff

    /**
     * local name of the XML element.
     * <p>
     * If the value is "##default", then the name is derived from the
     * class name. 
     *
     */
    String name() default "##default";
}

不指定名称元素将导致以下名称

vehicle
(有关更多信息,请参阅
org.glassfish.jaxb.runtime.v2.model.impl.TypeInfoImpl#parseElementName
方法)

© www.soinside.com 2019 - 2024. All rights reserved.