🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.xml
Article #232

�� Smooks Eclipse ������ XML �� Java ���ת��

#232
From: <Test/>
Date: Wed, 26 May 2010 14:44
347 lines
22397 bytes
����, ��ʿ�о���, Trinity College Dublin(������ʥ��һѧԺ)
��飺 Smooks ��һ����Ҫ���ڴ��� XML ��� XML (CSV��EDI��Java ��) ֮��
ת���Ŀ�Դ Java ��ܣ����Ա�Ӧ���� SOA ��Ʒ����������������ת���ȹ��ܡ�
�ڽ����� Smooks ��֧�ֵ�������Ҫ XML �� non-XML ֮�����ת��ģʽ֮�󣬱�
������������������� Smooks Eclipse ���������� XML �� Java �İ󶨡�

����
XML (eXtensible Markup Language) �� W3C �����һ�����������ṹ�����
��Ԫ���� (Meta Language)������ XML ��Ŀ�����Ϊ�˴ٽ� Internet �нṹ
���ĵ��Ľ���������䱻���Ϊ����������ԡ�����ϵͳ����Э���޹صĴ������
������������ XML ����ݶ����ԣ���ij��ָ�ֲ�ʽ�������� (distributed 
computing) �������ش�Ӱ�죬���� SOA��Service Oriented 
Architecture���� Web Ӧ���еõ��˷dz��㷺��Ӧ�á�
Ȼ����ʵ�� SOA Ӧ�õ���ƺͿ����У����ǵ����ϵͳ�ĸ�������ģ����칹�� 
(heterogeneity)�����磺ģ�鿪��ʱ�䣨�½� v.s ����ϵͳ�������Ĺ���
��Web Portal v.s ��ݿ⣩�����Ŀ�꣨���� v.s �����ԣ��ȵ����أ���ͬ��ģ
����ܻ�ʹ�ó� XML ����IJ�ͬ��������ʹ洢��ʽ�������Ҫ������Ա�� XML �� 
non-XML ��ʽ֮��������ת�������磬�����ҵϵͳ���� EDI��Electronic 
Data Interchange����׼������ݽ��������ϣ���� SOA Ӧ������ϴ�������ϵ
ͳ������Ҫ��� XML �� EDI ��ʽ֮������ת����������ƣ������Ϲ���ϵͳ�Ŀ�
���У����û�������ǰ�������ʹ�� XML �洢�û�������Ʒ����ݣ���������Ҫ��
��Щ��ݶ��� (Object) ���д��?����洢����ݿ���߲��봦����У��繺��
�����Ȳ�������ݺ͸�Ч�� XML �� Java ����ת��������ij��Ͼ��ܷ��Ӿ޴���
�á�
ʵ���ϣ���� XML �� non-XML ��ʽ�����ת������ǰ����һЩ���ߣ�Ȼ��ȴ����
���������Ի��ǹ���ȫ�����ϲ��������⡣���磬XSLT��XSL Transformation�� 
���԰�������ת�� XML ��ݵ� HTML ��ҳ�����ǣ�XSLT ��û�н���������ᵽ��
��ͳ��� ( �� EDI��CSV) �� XML ��ݵĻ���ת����ͬʱ����д XSL ��ת��ģ
�壬�����ʮ�־�ͨ XSLT �﷨��������Ҫ�ķѴ���ʱ������ֲᡣ��ˣ�һ����
�����á�����ʹ�õ� XML �� non-XML ���ת����ܺ����棬�ͳ�Ϊ SOA Ӧ�ÿ���
�е���Ҫ���ߡ�����Ҫ���ܵ� Smooks ��������һ��ӵ��ǿ���ܵ� XML �� non-
XML ���ת�����档
��ҳ��
Smooks ���ת������
Smooks ��һ����� LGPL Э��Ŀ�Դ Java ��ܣ���Ҫ���ڴ��� XML �� non-
XML ��ʽ ( ���� CSV��EDI��Java) ֮���ת����Smooks �� 2008 �� 5 �·�
�� v1.0��Ŀǰ���µİ汾���� v1.3.1������ Smooks ������Ա���ԣ���Smooks ��
�ò��� XML, EDI��XML��CSV ��ø�򵥡���
ʵ���ϣ�����ͨ���� Smooks ������һ�� XML �� non-XML ��ʽ�ġ����ת����
�桱��Ȼ���� Smooks �ĺ���ʵ���У���������Ϊ XML, CSV, EDI �� Java ����
��Դ�ṩ��һ���¼�����Event Stream���������Դ�Ĵ�����ʵ���Կ�������Դ���
���������һ�����߼��¼����?��ˣ�Smooks �ĺ�����ʵ��һ�����ṹ������¼�
�����������������������У�������Ա��������������ģʽʹ�� Smooks��
������Ա���Ա�д�Լ����߼��¼������������ڶ��ƻ�����һ�����Դ�¼����е��ض�
�¼���
������ԱҲ����ֱ��ʹ�� Smooks ���а����ṩ�Ľ��������out-of-box 
solutions ����������ģʽ�£�������Աֻ�����ñ��˴������������������������
�����Դ���д��?���磬ͨ��ʹ�� Smooks �ṩ����������ɴ� XML �� Java 
�����ת�������籾�����潫��չʾ��һ��
��ˣ��ڿ�ʼʹ�� Smooks ֮ǰ�����������˽�һ�� Smooks ���а����Ѿ��ṩ��
��Щ���ת�����ܡ��� Smooks �ķ��а��У���Ҫ���� 4 ����Ҳ��ʵ�ֵ� XML 
�� non-XML ���ת����� ���ֱ�Ϊ��
Java �� (Java binding)
Smooks ֧�ִӶ������Դ��� Java ���󣬰����� CSV, EDI, XML �� Java ��
����ͼ 1 ��ʾ������ɵ� Java ����ȿ�����Ϊ���ת���Ľ�����ʹ�ã�Ҳ���Գ�
Ϊ��һ�����ת�����롣

ͼ 1. Smooks Java ��
 
��ݸ�ʽת����Transformation ��
Smooks ֧�ֶ�����ݸ�ʽ֮���ת����������XML > XML, CSV > XML, EDI > 
XML, XML > EDI, XML > CSV, Java > XML, Java > EDI, Java > CSV, 
Java > Java, XML > Java, EDI > Java �ȣ�ͼ 2 ����

ͼ 2. Smooks ���ת��
 
������ݴ��?Huge Message Processing ��
Smooks �ܹ�֧�ֶԺ�����ݣ�GB �������Ĵ��?������ (Split)��ת�� 
(Transform) �����������ݷ�Ƭ (message fragment) �Լ�·�� (Route) 
��Щ��ݷ�Ƭ���ļ�����ݿ���� JMS(Java Message Service)��

ͼ 3. Smooks ������ݴ���
 
�����Ϣ���䣨Message Enrichment ��
Smooks ����������ݿ�����������Դ����Ӷ������Ϣ�����������С���������
�繺��Ӧ���п��Խ��û���ƫ�ã�preference������ݿ�����ӵ��û������У��Ա�
Ϊ����ҵ�������ṩ�����Ϣ��

ͼ 4. Smooks �����Ϣ����
 
���ṩ����˷ḻ�� XML �� non-XML ���ת�����ܵ�ͬʱ��Smooks ͬʱ���ṩ
�� Eclipse Smooks ����Է��㿪����Ա�� Eclipse ���ɿ��������п����Ͳ���
���� Smooks �����ת��Ӧ�� [7]�������������Ľ��� Java �� Ϊ���� 
Smooks Eclipse �������Ϊ��ϸ�Ľ�������� Eclipse �����������ơ����ú�
���Ի��� Smooks �� XML �� Java ��������ת����
��ҳ��
���� Smooks �� Java ��
�����������ᵽ�ģ�Smooks �ܹ�֧�ִӶ���Դ��ݸ�ʽ��� Java ����Ȼ��
�ǵ� JiBX Ҳ�ܹ���ɴ� XML ��� Java ���� [8]����ô������ԱΪʲôҪѡ�� 
Smooks ��������������أ�������ѡ�� Smooks �����ɰ���������˵��������Щ��
�� Smooks ��������
Smooks ֧�ִ� XML �� non-XML ��ʽ���� EDI ��CSV �� JSON ����� Java 
����������� XML �� non-XML Դ������ JiBX ֻ֧�ִ� XML ���� Java ��
��
��Դ��ݽ��� XML ��ʽ����ݣ���ȱ�� XML Schema ��ʱ��Smooks ��Ȼ�ܹ���
�ɴ� XML ������ Java ���󣻶� JiBX ����֧�����������
���� Smooks �������� Schema �ļ�����������Դ XML ��ʽ�仯������£�
Smooks ֻ����Ӧ���޸Ĵ� XML �� Java �����ӳ�����ü��ɣ����������������� 
Schema �Ĺ�����Ҫ���´� Schema ��� Java �������±��벢����
�������ᵽ��Smooks ֧���û��Զ����߼��¼��������Դﵽ�ڴ� XML ��� Java 
����Ĺ���м��붨�ƴ����Ŀ�ģ��Ӷ�������õĿ���չ�ԣ�Extensibility ����
JiBX ����֧�����ƵĹ���
���������Ŀ����������������ôѡ�� Smooks ����� Java �󶨣����籾��
���漴�����ܵ�һ������һ�����ɺ͸�Ч�Ŀ������顣
���Ľ�����������һ���򵥵�����˵�����ʹ�� Eclipse Smooks �����ͼ�λ���
��������� XML to Java �󶨡��������˽��� Smooks Eclipse �����ʹ�÷���
֮�󣬿����������Ƶķ������ Smooks ��֧�ֵ��������ת�����ܡ�
��ҳ��
���� Smooks Eclipse ������ Java ��
������ʹ�õ�ʾ��
�ڱ����У�����ʹ��һ���򵥵����Ϲ���ϵͳ�ij�����˵�����ʹ�� Smooks 
Eclipse ������� Java �� �Ŀ�������������Ϲ���ϵͳ��ǰ�˽��û��Ķ�����
�����嵥 1 �е� XML ��ʽ���д洢��Ȼ�󴫸��̨����ģ�顣����ϣ��ʹ�� 
Smooks ����ɴӴ� XML �ļ������Ӧ�� Java �����Ա���к���Ĵ��?

�嵥 1. ���Դ XML �ļ�
                
 <?xml version="1.0"encoding="ISO-8859-1"?> 

 <order> 
     <header> 
  <date>Wed Nov 15 13:45:28 EST 2006</date> 
  <customer number="123123">Joe</customer> 
  </header> 
 <order-items> 
  <order-item> 
  <product>111</product> 
  <quantity>2</quantity> 
  <price>8.90</price> 
  </order-item> 
  <order-item> 
  <product>222</product> 
  <quantity>7</quantity> 
  <price>5.20</price> 
  </order-item> 
  </order-items> 
 </order> 
 

��װ Smooks ���� Eclipse ���
Smooks �����汾���Դ� http://www.smooks.org/mediawiki/index.php?
title=Downloads���ء�����ʹ�õ������°汾 v1.3.1��ѡ��ҳ���С�All��������
��ҳ�档�������֮�� Smooks ������ lib Ŀ¼�е����� jar ������ʹ��
�� Eclipse �� plugin Ŀ¼��
�������� Smooks ������֮�󣬽�������Ҫ�� Eclipse �а�װ Smooks ������
������� Eclipse �е� Help > Install New Software �����ڳ��ֵ�ҳ����
�����Add�������һ���µ� update site����ַΪ 
http://download.jboss.org/jbosstools/updates/JBossTools-
3.1.0.GA���ڽ�������ʾ�Ĵ� update site �ɹ�ѡ��װ�IJ���У�ѡ�� Data 
Services > Smooks Tools������ Next ��ʼ��װ�����

ͼ 5. ��װ Smooks Eclipse ���
 
��װ���֮������ Eclipse������ File > New������������ͼ����ʾ�� 
Smooks �����ļ� Wizard����˵�� Smooks Eclipse �����װ�ɹ���

ͼ 6. �½� Smooks �����ļ� Wizard
 
������ XML �� Java �� ֮ǰ������Ŀ�� Java ��
���ڵ�ĿǰΪֹ�����ǽ�����ΪԴ��ݵ� XML �ļ�������ڿ�ʼ���� Smooks ��� 
XML �� Java �İ�֮ǰ������Ҫ����Ŀ�� Java �����Գ�����ݡ�
�ӱ�ʾ��� XML �ļ��п��Ժ����׵Ŀ�����������Ҫ���� 3 �����Զ�Ӧ XML��

�嵥 2. Header ��
                
public class Header {
    // member variables
    private String date;
    private String customerNumber;
    private String customerName;
    
    // constructors
    public Header() {
        date = null;
        customerNumber = null;
        customerName = null;
    }
    
    public Header(String dateInput, String 
customerNumberInput, 
                     String customerNameInput) {
        date = dateInput;
        customerNumber = customerNumberInput;
        customerName = customerNameInput;
    }
    
    // get/set functions
    public String getDate() {
��
}


  


�嵥 3. OrderItem ��
                
public class OrderItem {
    // member variables
    private String productId;
    private String quantity;
    private String price;
    
    // constructors
    public OrderItem() {
        productId = null;
        quantity = null;
        price = null;
    }
    
    public OrderItem(String productIdInput, String 
quantityInput, String priceInput) {
        productId = productIdInput;
        quantity = quantityInput;
        price = priceInput;
    }
    
    // get/set functions
    public String getProductId() {
��
}

 


�嵥 4. Order ��
                
public class Order {
    public Header header;
    
    public Vector <OrderItem> orderItems;
    
    public Order() {
        header = new Header();
        
        orderItems = new Vector <OrderItem>();
    }
    
    public void setHeader(Header headerInput){
        header = headerInput;
    }
    
    public void setOrderItems(OrderItem item){
        orderItems.add(item);
    }
}
  

���� Smooks ��� XML �� Java ����ӳ��
������ XML �ļ���ΪԴ��ݣ�����������Ӧ Java ��������֮�����ǾͿ��Կ�
ʼ���� Smooks ����� XML �� Java �����ӳ�䡣
���ȣ��� Eclipse ���½�һ�� Java ��Ŀ��File > New > Java > Java 
Project��Ȼ�������п����� Java ��Դ�ļ����������½� Java ��Ŀ�� src ��
�����У�ͬʱ���½�һ���ļ��� xml ������ΪԴ��ݵ� XML �ļ����������С�Ȼ��
�½�һ�� Smooks �����ļ���File > New > Smooks > Smooks 
Configuration File��ѡ��ղŴ����� Java Project �� src �ļ�����Ϊ 
Smooks �����ļ��ĸ�Ŀ¼������ȱʡ���ļ��� smooks-config.xml������ 
Finish ��ɳ�ʼ�������ļ�����ʱ�� Smooks Processing �༭����ֻ��һ�� 
Input Task ͼ�ꡣ
���� Input Task ͼ�꣬����Կ��� Smooks input reader ���������ý��档
��������ϣ����ɴ� XML �� Java �İ󶨣������ Input Type �������˵���ѡ
��Input Type��Ϊ XML���������������ý����Ҳ�� Input Data �е��� Add 
��Դ XML �ļ���ӵ���Ŀ�У�ͼ 7����Smooks ���Զ������� XML �ļ����� 
Input Model View ���г������ģ�͡����������Щ���Դ���������֮��
Smooks �����ļ�Ӧ��������ͼ 7 ��ʾ��

ͼ 7. ���� Smooks �����ļ�
 
�������Դ��ݵ���֮������Ҫ��ʼ���� Java �󶨡���������� Input Task 
����ɫ��ͷ�Ҳ࣬������һ����ɫ�Ӻţ�+�����֣������˼ӺŲ�ѡ����ֵ���
ʾ��Java ӳ�䡱��ͼ 8����

ͼ 8. ѡ�� Java ӳ��
 
��ʱ���ý����·��� Selected Task Details �н��������ΪԴ��ݵ� XML ��
�������ģ�ͣ����ǽ�������Ҫ�����ǽ�Ŀ�� Java �ർ�벢���ö���֮���ӳ���
ϵ��
Ϊ�˽������� Java �ർ�� Smooks ���ã��� Selected Task Details ���ÿ�
�пհ״���������Ҽ�ѡ�� Add > Java Class���������п����� Header��
OrderItem �Լ� Order �ർ�롣Ȼ��Ϳ��Էdz������ʹ����ҷ�ķ�ʽ����ߵ� 
XML ���ģ�ͺ��ұߵ� Java ��ͳ�Ա����֮�佨��ӳ���ϵ�����Ľ������ͼ��
ʾ��

ͼ 9. ���� XML �� Java ��֮���ӳ���ϵ
 
����
������� Smooks ������ν� XML �ļ�ת��Ϊ Java ����֮�����ǿ���ʮ�ַ���
���� Java �����е��� Smooks ����������ת����������嵥 5 �г���ʾ����롣
ע�⣬Ϊ������ Smooks������Ҫ�� Smooks ���а��е� jar ����ӵ���ǰ 
Project �� Build path ���У��Ҽ�� Project > Build Path > 
Configure Build Path �� > Library > Add External JAR��ѡ�����ص� 
Smooks �ļ��� lib Ŀ¼������ jar �ļ�����

�嵥 5. �� Java �����е��� Smooks ���ת������
                
public class TestSmooks {

    
    public static void main(String[] args) throws IOException, 
SAXException {
    
    // Instantiate Smooks with the config...
    Smooks smooks = new Smooks("smooks-config.xml");
    JavaResult javaResult = new JavaResult();
    
    // Filter the input message to the JavaResult...
    smooks.filter(new StreamSource(new 
FileInputStream("C:\\Order.xml")),
              javaResult);

    // Extract the Order bean from the JavaResult using the 
beanId...
    OrderItem orderItem = (OrderItem) 
javaResult.getBean("OrderItem");
        
    System.out.println("OrderItem.productId = " + 
orderItem.getProductId());
    }

}

  

��������������
 OrderItem.productId = 111 
  

���ˣ����Ǿ������ʹ�� Smooks Eclipse ������� XML �� Java ��������ת
�������úͲ��ԡ�
��ҳ��
����
Smooks ��һ������ LGPL Э��Ŀ�Դ Java ���ת����ܣ��������ת������ӵ��
ǿ��Ĺ��ܣ��ܹ���ɰ��� Java �󶨣���ݸ�ʽת����������ݴ��?�����Ϣ��
��ȶ��� XML �� non-XML ���֮���ת����
��� Eclipse Smooks �����������Ա���Էdz����������ͼ�λ�������� 
Smooks ���ת�������á���������ʾ��չʾ��������� Smooks Eclipse �����
�� XML �� Java ��������ת������ Java ������ô� Smooks ���ת��������
��Ա�����������Ƶķ������ Smooks ��֧�ֵ��������͵����ת����
����������������������������������������������������������������������������
������
ת�ԣ�http://www.ibm.com/developerworks/cn/xml/x-
1005liup/index.html?ca=drs-cn-0520
--
Happy XMLing


�� ��Դ:��ˮľ���� http://newsmth.net��[FROM: 114.249.215.*]
Technical Details
Message-ID: <507dQ7$Czx@newsmth.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!feeder2.cambriumusenet.nl!feed.tweaknews.nl!194.134.4.91.MISMATCH!news2.euro.net!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH

Show Full Headers
Complete Article Headers
X-Google-Thread: 115571,ee64be59c300a406,start
X-Google-NewGroupId: yes
X-Google-Attributes: gidf7ebf7e2af,domainid0,public,usenet
X-Google-Language: Chinese,GB
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!feeder2.cambriumusenet.nl!feed.tweaknews.nl!194.134.4.91.MISMATCH!news2.euro.net!feeds.phibee-telecom.net!news.byr.edu.cn!news.newsmth.net!NEWSMTH
From: thinkhy@newsmth.net-SPAM.no (<Test/>)
Newsgroups: cn.bbs.comp.xml
Subject: �� Smooks Eclipse ������ XML �� Java ���ת��
Date: 26 May 2010 14:44:56 GMT
Organization: ˮľ����
Message-ID: <507dQ7$Czx@newsmth.net>
Mime-Version: 1.0
Content-Type: text/plain; charset="gb2312"
Content-Transfer-Encoding: 8bit
X-Filename: XML/e/M.1274885095.20