在Netbeans 5.5.1中使用JAXB所遇到的问题

最近在忙着赶毕业设计,所选用的IDE是Netbeans5.5.1
在毕业设计过程中,需要使用xml与java object之间的相互转化。
经过试探一些这方面的技术,最终将目光停在了JAXB上。
JAXB的好处我就不在说什么了?大家可以自己Google一下,网上很多,
我这里要说的就是,在JavaSE 6 的版本中,以及添加了默认对JAXB的支持,在命令行下面就可以直接运行如下代码~(这段代码是我在网上找到的,仅仅是想显示一下JAXB的方便与强大)
/*
* J2S.java
*
* Created on June 10, 2007, 3:53 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package org.eric.test.webservice;

import javax.xml.bind.*;
import javax.xml.bind.annotation.*;

/**
*
* @author shjy.nicholas
*/
public class J2S {

/** Creates a new instance of J2S */
public J2S () {
}

public static void main (String[] args) {
try {
JAXBContext context = JAXBContext.newInstance (Point.class);
Marshaller m = context.createMarshaller ();

m.setProperty (Marshaller.JAXB_FORMATTED_OUTPUT, true);
Point p = new Point (3, 4);
m.marshal (p, System.out);
} catch (JAXBException jex) {
System.out.println ("JAXB Binding Exception");
jex.printStackTrace ();
}
}
@XmlRootElement
private static class Point {
int x;
int y;
public Point () {
}
public Point (int x, int y) {
this.x = x;
this.y = y;
}
public void setX (int x) {
this.x = x;
}
public void setY (int y) {
this.y = y;
}
public int getX () {
return x;
}
public int getY () {
return y;
}
}
}

运行的结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<point>
<x>3</x>
<y>4</y>
</point>

但如果直接在Netbeas下面运行,你就会得到如下的错误:
Exception in thread "main" java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/Application/Dev/Java/netbeans-5.5.1/ide7/modules/ext/jaxws21/jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)
at com.sun.xml.bind.v2.model.impl.ModelBuilder.<clinit>(ModelBuilder.java:136)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:406)
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:270)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:103)
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:210)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:368)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
at org.eric.test.webservice.J2S.main(J2S.java:27)
Java Result: 1

让我们来看一下,就会知道是从bootstrap加载的时候,加载的是JAXB 2.0,而JAXB RI(JAXB下的一个子项目)需要的是2.1的。
在网上搜了一下,发现了SUN公司的endorsed介绍(http://java.sun.com/j2se/1.5.0/docs/guide/standards/)
具体做法如下:
在%JAVA_HOME%\jre\lib目录下新建一个名为的endorsed文件夹,将我们所需要的JAXB 2.1的jar包放到这个目录当中,这里我们需要的是jaxb-api.jar和jaxws-api.jar

按照上面的方法处理之后,在Netbeans下面就不错在出现错误了。

在我寻找XML和Java Object互操作的技术的时候,下面的技术也是很值得称赞的:
Stax,XStream, Zeus(使用了Apache的Xerces)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值