- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是一名网络服务开发人员。在我的雇主,他们有一个非常丰富的数据模型,我可能无法对其进行太多更改。
几乎所有对象都能够通过 toXML() 方法将自身呈现为 XML。将它们视为 HashMap ,直到运行时我们才知道完整的字段集。
我正在尝试尽可能利用 JAXB,因此我的一些 Web 服务对象是常规 POJO,如您所期望的那样进行注释。不过,我想在 JAXB 注释的 POJO 中添加一个较旧的对象,并调用它的 toXML()。
例如:
@XmlRootElement
class Metadata {
@XmlAttribute String serviceVersion;
@XmlAttribute String applicationVersion;
@XmlElement User user; // this is our object with it's own toXML method
}
理想情况下,我希望看到整理后的结果:
<metadata serviceVersion="5.1" applicationVersion="12.1">
<user id="bmauter" firstname="Brian"/>
</metadata>
我研究过扩展 XmlAdapter,但输出类似于:
<metadata serviceVersion="5.1" applicationVersion="12.1">
<user><user id="bmauter" firstname="Brian"/></user>
</metadata>
然后我想我在某处读到了使 XmlAdapter 将我的对象转换为 org.w3c.dom.Element 的方法。我决定尝试一下,但它失败了,因为“JAXB 无法处理接口(interface)”。
如何将这样的对象嵌入常规 JAXB 注解的 POJO 中?
谢谢!
更新:这是我试图修复的实际示例。 (再次更新以表明字段名称集直到运行时才知道。)
import java.util.HashMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement
public class Metadata {
@XmlAttribute String serviceVersion = "5.1";
@XmlAttribute String applicationVersion = "12.1";
@XmlElement @XmlJavaTypeAdapter(UserXmlAdapter.class) User user = new User();
static class User extends Row {
public User() {
tablename = "users";
fields.put( "id", "bmauter" );
fields.put( "firstname", "Brian" );
}
}
static class Row {
String tablename = null;
HashMap<String, Object> fields = new HashMap<String, Object>();
public String toXML() {
StringBuilder result = new StringBuilder();
result.append( "<" ).append( tablename );
for( String fieldName : fields.keySet() ) {
result.append( " " ).append( fieldName ).append( "=\"" ).append( fields.get( fieldName ) ).append( "\"" );
}
result.append( "/>" );
return result.toString();
}
}
static class UserXmlAdapter extends XmlAdapter<String, User> {
@Override public User unmarshal( String v ) throws Exception { return null; }
@Override public String marshal( User user ) throws Exception { return user.toXML(); }
}
public static void main( final String[] args ) throws Exception {
JAXBContext context = JAXBContext.newInstance( Metadata.class );
context.createMarshaller().marshal( new Metadata(), System.out );
}
}
最佳答案
当你有以下情况
@XmlRootElement
class Metadata {
@XmlAttribute String serviceVersion;
@XmlAttribute String applicationVersion;
@XmlElement User user; // this is our object with it's own toXML method
}
User
对象将根据其映射在 Metadata
对象的 XML 中呈现。您不需要做任何特别的事情。
关于java - 在 JAXB 注释的对象中使用带有 toXML 方法的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22816519/
我有一个具有以下结构的类,我正在尝试使用 Xstream 对其进行序列化 public class Child extends Parent implements Serializable {
我有一个 PHP 脚本中显示的跟随错误。 Strict Standards: Declaration of Response::toXML() should be compatible with El
Element.toXML() 的默认行为似乎是将结果显示为单行。是否可以让它以多行、分层的方式显示结果? 例子: 这就是我想要的 这就是我现在得到的: 谢谢 最佳答案 nu
本文整理了Java中com.thoughtworks.xstream.XStreamer.toXML()方法的一些代码示例,展示了XStreamer.toXML()的具体用法。这些代码示例主要来源于G
本文整理了Java中org.testng.reporters.XMLStringBuffer.toXML()方法的一些代码示例,展示了XMLStringBuffer.toXML()的具体用法。这些代码
本文整理了Java中org.jclouds.xml.XMLParser.toXML()方法的一些代码示例,展示了XMLParser.toXML()的具体用法。这些代码示例主要来源于Github/Sta
如何调用following方法JsonParser: /** * Converts a JSON document to XML. * @param io input * @pa
我是一名网络服务开发人员。在我的雇主,他们有一个非常丰富的数据模型,我可能无法对其进行太多更改。 几乎所有对象都能够通过 toXML() 方法将自身呈现为 XML。将它们视为 HashMap ,直到运
本文整理了Java中org.apache.uima.util.XMLizable.toXML()方法的一些代码示例,展示了XMLizable.toXML()的具体用法。这些代码示例主要来源于Githu
本文整理了Java中com.netflix.discovery.converters.XmlXStream.toXML()方法的一些代码示例,展示了XmlXStream.toXML()的具体用法。这些
我尝试使用Xstream序列化Java中的对象列表,我的核心代码是: //register alias xstream.alias("category", ServerCategory.class);
我在 android 项目中使用最新版本的 asmack (asmack-android-8-source-0.8.3) 并且我有以下代码: connection.addPacketListener(
本文整理了Java中com.riversoft.weixin.common.util.XmlObjectMapper.toXml()方法的一些代码示例,展示了XmlObjectMapper.toXml
本文整理了Java中org.jclouds.ultradns.ws.binders.ZoneAndResourceRecordToXML.toXML()方法的一些代码示例,展示了ZoneAndReso
我有一行获取节点的节点值: parent.getElementsByTagName("Url")[0].nodeValue 什么都不返回: 当我这样做时: parent.getElementsByT
我是一名优秀的程序员,十分优秀!