利用JOX实现Javabean与XML转换报错解决办法
java对象与xml间的转换

castor: java对象与xml间的转换2008-10-30 10:33说明:交换数据时,可以考虑使用castor,把Java对象的转换成xml 进行远程传递【代替序列化】参考中说:castor和xmlbeans这种都是先定义schema,然后根据schema 来generate java class,然后调用marshall和unmarshall方法来序列化javabean。
这是属于重量级的方法,虽然功能强大,使用却不方便。
如果你改了schema,势必要重新generate,这样你就不能在generate的java class上加上自己的方法。
导致生成的java class纯粹用于serialize使用过程:1. 根据应用逻辑,编写xml schema文件。
示例如下:<?xml version="1.0" encoding="ISO-8859-1" ?><xs:schema xmlns:xs="/2001/XMLSchema" targetNamespace="/Test/ProductPromotionAd"><xs:element name="ProductPromotionAdResultItem"><xs:complexType><xs:sequence><xs:element name="itemcode" type="xs:string"/><xs:element name="hasPromotionAd" type="xs:boolean"/> </xs:sequence></xs:complexType></xs:element><xs:element name="ProductPromotionAdResults"><xs:complexType><xs:sequence><xs:element ref="ProductPromotionAdResultItem" maxOccurs="unbounded" minOccurs="1"/></xs:sequence></xs:complexType></xs:element></xs:schema>2.castor 根据xml schema 生成JavaBean;编写类似的脚本如下:@echo offREM Change the following line to set your JDK pathset JAVA_HOME=%JAVA_HOME%set JAVA=%JAVA_HOME%\bin\javaset JAVAC=%JAVA_HOME%\bin\javac@echo Create the classpathset CP=.for %%i in (..\..\..\lib\*.jar) do set CP=%CP%;%%iset CP=%CP%;..\..\..\build\classes;%JDK_BIN%\lib\tools.jar@echo.@echo Using classpath: %CP%@echo Castor Test Cases@echo.@echo Generating classes...@rem Java 2 style collection types@rem %JAVA% org.exolab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f -types j2@rem Java 1.1 collection types%JAVA% -cp %CP% org.exolab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f或者利用ant生成,其代码段示例为:<target name="generateCastorClasses" depends="."><java classname="org.exolab.castor.builder.SourceGenerator"><arg line="-dest '${dir}/source' -i '${dir}/config/Export.xsd' -f-package com.object" /><classpath><fileset dir="${dir}/lib"><include name="*.jar" /></fileset></classpath></java></target>3. 客户服务器端使用JavaBean,传输时,服务器端把JavaBean Marshall 成xml,客户端把xml unmarshall成 JavaBean测试代码如下:public class TestCastorXml{private static void readTest() {try {ProductPromotionAdResults readXml =ProductPromotionAdResults.unmarshal(new FileReader("e:\\text.xml")); for(int i=0;i<readXml.getProductPromotionAdResultItemCount(); i++) {System.out.println(readXml.getProductPromotionAdResul tItem(i).getItemcode() + "-->" +readXml.getProductPromotionAdResultItem(i).ge tHasPromotionAd());}}catch(Exception e) {e.printStackTrace();}}private static void writeTest() {try {Writer w = new FileWriter("e:\\text.xml");ProductPromotionAdResults resultXml=new ProductPromotionAdResults();for(int i=0; i<3; i++) {ProductPromotionAdResultItem item = new ProductPromotionAdResultItem();item.setItemcode(i + "");item.setHasPromotionAd(true);resultXml.addProductPromotionAdResultItem(item);System.out.println("write finished");}resultXml.marshal(w);}catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {//writeTest();readTest();}}附录:需要的包castor-1.2-anttasks.jarcastor-1.2-codegen.jarcastor-1.2-ddlgen.jarcastor-1.2-jdo.jarcastor-1.2-xml-schema.jarcastor-1.2-xml.jarcastor-1.2.jarcommons-collections-3.2.jarcommons-lang-2.1.jarcommons-logging-1.1.jarderby-10.1.2.1.jarjdbc-se2.0.jarjta1.0.1.jarlog4j-1.2.8.jarvelocity-dep-1.5.jarxerces-J_1.4.0.jar根据XML Schema生成java类2009年10月20日星期二15:09JAXB提供了可以从schema生成java类,下面简要介绍一下生成的步骤:1:下载jaxb包 jaxb 2_1_9.zip ,下载解压后得到四个目录,包含bin、lib 、docs、example2:在"cmd"里进入到bin目录,如C:\>cd C:\jaxb2.1.9\bin 回车3:输入xjc c:\students.xsd -d c:\src -p com.entity 回车注:-d 说明要生成的java类存放目录-p 为生成java类指定的包名students.xsd 为自己定义的Schemajaxb配置及使用过程2007-10-16 09:01接触jaxb是因为项目中需要使用xml模式,并通过网络传送xml文件的内容,听同学说他在单位实习时用jaxb工具实现xml模式到java类的映射,这样可以通过操纵java类来实现对xml文档的控制,屏蔽了用dom或者sax解析器的一些内容,使操作更为简单。
error retrieving field value from bean的解决方法

"error retrieving field value from bean" 是一个常见的错误信息,通常在使用Java 编程语言中的JavaBean 时出现。
这个错误提示可能在访问JavaBean 中的字段值时出现问题。
解决这个问题需要根据具体情况进行调查和修复。
以下是一些可能的解决方法:
检查属性命名和访问方法:确保你在JavaBean 中定义了正确的属性(字段)和相应的getter 方法。
属性命名应该遵循JavaBean 的命名规范,并且getter 方法应该以"get" 或"is" 开头,后面跟着属性名。
检查访问范围:确保属性的访问范围(即修饰符)正确设置,以便外部代码可以访问属性值。
检查参数个数:如果你在获取属性值时使用了参数,确保getter 方法的参数个数与你使用的参数个数匹配。
检查空引用:在访问属性值之前,确保JavaBean 对象不为null。
如果对象为null,访问属性值就会抛出空指针异常。
使用合适的访问方法:确保使用了正确的getter 方法来获取属性值。
如果属性是布尔类型,使用"is" 前缀的getter 方法。
检查异常处理:在访问属性值时,捕获可能抛出的异常,如空指针异常或其他相关的异常,并进行适当的错误处理。
检查数据类型匹配:确保你在获取属性值时,使用的数据类型与属性的数据类型匹配。
调试输出:在出错的地方加入调试输出语句,输出相关变量的值,以便分析问题。
XML转javabean,获取标签内属性值(方法1)

XML转javabean,获取标签内属性值(⽅法1)需求:<PROPERTYLIST><PROPERTY PROPERTYCODE="test1">value1</PROPERTY><PROPERTY PROPERTYCODE="test2">value2</PROPERTY><PROPERTY PROPERTYCODE="test3">value3</PROPERTY></PROPERTYLIST>根据PROPERTYCODE 的值,获取value,赋值给java对象。
根据标签,对应,可以直接使⽤@XmlElement(name = "PROPERTY"),但是根据属性值,还真不知道怎么⽤,后来在⽹上找到了⼀个帖⼦,https:///zy223344/blog/727603说明的很详细,需要使⽤ @XmlAnyAttribute 属性转化@XmlAccessorType(XmlAccessType.NONE)@XmlRootElement(name="PROPERTYLIST")public class ValueList {private List<Property> PropertyList = new ArrayList<Property>();public List<Property> getPropertyList() {return PropertyList;}@XmlElement(name="Property")public void setPropertyList(List<Property> propertyList) {this.propertyList = propertyList;}}@XmlAccessorType(XmlAccessType.NONE)@XmlRootElement(name = "Property")public class Property {@XmlAnyAttribute()private Map map;//每个Item的属性值@XmlValueprivate String text;public Map getMap() {return map;}public void setMap(Map map) {this.map = map;}public String getText() {return text;}public void setText(String text) {this.text = text;}}text 的值就是对应的value使⽤map.get(QName.valueOf("PROPERTYCODE")) 获取test1.若不适⽤QName,确实获取到的为null。
解决Maven项目加载springbean的配置xml文件会提示找不到问题

解决Maven项⽬加载springbean的配置xml⽂件会提⽰找不到问题Maven 加载spring bean的配置xml⽂件会提⽰找不到如果你也在开发spring项⽬时⽤的是maven项⽬,如果出现运⾏是:***xml can not open ,because it does not exist.解决⽅法很简单,因为maven需要将你的配置⽂件即***.xml放到根⽬录下,就是/src/main/java/这个⽬录下。
如果你把配置⽂件放到了⾃⼰新建的config⽂件夹中,记住也要放到这个⽬录⾥⾯,然后在ApplicationContext ctx = new ClassPathXmlApplicationContext("config/applicationContext.xml");写上路径即可。
如图所⽰:Maven ⽆法找到 xml⽂件或 properties⽂件等配置⽂件在初次使⽤ Maven 项⽬的时候总是会遇到⼀些⽐较奇异的问题就⽐如说总是会报错:项⽬⾥的 **.xml 或 **.properties 配置⽂件⽆法找到这时你去项⽬中的 classes ⽣成⽂件(target 或 out)中找,确实这些配置⽂件没有被编译这是因为 Maven 通常会忽略掉标记为 Sources 的⽂件夹中的配置⽂件这是 Maven 项⽬的⽬录结构:有两种解决⽅案:⼀、将配置⽂件放⼊ resources ⽂件夹中⼆、在 Maven 的配置⽂件 pom.xml ⽂件中添加以下代码<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
postman write javabean error

postman write javabean error Postman是一款非常流行的API测试工具,它的功能非常丰富,方便开发人员进行API的调试和测试。
然而,在使用Postman进行API测试时,有时会遇到一些常见的错误,其中之一就是"javabean error"。
在本文中,我们将详细讨论这个错误,并一步一步解决它。
首先,让我们先了解一下什么是"javabean error"。
在Postman中,当我们向API发送请求并且期望返回一个JavaBean对象(类似于一个POJO,即普通Java对象)时,如果服务器返回的响应无法正确地将JSON数据转换为JavaBean对象,就会发生"javabean error"。
这通常是由于服务器返回的JSON响应与JavaBean对象的属性不匹配或者存在其他问题所导致的。
那么,如何解决"javabean error"呢?下面将一步一步地讨论解决方案。
步骤一:确认服务器响应的内容首先,我们需要确认服务器返回的响应的内容是否是符合预期的JSON数据。
可以通过在Postman中查看响应的Body部分来确认。
确保返回的数据是一个包含所有必要属性的有效JSON对象。
步骤二:检查JavaBean对象的定义接下来,我们需要检查JavaBean对象的定义,确保它与服务器返回的JSON数据结构相匹配。
确保JavaBean对象具有与JSON数据中的键相对应的属性,并且类型也正确。
步骤三:使用适当的注解在JavaBean对象中,我们可以使用如JsonProperty等注解来指定JSON 数据中的键与JavaBean对象的属性之间的映射关系。
确保在属性上使用了正确的注解,以确保数据能够正确地转换。
步骤四:使用自定义反序列化器如果以上的解决方案都无法解决问题,我们可以考虑使用自定义的反序列化器来实现更复杂的转换逻辑。
JAVA对象转换成XML(CDATA)

JAVA对象转换成XML(<![CDATA[文本内容]]>)编者小结:将java对象转换成xml文件很简单,但是将java对象转换成<![CDATA[文本内容]]>输出结果不转义的形式就相当不易。
大家都知道在XML 元素中,"<" 和"&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如JavaScript 代码,包含大量"<" 或"&" 字符。
为了避免错误,可以将脚本代码定义为CDATA。
CDATA:在标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待,CDATA的形式如下:<![CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
具体实现过程如下:Java实体类:public class JavaDocu {private int id;private String text;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getText() {return text;}public void setText(String text) {this.text = text;}}MyXppDriver类:public class MyXppDriver extends XppDriver {public HierarchicalStreamWriter createWriter(Writer out){return new MyPrettyPrintWriter(out);}}MyPrettyPrintWriter类:public class MyPrettyPrintWriter implements ExtendedHierarchicalStreamWriter {private final QuickWriter writer;private final FastStack elementStack = new FastStack(16);private final char[] lineIndenter;private boolean tagInProgress;private int depth;private boolean readyForNewLine;private boolean tagIsEmpty;private static final char[] AMP = "&".toCharArray();private static final char[] LT = "<".toCharArray();private static final char[] GT = ">".toCharArray();private static final char[] SLASH_R = " ".toCharArray();private static final char[] QUOT = """.toCharArray();private static final char[] APOS = "'".toCharArray();private static final char[] CLOSE = "</".toCharArray();public MyPrettyPrintWriter(Writer writer, char[] lineIndenter) { this.writer = new QuickWriter(writer);this.lineIndenter = lineIndenter;}public MyPrettyPrintWriter(Writer writer, String lineIndenter) { this(writer, lineIndenter.toCharArray());}public MyPrettyPrintWriter(PrintWriter writer) {this(writer, new char[] { ' ', ' ' });}public MyPrettyPrintWriter(Writer writer) {this(new PrintWriter(writer));}@Overridepublic void addAttribute(String key, String value) {writer.write(' ');writer.write(key);writer.write('=');writer.write('\"');writeAttributeValue(writer, value);writer.write('\"');}protected void writeAttributeValue(QuickWriter writer, String text) { int length = text.length();for (int i = 0; i < length; i++) {char c = text.charAt(i);switch (c) {case'&':this.writer.write(AMP);break;case'<':this.writer.write(LT);break;case'>':this.writer.write(GT);break;case'"':this.writer.write(QUOT);break;case'\'':this.writer.write(APOS);break;case'\r':this.writer.write(SLASH_R);break;default:this.writer.write(c);}}}@Overridepublic void endNode() {depth--;if (tagIsEmpty) {writer.write('/');readyForNewLine = false;finishTag();elementStack.popSilently();} else {finishTag();writer.write(CLOSE);writer.write((String) elementStack.pop());writer.write('>');}readyForNewLine = true;if (depth == 0) {writer.flush();}}@Overridepublic void setValue(String text) {readyForNewLine = false;tagIsEmpty = false;finishTag();writeText(writer, text);}protected void writeText(QuickWriter writer, String text) { int length = text.length();String CDATAPrefix = "<![CDATA[";if (!text.startsWith(CDATAPrefix)) {for (int i = 0; i < length; i++) {char c = text.charAt(i);switch (c) {case'&':this.writer.write(AMP);break;case'<':this.writer.write(LT);break;case'>':this.writer.write(GT);break;case'"':this.writer.write(QUOT);break;case'\'':this.writer.write(APOS);break;case'\r':this.writer.write(SLASH_R);break;default:this.writer.write(c);}}}else {for (int i = 0; i < length; i++) {char c = text.charAt(i);this.writer.write(c);}}}@Overridepublic void startNode(String name) { tagIsEmpty = false;finishTag();writer.write('<');writer.write(name);elementStack.push(name);tagInProgress = true;depth++;readyForNewLine = true;tagIsEmpty = true;}private void finishTag() {if (tagInProgress) {writer.write('>');}tagInProgress = false;if (readyForNewLine) {endOfLine();}readyForNewLine = false;tagIsEmpty = false;}protected void endOfLine() {writer.write('\n');for (int i = 0; i < depth; i++) {writer.write(lineIndenter);}}public void flush() {writer.flush();}public void close() {writer.close();}@Overridepublic HierarchicalStreamWriter underlyingWriter() {return this;}@Overridepublic void startNode(String name, @SuppressWarnings("rawtypes") Class arg1) {// TODO Auto-generated method stubtagIsEmpty = false;finishTag();writer.write('<');writer.write(name);elementStack.push(name);tagInProgress = true;depth++;readyForNewLine = true;tagIsEmpty = true;}}Java测试类:public class JavaDocuTest {public static void main(String[] args) throws IOException, JAXBException {Long t1 = System.currentTimeMillis();String CDATAPrefix = "<![CDATA[";String CDATABackfix = "]]>";JavaDocu javadocu = new JavaDocu();JavaDocu javadocu2 = new JavaDocu();javadocu.setText(CDATAPrefix + "这是一个测试" + CDATABackfix);javadocu2.setText(CDATAPrefix + "这又是一个测试" + CDATABackfix);List<JavaDocu> list = new ArrayList<JavaDocu>();list.add(javadocu);list.add(javadocu2);XStream xstream = new XStream(new MyXppDriver());for (int i = 0; i < list.size(); i++) {list.get(i).setId(i);xstream.alias("javatoxml", JavaDocu.class);eAttributeFor(JavaDocu.class, "id");// eAttributeFor("id",String.class);}System.out.println(xstream.toXML(list));xstream.toXML(list, new PrintWriter("c:\\测试.xml", "utf-8"));}}以上代码可实现将javabean转换成包含<![CDATA[文本内容]]>的xml文件。
maven文件报错(pom.xml或者jar包缺失)解决方法
maven⽂件报错(pom.xml或者jar包缺失)解决⽅法
相信很多朋友在myeclipse上把maven配置好了,但是新建maven项⽬的时候会报错,下⾯我来总结以下我遇到的问题。
新建完maven项⽬后,pom.xml报错
1.报错的原因:很多时候我们在下载maven的时候会因为⽹络问题导致下载的jar包不全或者丢失,当新建完⼀个maven项⽬的的时候pom.xml就会报错。
2.解决办法:点击报错的地⽅,它会⾃动提⽰你报错的地⽅,例如:
很明显,这是jar包缺失的表现。
这时候我们就要去c盘.m2⽂件夹下的repository⽬录下去寻找这个对应的jar包所在的⽂件夹,把它删除(别害怕,删了之后后⾯我们会更新,等下讲到)。
在这⾥记住,它报⼏个jar报缺失我们就删除⼏个jar包。
删除完后重要的⼀步:打开pom.xml ⽂件,随便找个空位置,按下空格键或者删掉个空格,最后保存以下,maven⽂件就不会报错了!
重要:我们之前在⽂件夹⾥删除了那些缺失的jar包对不对,那怎么让它重新加载回来呢?
⽅法:右键点击maven项⽬,选择maven(有些是Maven4MyEclipse就选择这个)-> Update Proejct(有些是 Update Proejct Configuration就选这个),好啦,之前我们删除的jar包现在都重新加载回来啦,可以去repository⽬录下找找看哦。
处理XML解析中的错误
这样的错误处理方式绝对不能接受!使用这样的代码将会惹恼用户、激怒老板,如果CEO 收到大客户谴责的邮件,可能会惹火身边那些不得不加班查找问题的人。
首先,实际上您已经编写了错误处理代码。
不精确地讲,包含System.err.println()语句的catch块可以被认为是错误处理,这是一个非常拙劣的方法。
错误处理代码不仅仅是一个错误报告—高质量的错误处理应该是:∙用户友好性。
∙无中断(除非必须如此)。
∙具有告知性。
错误处理是用户友好的最重要的是,错误处理代码针对的是应用程序的用户。
实际上,程序最终都是为用户服务的。
甚至您自己的调试语句都可以帮助您了解发生的问题,这样就可以修复功能。
功能是为用户服务的。
错误处理代码同样也是。
当然,“用户” 这个词可以具有多种不同的含义,尤其是如果不编写面向用户的代码的话。
如果您的应用系统是在公司和银行之间传输财务数据的后端系统,那么,您的用户可能是一些公司的内部部门或银行。
如果代码仅仅是供另外一个部门使用的基础代码,那么,这个部门就是您的用户。
所以,首先要确定的是,谁是您的用户?一旦确定您的客户是新泽西州的电脑用户,还是三楼的Web 开发人员,或是纽约证券交易所的主席,就可以编写对那些用户(或用户类)友好的代码。
对于消费者,需要提供不涉及编程术语的、易读的错误消息;对于网站开发人员,需要提供本部门或系统管理小组的联系方式;对于银行的CEO,错误处理最好不要中断他们的工作。
实际上,在过多考虑错误消息之前,最好认识到并不是所有的错误处理代码都必须报告错误。
错误处理是不中断的(除非必须如此)如果在您开车上班的路上,遇到一个大型的施工项目阻塞了交通,您不用把车靠到路边,熄火,在心里思考如何修饰自己的简历,因为您担心这次迟到而被解雇。
这是很愚蠢的。
您可以找到下一个出口并确定备用路线。
这也许会花去一些额外的时间,甚至要打电话告知某人您将不能按时参加早上8 点的会议。
但是尽管受到施工问题的影响,您仍然找到了解决方法。
Java解析xml文件遇到特殊符号会出现异常的解决方案
Java解析xml⽂件遇到特殊符号会出现异常的解决⽅案⽂/朱季谦在⼀次Java解析xml⽂件的开发过程中,使⽤SAX解析时,出现了这样⼀个异常信息:Error on line 60 of document : 对实体 "xxx" 的引⽤必须以 ';' 分隔符结尾;我打开xml⽂件后,发现该“xxx"符号之前跟着⼀个”&“符号,后来了解到,这类符号在xml⾥属于⼀种特殊符号,⽽特殊符号若没⽤转义符表⽰,直接⽤到xml⽂件⾥,就会在使⽤SAX等⽅式做解析时出现奇怪的异常。
其实,这都是因为这些特殊字符造成的。
XML当中特殊符号包括< > & ' "等,它们是不允许作为xml⽂件的PCDATA,若想使⽤话,需⽤转义符代替:< <> >& &" "' '那么,若要正常读取xml⽂件数据,应该如何使⽤转义符替换呢?刚开始是想百度⼀番如何解决,却发现好多帖⼦都是好⼏年前的,且都没有写清楚怎么个解决⽅法,⼤多都是提到是特殊符号引起的解析异常,但怎么过滤掉,显得含糊其辞,因此,只能⾃⼰胡乱捣⿎⼀番,捣⿎出⼀个⽐较合适的将特殊字符过滤的⽅案。
实现思路其实很简单,我们可以在读取xml⽂件使⽤SAX解析前,先把xml⽂件通过Reader读取,然后按⾏读取出来拼接成⼀个String字符串,再使⽤字符串的替换⽅法replaceAll()将特殊符号进⾏替换,替换后,就可以将字符串形式的xml直接转成Document对象做xml解析了:String xmlStr=s.replaceAll("&","&");转换⽅法代码如下:StringBuffer buffer = new StringBuffer();BufferedReader bf= new BufferedReader(new FileReader("D:\\测试.xml"));String s = null;while((s = bf.readLine())!=null){buffer.append(s.trim());}String str = buffer.toString();//在这⼀步进⾏字符替换,替换成合法转义字符String xml=str.replaceAll("&","&");//这⾥就可以将处理过的xml⽂件进⾏读取解析了Document document = DocumentHelper.parseText(xml);⾄此,就可以解决Java解析xml⽂件遇到特殊符号&出现异常的问题了。
XML和Java对象互转实现
XML和Java对象互转实现1、相关对象类注意注解:@XmlRootElement(name = "ROOT")表⽰XML的根节点@XmlElement(name = "NAME")表⽰XML的⼦节点package com.MyModel;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "ROOT")public class MyBeanXml {private String name;private String id;private String age;public String getName() {return name;}@XmlElement(name = "NAME")public void setName(String name) { = name;}public String getId() {return id;}@XmlElement(name = "ID")public void setId(String id) {this.id = id;}public String getAge() {return age;}@XmlElement(name = "AGE")public void setAge(String age) {this.age = age;}}2、测试⽅法Demopackage com.TestArch;import com.MyModel.MyBeanXml;import com.alibaba.fastjson.JSON;import lombok.SneakyThrows;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import java.io.StringReader;public class TestXML {@SneakyThrowspublic static void main(String args[]) {MyBeanXml myBeanXml = new MyBeanXml();myBeanXml.setAge("28");myBeanXml.setId("01");myBeanXml.setName("PHC");// 对象转 XML System.out.println("----------对象转 XML-------------------");JAXBContext jaxbContext = JAXBContext.newInstance(MyBeanXml.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller();// output pretty printedjaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(myBeanXml, System.out);// XML 字符串转对象String xmlStr = "<ROOT>\n" +" <AGE>28-Str</AGE>\n" +" <ID>01-Str</ID>\n" +" <NAME>PHC-Str</NAME>\n" +"</ROOT>";Unmarshaller u = jaxbContext.createUnmarshaller();StringReader sr = new StringReader(xmlStr);Object resp = u.unmarshal(sr);System.out.println("----------XML 字符串转对象-------------------");System.out.println("" + JSON.toJSONString(resp));}}3、输出结果附:代码在GitHub的提交。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用JOX实现Javabean与XML转换
关于JAVA编译报错的一些解决办法
因为自己在网上找了很久都没有找到,后来自己摸索出来了,跟大家分享!
在用JOX方式实现JAVABEAN与XML文件之间的相互转换的时候的报错问题:
时间数据的问题:(XML文件转换成javabean的时候)
java.io.IOException: Error parsing XML document: java.text.ParseException:
Unparseable date: "2012-02/02"
at com.wutka.jox.JOXSAXBeanInput.readObject(JOXSAXBeanInput.java:165)
at com.wutka.jox.JOXBeanInputStream.readObject(JOXBeanInputStream.java:97)
at com.wutka.jox.test.TestDeser.main(TestDeser.java:18)
报错如上,是因为XML文件中的数据格式不被支持,比如此处的"2012-02/02",这个数据不
能呗eclipse支持,可以换成"2012-02-02"这样就可以了。
并且在代码中加入System.setProperty("com.oce.wutka.dateFormat","yyyy-MM-dd");这
样一句话
报错如下:
java.io.IOException: Error parsing XML document: org.xml.sax.SAXParseException:
The encoding "UBF-8" is not supported.
at com.wutka.jox.JOXSAXBeanInput.readObject(JOXSAXBeanInput.java:165)
at com.wutka.jox.JOXBeanInputStream.readObject(JOXBeanInputStream.java:97)
at com.wutka.jox.test.TestDeser.main(TestDeser.java:18)
原因:在XML文件中的 ,UBF-8不被支持,直
接省略,成为默认的encoding即可
在用JOX方式将XML文件转换成javabean的时候:报错如下
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/xml/serialize/OutputFormat
at com.wutka.jox.JOXBeanOutputStream.setupSink(JOXBeanOutputStream.java:173)
at com.wutka.jox.JOXBeanOutputStream.
at com.jox.main.JoxMain.toXML(JoxMain.java:46)
at com.jox.main.JoxMain.main(JoxMain.java:87)
Caused by: java.lang.ClassNotFoundException:
org.apache.xml.serialize.OutputFormat
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 4 more
报错原因:
OutputFormat这个类没找到,导入jar包出错,需要导入org.apache.xml.serialize包
缺少OutputFormat 类,缺少jar包 org.apache.xml.serialize.OutputFormat到
http://archive.apache.org/dist/xml/xerces-j/站点上去下载
Xerces-J-bin.2.6.0.zip。 org.apache.xml.serialize在xercesImpl.jar里面。
以上错误均为自己亲测,网上找到这些方法太难了,在这里分享下,希望对其他人都帮助。