我正在尝试使用JAXB将A序列化为HashTable<String, String>
XML。我是Java的新手(来自C#),所以对此任务感到困惑。
我已经看到以下代码:
public static <T> String ObjectToXml(T object, Class<T> classType) throws JAXBException
{
JAXBContext jaxbContext = JAXBContext.newInstance(classType);
StringWriter writerTo = new StringWriter();
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, writerTo); //create xml string from the input object
return writerTo.toString();
}
像这样被调用:ObjectToXml(o, ClassOfO.class)
,但是HashTable<String, String>.class
是错误的(我已经知道)。
Java专家可以告诉我如何调用此代码吗?提出一个更简单的实现(当然还有一个调用示例)也是最受欢迎的。
谢谢。
您将需要创建一个包装器类以保留Hashtable
:
package forum7534500;
import java.util.Hashtable;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Wrapper {
private Hashtable<String, String> hashtable;
public Hashtable<String, String> getHashtable() {
return hashtable;
}
public void setHashtable(Hashtable<String, String> hashtable) {
this.hashtable = hashtable;
}
}
然后,您可以执行以下操作:
package forum7534500;
import java.io.StringWriter;
import java.util.Hashtable;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Wrapper.class);
Wrapper wrapper = new Wrapper();
Hashtable<String, String> hashtable = new Hashtable<String,String>();
hashtable.put("foo", "A");
hashtable.put("bar", "B");
wrapper.setHashtable(hashtable);
System.out.println(objectToXml(jc, wrapper));
}
public static String objectToXml(JAXBContext jaxbContext, Object object) throws JAXBException
{
StringWriter writerTo = new StringWriter();
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, writerTo); //create xml string from the input object
return writerTo.toString();
}
}
这将产生以下输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wrapper>
<hashtable>
<entry>
<key>bar</key>
<value>B</value>
</entry>
<entry>
<key>foo</key>
<value>A</value>
</entry>
</hashtable>
</wrapper>
注意事项
JAXBContext
是线程安全的对象,应创建一次并重用。Hashtable
已同步,如果不需要,则使用HashMap
替代。自定义映射
您可以XmlAdapter
在JAXB中使用来自定义任何类的映射。以下是我博客上文章的链接,我将演示如何做到这一点:
我试图使用JAXB将ArrayList转换为xml... ...但它不工作,我得到这个错误: 2012年8月27日10:43:58组织。阿帕奇。卡塔琳娜。果心StandardWrapperValve:Servlet。路径为[/Spring3 LDAP WebService]的上下文中servlet[spring]的service()引发异常[请求处理失败;嵌套异常为javax.xml.bind.J
问题内容: 我有一个问题。我想使用JAXB将一个对象转换为另一个对象。就像在中,我有一个class 和另一个class ,它们都有相同的参数,实际上都是相同的(复制粘贴),但是包不同。我想使用进行它们之间的转换。 怎么做,请帮帮我。 问题答案: 您可以执行以下操作。 注意: 不需要利用JAXBSource将数据具体化为XML。 它在对象模型上不需要任何注释。 com.home.Student co
问题内容: 我正在研究的项目使用JAXB参考实现,即类来自软件包。 我有一堂课: 我想使用JAXB编组器来获取对象的JSON表示形式: 封送处理的数据为XML格式,而不是JSON格式。如何指示 JAXB参考实现 输出JSON? 问题答案: JAXB参考实现不支持JSON,您需要添加一个包,例如Jackson或Moxy 莫西 杰克逊 在这里查看示例
问题内容: 我用过这种方法 它正在打印“ jsonObject为null”。 “ error:nil”有什么问题吗? 我没有使用任何网址或连接方法。 我有一个json文件,我想在表中显示它。 问题答案: 请尝试以下代码。
不推荐使用,是否有其他解决此问题的方法?
问题内容: 这个下课 需要转换为 我尝试将对象手动传递给将变量设置为字典并返回字典的函数。但是,我希望有一种更好的方法来实现这一目标。 问题答案: 在Swift 4中,您可以从类型继承。