【问题标题】:Jaxb : Append field of Request XML without modfying JAXB java classJaxb:在不修改 JAXB java 类的情况下追加请求 XML 的字段
【发布时间】:2012-08-06 12:08:19
【问题描述】:

我将 JAXB 2.0 用于使用 RestFul Webservices 的应用程序开发。 现在请求中有一个修改,即我将在请求 XML 中获得另一个文件/变量。

<Root Id="567" att="758" />   

修改后的请求将是

 <Root Id="567" att="758" anotherfiledadded ="kiran" />   

我的问题是,是否可以在 UserData 类中自动附加该字段(anotherfiledadded)(无需修改 UserData ??)

下面是我的 UserData 类

@XmlRootElement(name = "Root")
@XmlAccessorType(XmlAccessType.FIELD)

public class UserData {

    @XmlAttribute
    private String Id;

    @XmlAttribute
    private String att;

// getters and setters 

【问题讨论】:

  • 我认为不可能。你会得到太多这样的“未知”字段吗?
  • 不,我只会得到一个字段。
  • 那你为什么不能修改那个类呢?
  • 附加属性的数据从何而来?
  • stackoverflow.com/questions/11834573/… ,链接解决了你的问题。

标签: java jaxb jaxb2


【解决方案1】:

您可以尝试在运行时使用javassist 添加该字段。但是...看起来您还需要添加注释 @XmlAttribute 而我不知道 javassist 是否允许您添加注释...无论如何都给它试一试。

见:Javassist Add

【讨论】:

    【解决方案2】:

    您可以使用 XSLT 将属性应用到您的 XML 文档中。自 Java SE 6 起,以下所有类都在 JDK/JRE 中可用。

    JAXBContext jc = JAXBContext.newInstance(UserData.class); 
    JAXBSource source = new JAXBSource(jc, myUserData);
    
    StreamResult result = new StreamResult(System.out);
    
    TransformerFactory tf = TransformerFactory.newInstance();
    StreamSource xslt = new StreamSource("addMyAttribute.xslt");
    Transformer t = tf.newTransformer(xslt);
    t.transform(source, result);
    

    如果您使用 JAX-RS 实现 RESTful 服务,您可以通过 MessageBodyWriter 插入此逻辑:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多