笔者安装的是Java Web Services Developer Pack是jwsdp-2_0-windows-i586.exe,
You can reach it at:
安装完之后,笔者写了一个Java Application和一个web project,借助Java Web Services Developer Pack工具包中的JAXB,操纵通过xjc工具生成的与xsd文件相对应的Java类,生成该java类的对象,来产生一个xml文件。
下面是笔者编写Java Application的过程。
环境:Window xp,MyEclipse6.0,JDK1.5,JWSDP2.0。
步骤如下:
1、在MyEclipse6.0里面New一个Java Project,命名为:testJABX。
2、导入JAXB的工具包。右键点击testJABX,然后选择Build Path-->Configure Build Path,然后选择libraries选项卡,然后Add External JARS,加入jwsdp-2.0\jaxb\lib这个包下面的jaxb1-impl.jar,jaxb-api.jar,jaxb-impl.jar,jaxb-xjc.jar这四个包。
3、在命令行进入..\jwsdp-2.0\jaxb\bin,然后用xjc +xsd文件名,生成Java类。
4、将生成的类导进你的Java Project,将这些类组织好。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element type="PurchaseOrderType" name="purchaseOrder"><xsd:element type="xsd:string" name="comment"><xsd:complextype name="PurchaseOrderType"><xsd:sequence><xsd:element type="USAddress" name="shipTo"><xsd:element type="USAddress" name="billTo"><xsd:element minoccurs="0" ref="comment"><xsd:complextype name="USAddress"><xsd:sequence><xsd:element type="xsd:string" name="name"><xsd:element type="xsd:string" name="street"><xsd:element type="xsd:string" name="city"><xsd:element type="xsd:string" name="state"><xsd:complextype name="Items"><xsd:sequence><xsd:element maxoccurs="unbounded" minoccurs="1" name="item"><xsd:complextype><xsd:sequence><xsd:element type="xsd:string" name="productName"><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd:element name="purchaseOrder" type="PurchaseOrderType"><xsd:element name="comment" type="xsd:string"><xsd:complextype name="PurchaseOrderType"><xsd:sequence><xsd:element name="shipTo" type="USAddress"><xsd:element name="billTo" type="USAddress"><xsd:element ref="comment" minoccurs="0"><xsd:complextype name="USAddress"><xsd:sequence><xsd:element name="name" type="xsd:string"><xsd:element name="street" type="xsd:string"><xsd:element name="city" type="xsd:string"><xsd:element name="state" type="xsd:string"><xsd:complextype name="Items"><xsd:sequence><xsd:element name="item" minoccurs="1" maxoccurs="unbounded"><xsd:complextype><xsd:sequence><xsd:element name="productName" type="xsd:string"><xsd:simpletype name="SKU"><xsd:restriction base="xsd:string"><xsd:pattern value="\d{3}-[A-Z]{2}"></xsd:pattern></xsd:restriction></xsd:simpletype>
生成的java文件有:Items.java,PurchaseOrderType,USAddress.java,ObjectFactory.java。笔者把它组织在primer.po这个包 下面。
关于xsd文件生成java文件的资料,读者可以自行上网找,网上大把这样的资料。
不知怎么回事,贴不上xsd文件。不过,也无关紧要的了
5、写主程序,测试一下。结果是在控制台输出一个xml文件。xml文件中的数据值,是与程序员设置Java对象值一一对应的。
主程序主要是给xsd生成的Java对象赋值。
主程序如下:
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.GregorianCalendar;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.*;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import primer.po.*;
public class Main {
// This sample application demonstrates how to construct value classes
// and create a java content tree from scratch and marshal it
// to XML data
public static void main( String[] args ) {
try {
// create a JAXBContext
JAXBContext jc = JAXBContext.newInstance( "primer.po" );
// create an empty PurchaseOrder
PurchaseOrderType po = new PurchaseOrderType();
// set the required orderDate attribute
po.setOrderDate( getDate() );
// create shipTo USAddress object
USAddress shipTo = createUSAddress( "Alice Smith",
"123 Maple Street",
"Cambridge",
"MA",
"12345" );
// set the required shipTo address
po.setShipTo( shipTo );
// create billTo USAddress object
USAddress billTo = createUSAddress( "Robert Smith",
"8 Oak Avenue",
"Cambridge",
"MA",
"12345" );
// set the requred billTo address
po.setBillTo( billTo );
// create an empty Items object
Items items = new Items();
// get a reference to the ItemType list
List<items.item> itemList = items.getItem();
// start adding ItemType objects into it
itemList.add( createItem( "Nosferatu - Special Edition (1929)",
new BigInteger( "5" ),
new BigDecimal( "19.99" ),
null,
null,
"242-NO" ) );
itemList.add( createItem( "The Mummy (1959)",
new BigInteger( "3" ),
new BigDecimal( "19.98" ),
null,
null,
"242-MU" ) );
itemList.add( createItem( "Godzilla and Mothra: Battle for Earth/Godzilla vs. King Ghidora",
new BigInteger( "3" ),
new BigDecimal( "27.95" ),
null,
null,
"242-GZ" ) );
// set the required Items list
po.setItems( items );
// create an element for marshalling
JAXBElement
<purchaseordertype> poElement = (new ObjectFactory()).createPurchaseOrder(po);
// create a Marshaller and marshal to System.out
Marshaller m = jc.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
m.marshal(poElement, new FileOutputStream("test.xml"));
m.marshal(poElement, System.out);
} catch( JAXBException je ) {
je.printStackTrace();
} catch( IOException ioe ) {
ioe.printStackTrace();
}
}
public static USAddress createUSAddress( String name, String street,
String city, String state,
String zip ) {
// create an empty USAddress objects
USAddress address = new USAddress();
// set properties on it
address.setName( name );
address.setStreet( street );
address.setCity( city );
address.setState( state );
address.setZip( new BigDecimal( zip ) );
// return it
return address;
}
public static Items.Item createItem( String productName,
BigInteger quantity,
BigDecimal price,
String comment,
XMLGregorianCalendar shipDate,
String partNum ) {
// create an empty ItemType object
Items.Item item = new Items.Item();
// set properties on it
item.setProductName( productName );
item.setQuantity( quantity );
item.setUSPrice( price );
item.setComment( comment );
item.setShipDate( shipDate );
item.setPartNum( partNum );
// return it
return item;
}
private static XMLGregorianCalendar getDate() {
try {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar());
} catch (DatatypeConfigurationException e) {
throw new Error(e);
}
}
}
6、主程序写好之后,发现会报出一个错误:
The type javax.xml.stream.XMLStreamWriter cannot be resolved. It is indirectly referenced from required .class files
这是因为在JDK1.5中,没有
XMLStreamWriter这个类。
所以,我们需要导进包含XMLStreamWriter的jar包。这个包是jsr173_1.0_api.jar。读者可以自己去sun的网站上下载。
本文附件也加了这个jar包。
因为这个错误,花费了笔者半天的时间,汗。
7、运行主程序,结果出来了。
<purchaseorder orderdate="2007-09-15T12:01:12.375+08:00"><items><item partnum="242-GZ"><usprice></usprice></item></items></purchaseorder>
Well Done!!
</purchaseordertype>
</items.item></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:schema></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:element></xsd:element></xsd:schema>
分享到:
相关推荐
JEE5规范中提出。从java对象转成xsd,反之也可以
jaxb2.0文档,java于xml动态绑定框架,很好的东西。
改JAR包是JAXB2.0的核心包。。。。。。。。。。。。。。。。。。。
THE Java™Architecture for XML Binding (JAXB) provides a fast and convenient way to bind between XML schemas and Java representations, making it easy for Java developers to incorporate XML data and ...
NULL 博文链接:https://code727.iteye.com/blog/1914731
在使用webservice,esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader错误.执行System.out.println(System.getProperty("java.endorsed.dirs"));输出jaxb-api-2.1.jar...
jaxb-api-2.0.jar jaxb-api-2.0.jar
jaxb-api-2.2.2-sources.jar jaxb最新架包 可解决相关问题 开发者必备
jaxb资料及实例,里面还包含了其他资料地址2
jaxb-xjc-2.0EA3.jar
JAXB2.0的使用方法和测试代码,作者根据使用测试得出的总结。
java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file://build/web/WEB-INF/lib/jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class...
J2EE中解析XML文件的技术。最初JAXB是JavaEE的一部分,在JDK6.0中,sun将其移到了JavaSE中。在JDK6.0中,JAXB的版本中2.0,比起1.0版本,JAXB2.0基于Annotation来标识要作绑定的类和属性,从而缩减了开发工作量。
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...
IMMUTABLE-XJC是一个JAXB 2.x XJC插件,用于使模式派生类不可变: 删除所有的setter方法 分数班决赛 创建一个以所有字段为参数的公共构造函数 创建一个受保护的无参数构造函数 将课程中的所有字段标记为final ...
支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor; 支持基于HTTP、JMS、XMPP等多种协议访问Web服务; 支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-...
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB与xml相互转换实例。
jaxb-impl-2.0.3.jar 可用包
支持将Web服务绑定到POJO、XMLBeans、JAXB1.1、JAXB2.0和Castor; 支持基于HTTP、JMS、XMPP等多种协议访问Web服务; 支持多种Web服务业界重要标准如SOAP、WSDL、Web服务寻址(WS-Addressing)、Web服务安全(WS-...