【问题标题】:Pojo Class (XML to Object )Pojo 类(XML 到对象)
【发布时间】:2016-09-01 06:40:13
【问题描述】:

我正在尝试为以下 XML 创建 POJO 类,其余部分很好,但我无法获取参数标记的值,即 valueB、valueC。

我已经为下面的 xml 创建了 Step 、 Input 和 Parameter pojo 类,下面提到了其中的参数类代码。

下面是 XML:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE step SYSTEM "step.dtd">
<step>
    <class>Step</class>
    <description> test </description>
    <input>
        <parameter name="A" overwrite="yes"/>
        <parameter name="B" overwrite="yes">valueB</parameter>
        <parameter name="C" overwrite="yes">valueC</parameter>      
</input>
</step>

Pojo 类:

public class Parameter
{
    private String name;
    private String parameter; 

    private String content;

    public String getContent ()
    {
        return content;
    }

    public String setContent ()
    {
        return content;
    }



    private String overwrite;
    @XmlAttribute 
    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    public String getOverwrite ()
    {
        return overwrite;
    }

    public void setOverwrite (String overwrite)
    {
        this.overwrite = overwrite;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [content = "+content+",name = "+name+", overwrite = "+overwrite+", parameter="+parameter+"]";
    }
}

输入类:

public class Input
{
    private Parameter[] parameter;

    public Parameter[] getParameter ()
    {
        return parameter;
    }

    public void setParameter (Parameter[] parameter)
    {
        this.parameter = parameter;
    }



    @Override
    public String toString()
    {
        return "ClassPojo [parameter = "+parameter+"]";
    }
}

步骤类:

@XmlRootElement(name="step")
public class Step
{
    private Input input;

    private String description;

    private String class1;

    private Output output;

    public Input getInput ()
    {
        return input;
    }

    public void setInput (Input input)
    {
        this.input = input;
    }

    public String getDescription ()
    {
        return description;
    }

    public void setDescription (String description)
    {
        this.description = description;
    }

    public String getClass1 ()
    {
        return class1;
    }

    public void setClass (String class1)
    {
        this.class1 = class1;
    }

    public Output getOutput ()
    {
        return output;
    }

    public void setOutput (Output output)
    {
        this.output = output;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [input = "+input+", description = "+description+", class = "+class1+", output = "+output+"]";
    }
}

【问题讨论】:

  • 检查pojo类中的setContent()方法是返回内容,改一下
  • 我已经尝试在参数类中添加 getContent() 、 setContent() 是否需要在这些 gettter setter 上方添加任何注释才能使其正常工作。
  • 您使用的是哪个解析器?
  • 我正在使用 JAXB。
  • 可以参考以下链接javatpoint.com/jaxb-tutorial

标签: java jaxb pojo


【解决方案1】:

将@XmlValue 添加到参数类中的内容字符串中。

您还必须将 @XmlAttribute 添加到您的 getOverwrite() 方法中才能正常工作。

【讨论】:

  • 添加@XmlValue 后我得到以下异常:
  • com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 计数 IllegalAnnotationExceptions 如果一个类有@XmlElement 属性,它不能有@XmlValue 属性。此问题与以下位置有关:在 private java.lang.String Parameter.content at Parameter at public Parameter[] Input.getParameter() at Input at public Input Step.getInput() at Step 此问题与以下有关位置:在公共 java.lang.String Parameter.getOverwrite()
  • 用'@XmlAttribute 注释你的覆盖getter
  • 宾果游戏!已经工作了:) 谢谢
猜你喜欢
  • 1970-01-01
  • 2018-06-26
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
相关资源
最近更新 更多