﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-闲人野居-随笔分类-webservies</title><link>http://www.blogjava.net/zyl/category/17000.html</link><description>好好学习，天天向上</description><language>zh-cn</language><lastBuildDate>Mon, 09 Apr 2007 01:59:30 GMT</lastBuildDate><pubDate>Mon, 09 Apr 2007 01:59:30 GMT</pubDate><ttl>60</ttl><item><title>使用jetty配置 开发web应用</title><link>http://www.blogjava.net/zyl/archive/2007/04/09/jetty.html</link><dc:creator>布衣郎</dc:creator><author>布衣郎</author><pubDate>Sun, 08 Apr 2007 23:59:00 GMT</pubDate><guid>http://www.blogjava.net/zyl/archive/2007/04/09/jetty.html</guid><wfw:comment>http://www.blogjava.net/zyl/comments/109313.html</wfw:comment><comments>http://www.blogjava.net/zyl/archive/2007/04/09/jetty.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zyl/comments/commentRss/109313.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyl/services/trackbacks/109313.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 一直以来使用jetty作为我的web开发配置服务器，开始的时候和所有的初学者一样使用tomcat作为开发服务器，可用着用着，感觉tomcat越来越繁琐以及庞大。后来，用了jboss，知道jboss使用jetty作为其web应用服务器，所以就开始试着使用jetty。从那开始后，jetty就成为我的开发配置服务器了，从最初的4.0，到现在的6.0一直在使用着。<br><br>&nbsp;&nbsp; 喜欢jetty的原因，在于其的方便，简单的配置文件，简单的启动脚本，而且在elipse或者其他ide中，进行调试，运行都很方便。<br><br>&nbsp;&nbsp; 不想多说什么，让事实来说话吧。在开始之前，先下载jetty。目前最新的版本为6.1:<br>&nbsp;&nbsp; <a  href="http://docs.codehaus.org/display/JETTY/Downloading+and+Installing#download">http://docs.codehaus.org/display/JETTY/Downloading+and+Installing#download</a><br><br>&nbsp;&nbsp; 以前的版本文件是比较小的，现在的版本增加了很多东东，主要是很多例子应用，以及源码，经过删减只有，整个应用还是比较小的，大概也就10m多了。如果只是需要运行web应用，并且只是需要jsp 2.1规范的话，只有7m多了。以前4.0的时候只有2m多，现在也已经增加了那么多了，时代在进步，没有办法。<br><br>&nbsp;&nbsp; jetty主要的jar为jetty-6.1.1.jar，servlet-api-2.5-6.1.1.jar，jetty-util-6.1.1.jar。启动的jar 为start.jar。还有jsp规范的jar。jsp2.1,好像已经减了不少的jar了，只有4个文件core-3.1.1.jar，ant-1.6.5.jar，jsp-2.1.jar，jsp-api-2.1.jar。core是使用eclipse的jdt，进行jsp编译。<br><br>&nbsp;&nbsp; jetty的主要配置文件为etc/jetty.xml，当然你可以自己指定别的文件。在start.jar中有个start.config文件是默认的环境配置，以及指定默认的配置文件。可以手工替换。<br><br>&nbsp;&nbsp; 启动jetty很简单，在命令行下面java -jar start.jar<br>&nbsp;&nbsp; 如果需要指定start.config，使用java -DSTART=start.config -jar start.jart<br>&nbsp;&nbsp; 配置web 应用也非常的简单：<br>&nbsp;&nbsp; 更改jetty.xml就行了，增加web应用的方式包括，直接放置应用在webapps下面，或者配置以下的context<br><br>&nbsp;&nbsp;
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">New&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="Mywork"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.mortbay.jetty.webapp.WebAppContext"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">Ref&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="contexts"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;绝对路径，可以指定相对路径，增加&nbsp;&lt;SystemProperty&nbsp;name="jetty.home"&nbsp;default="."/&gt;&nbsp;就行</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">D:\\project\\work\\m2project\\esoft\\esoft-mywork-jsf\\src\\main\\webapp</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/mywork</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultsDescriptor"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/etc/webdefault.xml</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="virtualHosts"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Array&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="java.lang.String"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">localhost</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Array</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">New</span><span style="color: #0000ff;">&gt;</span></div>
<br><br>要想改变原先的webapps主应用，改变下面的配置<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Call&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.webapp.WebAppContext"</span><span style="color: #ff0000;">&nbsp;name</span><span style="color: #0000ff;">="addWebApplications"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">Ref&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="contexts"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/webapps</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/etc/webdefault.xml</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="boolean"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">True</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;extract&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="boolean"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">False</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;parent&nbsp;priority&nbsp;class&nbsp;loading&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Call</span><span style="color: #0000ff;">&gt;</span></div>
<br><br>默认的web.xml配置文件为webdefault.xml<br>如果想配置相应的web参数，可以更改其应用。<br><br>默认的端口为8080,如果想修改，更改：jetty.port属性<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Call&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="addConnector"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">New&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.nio.SelectChannelConnector"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="port"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.port"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="8080"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxIdleTime"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">30000</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Acceptors"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="confidentialPort"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">8443</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">New</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Call</span><span style="color: #0000ff;">&gt;</span></div>
<br><br><br>简单的配置，简单的启动，下一篇，我会介绍，如何在eclipse中使用jetty.<br><br>&nbsp;<br><img src ="http://www.blogjava.net/zyl/aggbug/109313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyl/" target="_blank">布衣郎</a> 2007-04-09 07:59 <a href="http://www.blogjava.net/zyl/archive/2007/04/09/jetty.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>体验jibx的灵活和快速</title><link>http://www.blogjava.net/zyl/archive/2007/02/26/100808.html</link><dc:creator>布衣郎</dc:creator><author>布衣郎</author><pubDate>Mon, 26 Feb 2007 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/zyl/archive/2007/02/26/100808.html</guid><wfw:comment>http://www.blogjava.net/zyl/comments/100808.html</wfw:comment><comments>http://www.blogjava.net/zyl/archive/2007/02/26/100808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zyl/comments/commentRss/100808.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyl/services/trackbacks/100808.html</trackback:ping><description><![CDATA[
		<br />    jibx又一个不错的xml绑定工具，随着这段时间的使用，感觉越来越随心应手了。和jaxb一样，都是属于xml绑定工具。不同于jaxb，jibx使用java字节码enhance技术，而jaxb更多在于源代码生成技术。jibx的工作主要在于前期，也就是进行字节码绑定，这一部分基本上都是在编译器完成的。在运行期，不需要任何的配置，由于字节码已经嵌入java类中。而jaxb更多在于运行期绑定，通过元数据或者xsd文件进行解析绑定。相对于jaxb来说，jibx更加的快速以及灵活。不过，前期的编译工作还是需要花费一点时间熟悉。下面通过一个简单的例子来说明，例子是其官方自带的。<br />    首先从网上下载jibx包 http://jibx.sourceforge.net/ 为其主要的官网。<br />    假设有两个类Person和Customer<br />    使用最简单的方式声明：<br />    public class Customer {<br />    public Person person;<br />    public String street;<br />    public String city;<br />    public String state;<br />    public Integer zip;<br />    public String phone;<br />   }<br />    public class Person {<br />    public int customerNumber;<br />    public String firstName;<br />    public String lastName;<br />   }<br /><br />xml 数据结构如下：<br />&lt;customer&gt;<br />  &lt;person&gt;<br />    &lt;cust-num&gt;123456789&lt;/cust-num&gt;<br />    &lt;first-name&gt;John&lt;/first-name&gt;<br />    &lt;last-name&gt;Smith&lt;/last-name&gt;<br />  &lt;/person&gt;<br />  &lt;street&gt;12345 Happy Lane&lt;/street&gt;<br />  &lt;city&gt;Plunk&lt;/city&gt;<br />  &lt;state&gt;WA&lt;/state&gt;<br />  &lt;zip&gt;98059&lt;/zip&gt;<br />  &lt;phone&gt;888.555.1234&lt;/phone&gt;<br />&lt;/customer&gt;<br /> <br />为了匹配相应的数据，jibx需要相应的映射文档，用于匹配java类和xml数据，如下：<br />&lt;binding&gt;<br />  &lt;mapping name="customer" class="org.jibx.starter.Customer"&gt;<br />    &lt;structure name="person" field="person"&gt;<br />      &lt;value name="cust-num" field="customerNumber"/&gt;<br />      &lt;value name="first-name" field="firstName"/&gt;<br />      &lt;value name="last-name" field="lastName"/&gt;<br />    &lt;/structure&gt;<br />    &lt;value name="street" field="street"/&gt;<br />    &lt;value name="city" field="city"/&gt;<br />    &lt;value name="state" field="state"/&gt;<br />    &lt;value name="zip" field="zip"/&gt;<br />    &lt;value name="phone" field="phone"/&gt;<br />  &lt;/mapping&gt;<br />&lt;/binding&gt;   <br />  <br />当然手写是比较费力的，还好,jibx工具提供了相应的生成方法：jibxtools包提供了BindingGenerator类，用于生成相应的xml文件<br />可以直接在cmd下执行：java -jar  jibxtools.jar -f bind.xml Customer<br />如果没有复杂的属性，如枚举和数组，直接就可以生成了。<br />现在开始编译期的最后一步：绑定类<br />同样可以使用cmd的方式或者ant task来执行<br />java -jar jibx-bind.jar binding.xml<br />主要的执行类为org.jibx.binding.Compile,也可以直接运行此类<br />如果你有java反编译器，可以查看相应的类文件已经更改，增加了相应的jibx信息，并且增加了相应的jibx_binding*_access类。<br />在运行期，你只需要使用以下的代码来进行处理就行了，由于jibx 使用最新的xml pull技术，执行的速度还是比较快的。<br /> IBindingFactory bfact = BindingDirectory.getFactory(Customer.class);<br /> // unmarshal customer information from file<br /> IUnmarshallingContext uctx = bfact.createUnmarshallingContext();<br /> FileInputStream in = new FileInputStream("data.xml");<br /> Customer customer = (Customer)uctx.unmarshalDocument(in, null);<br />//marshal<br />IMarshallingContext mctx = bfact.createMarshallingContext();<br />mctx.setIndent(2);<br />FileOutputStream out = new FileOutputStream("data.xml");<br />mctx.marshalDocument(customer, "UTF-8", null, out);<br /><br />如果你的xml数据结构比较固定，可以考虑使用。<br /><br /><img src ="http://www.blogjava.net/zyl/aggbug/100808.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyl/" target="_blank">布衣郎</a> 2007-02-26 20:44 <a href="http://www.blogjava.net/zyl/archive/2007/02/26/100808.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从一个实例看jaxb的强大</title><link>http://www.blogjava.net/zyl/archive/2006/11/11/80606.html</link><dc:creator>布衣郎</dc:creator><author>布衣郎</author><pubDate>Sat, 11 Nov 2006 12:20:00 GMT</pubDate><guid>http://www.blogjava.net/zyl/archive/2006/11/11/80606.html</guid><wfw:comment>http://www.blogjava.net/zyl/comments/80606.html</wfw:comment><comments>http://www.blogjava.net/zyl/archive/2006/11/11/80606.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zyl/comments/commentRss/80606.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyl/services/trackbacks/80606.html</trackback:ping><description><![CDATA[    读取xml对于应用软件来说是一个必不可少的工作，当然现在的jdk也提供了很好的处理xml方式，读写xml的库也挺多，包括有名的dom4j，不管使用任何的代码库，对于xml只是一个解析工作而已，不能马上绑定到java 对象。对于对象，每次都需要set 或者get相应的属性，当然也可以使用map 来保存xml配置。<br />    于是，一种新的处理方式用于对象和xml之间的映射就变得非常需要，还好sun提供了jaxb，一种很方便的方式来处理java对象和xml内容。下面通过一个实例来体会一下。<br />    看一下如下的xml<br />&lt;?xml version="1.0"?&gt;<br />&lt;customer id="No1"&gt;<br />    &lt;name&gt;Alice Smith&lt;/name&gt;<br />    &lt;address&gt;<br />        &lt;street&gt;123 Maple Street&lt;/street&gt;<br />        &lt;city&gt;Cambridge&lt;/city&gt;<br />        &lt;zip&gt;12345&lt;/zip&gt;<br />    &lt;/address&gt;<br />&lt;/customer&gt;<br /><br />别忘了生成相应的xsd，或者dtd文件，这是主要的配置：<br />xsd:<br />&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;<br />    <br />    &lt;xs:complexType name="Customer"&gt;<br />      &lt;xs:sequence&gt;<br />         &lt;xs:element name="address" type="Address"/&gt;<br />         &lt;xs:element name="name" type="xs:string"/&gt;<br />      &lt;/xs:sequence&gt;<br />       &lt;xs:attribute name="id" type="xs:string"/&gt;        <br />    &lt;/xs:complexType&gt;  <br />    <br />    &lt;xs:complexType name="Address"&gt;<br />      &lt;xs:sequence&gt;<br />         &lt;xs:element name="street" type="xs:string"/&gt;<br />         &lt;xs:element name="city" type="xs:string"/&gt;<br />         &lt;xs:element name="zip" type="ZipCodeType"/&gt;<br />       &lt;/xs:sequence&gt;<br />   &lt;/xs:complexType&gt;  <br />   <br />    &lt;xs:simpleType name="ZipCodeType"&gt;<br />      &lt;xs:restriction base="xs:integer"&gt;<br />         &lt;xs:minInclusive value="10000"/&gt;<br />         &lt;xs:maxInclusive value="99999"/&gt;<br />      &lt;/xs:restriction&gt;<br />    &lt;/xs:simpleType&gt;<br />    &lt;xs:element name="customer" type="Customer"/&gt;<br />    &lt;xs:element name="address" type="Address"/&gt;<br />&lt;/xs:schema&gt;<br /><br /><br />需要映射两个java对象，CustomerBo和AddressBo<br />java 对象可以通过xjc来生成。<br />或者自己定义（但需要增加相应的java注释，如@XmlAccessorType,@XmlType,这是给引擎使用的)<br />所以一般通过xjd自动生成<br /><br /><br />@XmlAccessorType(AccessType.FIELD)<br />@XmlType(name = "Customer", propOrder = {<br />    "address",<br />    "customerName"<br />})<br />public class CustomerBo {<br /><br />    protected Address address;<br /><br />    @XmlElement(name = "name")<br />    protected String customerName;<br /><br />    @XmlAttribute<br />    protected String id;<br /><br />    public Address getAddress() {<br />        return address;<br />    }<br /><br />    public String getCustomerName() {<br />        return customerName;<br />    }<br /><br />    public String getId() {<br />        return id;<br />    }<br /><br />    public void setAddress(Address value) {<br />        this.address = value;<br />    }<br /><br />    public void setCustomerName(String value) {<br />        this.customerName = value;<br />    }<br /><br />    public void setId(String value) {<br />        this.id = value;<br />    }<br />}<br /><br /><br />public class Address {<br /><br />    protected String street;<br /><br />    protected String city;<br /><br />    @XmlElement(name = "zip")<br />    protected BigInteger zipCode;<br /><br />    public String getStreet() {<br />        return street;<br />    }<br /><br />    public void setStreet(String value) {<br />        this.street = value;<br />    }<br /><br />    public String getCity() {<br />        return city;<br />    }<br /><br />    public void setCity(String value) {<br />        this.city = value;<br />    }<br /><br />    public BigInteger getZipCode() {<br />        return zipCode;<br />    }<br /><br />    public void setZipCode(BigInteger value) {<br />        this.zipCode = value;<br />    }<br /><br />}<br /><br />定义jxb绑定文件：<br />&lt;jxb:bindings version="1.0"<br />               xmlns:jxb="http://java.sun.com/xml/ns/jaxb"<br />               xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;<br />   &lt;jxb:bindings schemaLocation="customer.xsd" node="/xs:schema"&gt;    <br />           <br />   &lt;jxb:globalBindings<br />         fixedAttributeAsConstantProperty="false"<br />         collectionType="java.util.Vector"<br />         typesafeEnumBase="xs:NCName"<br />         choiceContentProperty="false"<br />         typesafeEnumMemberName="generateError"<br />         enableFailFastCheck="false"   <br />         generateIsSetMethod="false"<br />         underscoreBinding="asCharInWord"/&gt;<br />   &lt;jxb:schemaBindings&gt;<br />      &lt;jxb:package name="mycompany.demo"&gt;<br />        &lt;jxb:javadoc&gt;&lt;![CDATA[&lt;body&gt;Package level documentation for generated package mycompany.demo.&lt;/body&gt;]]&gt;<br />        &lt;/jxb:javadoc&gt;<br />      &lt;/jxb:package&gt;<br />      &lt;jxb:nameXmlTransform&gt;<br />        &lt;jxb:elementName suffix="Element"/&gt;<br />      &lt;/jxb:nameXmlTransform&gt;<br />    &lt;/jxb:schemaBindings&gt;   <br /><br />    //需要绑定的元素<br />   &lt;jxb:bindings <font color="#ff0000">node="//xs:complexType[@name='Customer']"</font>&gt;<br />       //绑定的类<br />      &lt;j<font color="#ff0000">xb:class name="CustomerBo"</font>&gt;<br />        &lt;jxb:javadoc&gt;A &amp;lt;b&gt;todo..&lt;/jxb:javadoc&gt;<br />      &lt;/jxb:class&gt;<br />      &lt;jxb:bindings node=".//xs:element[@name='name']"&gt;<br />           //绑定的属性<br />          <font color="#ff0000"> &lt;jxb:property name="customerName"/&gt;</font><br />        &lt;/jxb:bindings&gt;<br />    &lt;/jxb:bindings&gt;   <br />          <br />    &lt;jxb:bindings node="//xs:complexType[@name='Address']"&gt;<br />      &lt;jxb:class name="AddressBo"&gt;<br />        &lt;jxb:javadoc&gt;&lt;![CDATA[First line of documentation for a &lt;b&gt;Address&lt;/b&gt;.]]&gt;&lt;/jxb:javadoc&gt;<br />      &lt;/jxb:class&gt;<br />      &lt;jxb:bindings node=".//xs:element[@name='zip']"&gt;<br />         &lt;jxb:property name="zipCode"/&gt;<br />      &lt;/jxb:bindings&gt;<br />    &lt;/jxb:bindings&gt;  <br />             <br />   &lt;/jxb:bindings&gt;<br />&lt;/jxb:bindings&gt;<br /><br />看着比较复杂，其实挺好理解，当然可以不需要这个绑定文件，也可以绑定相应的java 类，但需要元素名称和类名称完全一致，而且属性也要一致。<br /><br />看一下jaxb是如何来读入xml的：<br />         //主要的环境类，主要读取ObjectFactory这个类，这是由xjc生成的。<br />        JAXBContext jc = JAXBContext.newInstance("mycompany.demo");<br />        Unmarshaller u = jc.createUnmarshaller();<br />        JAXBElement customerE = (JAXBElement) u.unmarshal(new FileInputStream(<br />                                "customer.xml"));<br />        CustomerBo bo = (CustomerBo) customerE.getValue();<br />就是这么简单<br /><br />写入也比较简单：<br />         JAXBContext jc = JAXBContext.newInstance("mycompany.demo");<br />        Marshaller marshaller=jc.createMarshaller();<br />        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);<br />        customerE.setValue(bo);<br />        marshaller.marshal( customerE,new FileOutputStream("test.xml"));<br /><br />在webservices中jaxb的作用是明显的，当然也有不方便的地方，比如定义binding.jaxb文件时，如果没有工具支持，手工写，还是比较困难。<br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/zyl/aggbug/80606.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyl/" target="_blank">布衣郎</a> 2006-11-11 20:20 <a href="http://www.blogjava.net/zyl/archive/2006/11/11/80606.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jaxb 简介</title><link>http://www.blogjava.net/zyl/archive/2006/11/08/79948.html</link><dc:creator>布衣郎</dc:creator><author>布衣郎</author><pubDate>Wed, 08 Nov 2006 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/zyl/archive/2006/11/08/79948.html</guid><wfw:comment>http://www.blogjava.net/zyl/comments/79948.html</wfw:comment><comments>http://www.blogjava.net/zyl/archive/2006/11/08/79948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zyl/comments/commentRss/79948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zyl/services/trackbacks/79948.html</trackback:ping><description><![CDATA[  JavaTM Architecture for XML Binding (JAXB) 提供了api 和工具用于自动映射XML文档和Java对象。<br />  <br />  JAXB框架允许开发者执行以下的操作：<br />  <br />  通过schema 生成相应的java 源文件<br />  访问以及更新相应的java 源文件<br />  配置java 源文件，生成相应的schema<br /><br />  JAXB 给了java 开发者一种有效的和标准的方式用于映射xml和java 代码。java开发者使用JAXB能提供生产力，由于只需要写很少的代码，不需要成为xml方面的专家。JAXB 对于开发者来说更容易扩展他们的应用，使用XML或者web services技术。<br /><br /><br /> <b> 看一个简单的例子：</b><br /> <br />  从xsd文件生成相应的java 文件<br /><br /><b>  xsd 文件配置如下：</b><br />  <br />  &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;<br />  <br />  &lt;xs:import namespace="http://www.w3.org/XML/1998/namespace"<br />        schemaLocation="http://www.w3.org/2001/xml.xsd" /&gt;<br />  <br />  &lt;xs:complexType name="foo"&gt;<br />    &lt;xs:sequence&gt;<br />      &lt;xs:element name="age" type="xs:int" /&gt;<br />    &lt;/xs:sequence&gt;<br />  &lt;/xs:complexType&gt;<br />  <br />  &lt;xs:element name="root" type="foo" /&gt;<br />  <br />  &lt;/xs:schema&gt;<br /><br /><b>  定义ant build :</b><br />  主要的内容如下：<br /> &lt;path id="classpath"&gt;<br />    &lt;pathelement path="src" /&gt;<br />    &lt;pathelement path="classes" /&gt;<br />    &lt;pathelement path="schemas" /&gt;<br />    &lt;!--for use with bundled ant--&gt;<br />    &lt;fileset dir="${jwsdp.home}" includes="jaxb/lib/*.jar" /&gt;<br />    &lt;fileset dir="${jwsdp.home}" includes="sjsxp/lib/*.jar" /&gt;<br />    &lt;fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/activation.jar" /&gt;<br />    &lt;fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/resolver.jar" /&gt;<br />  &lt;/path&gt;<br />  定义xjc任务，用于从schema 中生成相应的java 文件<br />  &lt;taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"&gt;<br />    &lt;classpath refid="classpath" /&gt;<br />  &lt;/taskdef&gt;<br /><br />  执行xjc <br />  &lt;xjc schema="po.xsd" destdir="gen-src"&gt;<br />      &lt;produces dir="gen-src" includes="**/*.java" /&gt;<br />  &lt;/xjc&gt;<br /><br />  执行ant 任务后产生的java 文件如下：<br /><br />  foo.java<br /><br />  @XmlAccessorType(AccessType.FIELD)<br />  @XmlType(name = "foo", propOrder = {<br />    "age"<br />})<br />public class Foo {<br /><br />    @XmlElement(type = Integer.class)<br />    protected int age;<br /><br />    /**<br />     * Gets the value of the age property.<br />     * <br />     */<br />    public int getAge() {<br />        return age;<br />    }<br /><br />    /**<br />     * Sets the value of the age property.<br />     * <br />     */<br />    public void setAge(int value) {<br />        this.age = value;<br />    }<br /><br />}<br /><br />ObjectFactory.java 主要的产生类，作为工厂类<br /><br />@XmlRegistry<br />public class ObjectFactory {<br /><br />    private final static QName _Root_QNAME = new QName("", "root");<br /><br />    /**<br />     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated<br />     * <br />     */<br />    public ObjectFactory() {<br />    }<br /><br />    /**<br />     * Create an instance of {@link Foo }<br />     * <br />     */<br />    public Foo createFoo() {<br />        return new Foo();<br />    }<br /><br />    /**<br />     * Create an instance of {@link JAXBElement }{@code &lt;}{@link Foo }{@code &gt;}}<br />     * <br />     */<br />    @XmlElementDecl(namespace = "", name = "root")<br />    public JAXBElement&lt;Foo&gt; createRoot(Foo value) {<br />        return new JAXBElement&lt;Foo&gt;(_Root_QNAME, Foo.class, null, value);<br />    }<br /><br />}<br />比较简单的实现，不过主要的工作还是用来通过java类来生成相应的xml文件：<br />测试方法：<br />public static void main(String[] args) throws Exception {<br />        <br />        JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);<br />        ObjectFactory of = new ObjectFactory();<br />        Foo foo = new Foo();<br />        foo.setAge(11);<br />        JAXBElement&lt;Foo&gt; e = of.createRoot(foo);<br /><br />         //用于输出元素<br />        Marshaller marshaller = context.createMarshaller();<br />        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);<br />        FileOutputStream stream = new FileOutputStream(new File(args[0]));<br />        marshaller.marshal(e, stream);<br />    }<br /><br />生成的xml如下：<br />&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;<br />&lt;root&gt;<br />    &lt;age&gt;11&lt;/age&gt;<br />&lt;/root&gt;<br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/zyl/aggbug/79948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zyl/" target="_blank">布衣郎</a> 2006-11-08 20:49 <a href="http://www.blogjava.net/zyl/archive/2006/11/08/79948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>