ding> export CLASSPATH=$CLASSPATH:/projects/dev/binding
/projects/dev/binding> java org.enhydra.xml.binding.SchemaMapper xml/configuration.xsd
/projects/dev/binding> javac -d . *.java
从XML到Java代码的数据绑定之三 从文本到字节码(4)
时间:2010-12-02
使用 unmarshaller
如果已经从 XML 模式生成了类,并经过编译,则可以继续。作为确保类是否工作的简单测试,可以使用清单 7 中的类测试数据绑定的功能性(或 下载这个类)。
清单 7. 数据绑定测试类
import java.io.File;
import org.enhydra.xml.binding.unmarshaller;
public class TestMapper {
public static void main(String[] args) {
System.out.println("Starting unmarshalling...");
try {
File file = new File("xml/example.xml");
Object o = unmarshaller. unmarshall(file.toURL());
System.out.println("Object class: " + o.getClass().getName());
System.out.println("Casting to WebServiceConfiguration...");
WebServiceConfiguration config = ( WebServiceConfiguration)o;
System.out.println("Successful cast.");
System.out.println("Name: " + config.getName());
System.out.println("Version: " + config.getVersion());
System.out.println("Port Number: " + config.getPort().getNumber());
System.out.println("Port Protocol: " + config.getPort().getProtocol());
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译和运行该数据绑定测试类以查看结果,如清单 8 所示。
清单 8. 测试 unmarshaller
/projects/dev/binding> javac -d . TestMapper.java
/projects/dev/binding> java TestMapper
Starting unmarshalling...
Object class: WebServiceConfiguration Impl
Casting to WebServiceConfiguration ...
Successful cast.
Name: Unsecured Web Listener
Version: 1.1
Port Number: 80
Port Protocol: http
启动 Web 服务
作为一个更实用的示例,让我们回顾已经在几篇文章中提到的 Web 服务示例。假设有一些可以编程启动的 Java 类(叫做 WebService ),那么可简单地使用数据绑定来获取该类的配置信息。现在,从一个 XML 文档(或者甚至几个)中读取和启动新的 Web 侦听程序是非常容易的事 -- 这不需要任何 XML 特定 API 的知识,如清单 9 所示。将配置数据取消编组成 Java 对象,然后使用标准 Java accessor 方法(通常是 getXXX() 格式)来配置新的 Web 服务。
清单 9. XML 到 Web 侦听程序
// Assume we have a List of URLs
for (Iterator i = urls.iterator(); i.hasNext(); ) {
WebServiceConfiguration config = unmarshaller.unmarshal((URL)i.next());
WebService newService = new WebService();
newService.setName(config.getName());
// Set up port information
newService.setPortNumber(config.getPort().getNumber());
newService.setProtocol(config.getPort().getProtocol());
// Set up document root
newService.setDocRoot(config.getDocument().getRoot());
newService.setErrorPage(config.getDocument().getError());
newService.start();
}
|