我有以下型号
class MyClass {
id
someRandomString
}
我想将此POJO作为...
返回给客户<Root>
<random>if + randomstring</random>
</Root>
基本上我正在处理面向消息的服务,所以我需要将模型换行并转换为出站XML格式......输入端也是如此
我有这个XML ......
<Root>
<Username>
<Password>
<Action> <-- Some action or service to perform
<SomeModel1>
<SomeModel2>
</Root>
因此,根,用户名和密码是常量元素,而SomeModel可以根据“服务”进行更改
Bassically我正在寻找一种设计模式,其中XML与模型不匹配,需要进行转换...
或者,如果我做了......
class MyClass {
id
someRandomString
random
@XMLTransient
getId()
@XMLTransient
getSomeRandomString()
getRandom() {
return id + someRandomString
}
}
所以JAXB只会映射getRandom ...
我的另一个想法是创建一堆代表最终输出的类,然后将值设置为thoses ......
所以
class MyResponse {
randomString
status
someOtherFieldRequired in response
}
然后我可以做......
myResponse.setRandomString(myClass.getId() + myClass.getSomeRandomString());
答案 0 :(得分:1)
您可以将XmlAdapter与XmlJavaTypeAdapter结合使用,但我认为可能需要您将id和someRandomString属性封装到单独的类中。如果可能的话,直接在两个单独的bean属性上扩展元素值并不是我知道该怎么做的。
答案 1 :(得分:1)
您可以id
和someRandomString
字段分隔元素并使用样式表将元素合并为一个元素。 JAXB提供适合JAXBSource
API的javax.xml.transform
类:
MyClass myClass = new MyClass();
myClass.setId(123);
myClass.setSomeRandomString("FOO");
TransformerFactory tf = TransformerFactory.newInstance();
StreamSource xslt = new StreamSource(new FileInputStream("my-xslt.xml"));
Transformer t = tf.newTransformer(xslt);
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
JAXBSource source = new JAXBSource(jc, myClass);
StreamResult result = new StreamResult(System.out);
t.transform(source, result);