1. Trang chủ
  2. » Công Nghệ Thông Tin

JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML pot

67 357 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML pot
Tác giả Dennis Sosnoski
Trường học Không rõ tên trường đại học hoặc viện nghiên cứu
Chuyên ngành Lập trình Java và XML
Thể loại Hướng dẫn
Năm xuất bản Không rõ năm viết
Định dạng
Số trang 67
Dung lượng 362,53 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong hướng dẫn này, bạn sẽ tìm hiểu về việc sử dụng các đặc tính mới của JiBX 1.2 để tạo ra các định nghĩa lược đồ XML một cách dễ dàng từ mã Java hiện có và để đọc và viết các tài liệu

Trang 1

JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java

Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML

Dennis Sosnoski, Nhà tư vấn, Sosnoski Software Solutions, Inc

Tóm tắt: Việc tạo mã từ các định nghĩa lược đồ XML được sử dụng rộng rãi cho

mọi kiểu trao đổi dữ liệu XML, bao gồm cả các dịch vụ Web Hầu hết các công cụ liên kết dữ liệu cấu trúc một cách cứng nhắc mã được tạo ra dựa trên lược đồ — ngay cả các khía cạnh của lược đồ không liên quan gì đến ứng dụng của bạn Trong hướng dẫn này, là phần thứ hai của loạt bài hai phần, sẽ tìm hiểu cách làm thế nào để JiBX 1.2 tạo ra mã sạch hơn qua việc thực hiện diễn dịch lược đồ tốt hơn và loại bỏ các lớp lộn xộn không cần thiết Bạn cũng sẽ thấy có thể tùy chỉnh

mã được tạo ra như thế nào để phù hợp tốt hơn với nhu cầu của bạn, bao gồm các tuỳ chỉnh có thể dễ dàng loại bỏ các thành phần không cần thiết của lược đồ Trước khi bắt đầu

Về hướng dẫn này

JiBX là một công cụ để liên kết dữ liệu XML với các đối tượng Java™ Liên kết

dữ liệu JiBX đã được biết đến từ lâu như là cách tiếp cận nhanh nhất và linh hoạt nhất để liên kết mã Java tới XML Nhưng sự phức tạp của các định nghĩa liên kết JiBX và sự hỗ trợ còn hạn chế của nó với các định nghĩa lược đồ XML đang được

sử dụng ngày càng rộng rãi hơn đã làm cho những người dùng thất vọng nhiều lần May mắn thay, phiên bản 1.2 của JiBX đã tiến một bước dài theo hướng loại bỏ những vấn đề này Trong hướng dẫn này, bạn sẽ tìm hiểu về việc sử dụng các đặc tính mới của JiBX 1.2 để tạo ra các định nghĩa lược đồ XML một cách dễ dàng từ

mã Java hiện có và để đọc và viết các tài liệu khớp với các định nghĩa lược đồ đã tạo ra — hoàn toàn không cần phải đi vào các chi tiết của các định nghĩa liên kết của JiBX Phần 1 trình bày nửa còn lại của vấn đề: bắt đầu từ mã Java và tạo ra các định nghĩa lược đồ XML

Mục tiêu

Hướng dẫn này chỉ dẫn cho bạn về quá trình sử dụng JiBX để tạo mã Java từ các định nghĩa lược đồ XML Đầu tiên, bạn sẽ tìm hiểu cách làm việc một lược đồ đơn giản và tạo ra một mô hình dữ liệu Java mặc định khớp với lược đồ này như thế nào, sau đó sử dụng mô hình dữ liệu để đọc và việt các tài liệu XML Tiếp theo bạn sẽ thấy cách làm thế nào để có thể sử dụng các tùy chỉnh để sửa đổi việc sinh

mã sao cho nó phù hợp tốt hơn với các yêu cầu của bạn Cuối cùng, bạn sẽ chuyển đến một ví dụ lược đồ chuẩn- công nghiệp phức tạp hơn và khám phá khả năng

Trang 2

của các tùy chỉnh để làm đơn giản mô hình dữ liệu đã được sinh ra cho lược đồ đó

và cải thiện khả năng sử dụng Sau khi đọc hướng dẫn này và thực hiện hết các ví

dụ được cung cấp, bạn sẽ có khả năng sử dụng JiBX để tạo ra các mô hình dữ liệu Java tùy chỉnh cho các lược đồ riêng của bạn

Các điều kiện cần có trước

Để hiểu được hướng dẫn này, bạn ít nhất nên có các kiến thức cơ bản về cả mã Java và XML Bạn không cần phải hiểu biết chi tiết về các định nghĩa lược đồ XML nhưng sự quen thuộc với các lược đồ sẽ giúp bạn hiểu rõ các ví dụ tốt hơn

Các yêu cầu hệ thống

Để chạy các ví dụ này, bạn cần phải cài đặt:

 Cả hai:

o Sun's JDK 1.5.0_09 (hoặc mới hơn)

o Bộ dụng cụ cho nhà phát triển của IBM cho công nghệ Java 1.5.0 SR3

 Một phiên bản mới nhất của công cụ xây dựng Apache Ant

Các hướng dẫn tải về và cài đặt JiBX có trong hướng dẫn này

Trang 3

Giới thiệu JiBX

JiBX là một trong nhiều công cụ dùng để chuyển đổi giữa các cấu trúc dữ liệu Java và các tài liệu XML (xem Tài nguyên) Cái làm nên sự khác biệt của JiBX so với những công cụ khác là các đặc tính linh hoạt và hiệu năng Hiệu năng của JiBX luôn được đánh giá ở vị trí cao nhất trong lĩnh vực này, vượt quá hai lần hoặc hơn nữa so với hiệu năng của các công cụ phổ biến khác (như JAXB 2.0 chẳng hạn) JiBX cũng linh hoạt hơn hơn hầu hết tất cả các công cụ Java-XML khác, khi sử dụng các định nghĩa liên kết để tách các cấu trúc Java khỏi mô tả XML sao cho từng cái có thể được thay đổi độc lập với cái kia

Với bản phát hành 1.2, JiBX bổ sung thêm các đặc tính hỗ trợ các định nghĩa lược

đồ XML Bạn có thể sử dụng các công cụ kèm theo trong bản phát hành JiBX để tạo ra một định nghĩa lược đồ khớp với mã Java của bạn hoặc để tạo ra mã Java khớp với định nghĩa lược đồ của bạn Dù bằng cách nào, bạn cũng nhận được một định nghĩa liên kết để cho phép bạn sử dụng JiBX để chuyển đổi giữa các mã Java

và các tài liệu XML khớp với định nghĩa lược đồ Trong hướng dẫn này, bạn sẽ thấy cách làm thế nào để áp dụng kiểu tạo thứ hai: từ định nghĩa lược đồ tạo mã Java

Cài đặt JiBX

Bạn cần phải cài đặt JiBX trước khi tiếp tục thực hiện hướng dẫn này Hãy Tải về bản ZIP phân phối mới nhất 1.2.x và giải nén nó vào một chỗ thuận tiện trên hệ thống của bạn Xong việc, bạn sẽ nhận được một thư mục có tên là jibx, trong đó

có chứa tất cả các tệp JiBX JAR, tài liệu hướng dẫn, các ví dụ và thậm chí cả mã nguồn

Cài đặt mã nguồn các ví dụ của hướng dẫn này

Bây giờ hãy tải về các mã mẫu của hướng dẫn này, cũng được cung cấp dưới dạng một tệp tin ZIP Cách dễ nhất để cài đặt nó trên hệ thống của bạn là giải nén tệp tin ZIP vào thư mục gốc của bản phân phối JiBX của bạn (hoặc trên Windows®, sao chép thư mục dwcode1 từ bên trong tệp tin ZIP này vào thư mục gốc bản phân phối JiBX của bạn) Điều này sẽ tạo ra một thư mục con dwcode2 trong thư mục jibx, với các tệp tin ví dụ (bao gồm cả các tệp tin build.xml, custom.xml và các tệp tin khác) bên trong thư mục con dwcode2 đó

Mã mẫu bao gồm một tệp tin xây dựng Ant Apache để tự động hoá cho chạy các công cụ JiBX và xử lý các bước khác có trong các ví dụ Nếu bạn cài đặt các mã mẫu trực tiếp vào thư mục cài đặt của JiBX, công cụ xây dựng (build) có thể truy cập các tệp JiBX JAR mà không cần thêm bất kỳ cấu hình nào Nếu bạn cài đặt các mã mẫu ở nơi khác, bạn vẫn có thể sử dụng công cụ xây dựng Ant Trong

Trang 4

trường hợp này, bạn chỉ cần chỉnh sửa tệp tin build.properties bên trong thư mục

mã mẫu và thay đổi giá trị của thuộc tính jibx-home thành đường dẫn đến bản cài đặt JiBX của bạn

Trang 5

Tạo liên kết và mã mặc định từ lược đồ

Rất dễ dàng để tạo ra một định nghĩa liên kết JiBX và mã Java tương ứng từ một định nghĩa lược đồ XML Bạn sẽ tìm hiểu cách làm thế nào trong phần này Giới thiệu về ví dụ lược đồ đơn giản

Như một ví dụ đơn giản, tôi sẽ bắt đầu với một trong những lược đồ được tạo ra trong Phần 1 Listing 1 hiển thị một phiên bản rút gọn của lược đồ này, nhằm biểu diễn một đơn hàng từ một cửa hàng trực tuyến Lược đồ đầy đủ được cung cấp trong tệp tin starter.xsd trong thư mục của dwcode2 của mã mẫu

Listing 1 Lược đồ ví dụ đầu tiên

<xs:documentation>Supported shipment methods

The "INTERNATIONAL" shipment

methods can only be used for orders with shipping

addresses outside the U.S., and

one of these methods is required in this

case.</xs:documentation>

</xs:annotation>

<xs:restriction base="xs:string">

Trang 6

<xs:enumeration value="STANDARD_MAIL"/> <xs:enumeration value="PRIORITY_MAIL"/>

length, with two leading alpha characters followed

by ten decimal digits

Trang 10

Phần tải về của hướng dẫn bao gồm một kịch bản lệnh Ant là build.xml có đích codegen để thực hiện hoạt động tạo mã

Để thử điều này, hãy mở một cửa sổ dòng lệnh trong thư mục dwcode2 nơi đã cài đặt bản tải về và gõ ant codegen Nếu bạn đã cài đặt Ant trên hệ thống của mình và cài đặt mã tải về theo đúng các hướng dẫn, bạn sẽ nhìn thấy kết quả tương tự như được hiển thị trong Hình 1:

Trang 11

Hình 1 Sử dụng công cụ xây dựng Ant

Bạn cũng có thể chạy CodeGen trực tiếp từ cửa sổ dòng lệnh Để làm được điều này, bạn cần phải:

1 Đưa tên tệp tin jibx-tools.jar vào đường dẫn lớp (classpath) Java của bạn

2 Chỉ rõ org.jibx.schema.codegen.CodeGen là lớp được chạy

3 Liệt kê (các) định nghĩa lược đồ được tạo ra

Đích Ant codegen đã cho sử dụng một số tham số bổ sung thêm để ra lệnh cho CodeGen sử dụng thư mục gen/src như là gốc của cấu trúc gói mô hình dữ liệu được tạo ra và xóa hết tất cả các tệp tin hiện có khỏi thư mục đó trước khi thực hiện hoạt động tạo mã Đây là dòng lệnh Java để sao đúp đích Ant codegen từ một cĐửa sổ dòng lệnh trong thư mục dwcode2 (giả định bạn đã làm theo đúng hướng dẫn cài đặt được đề nghị):

java -cp /lib/jibx-tools.jar org.jibx.schema.codegen.CodeGen -t gen/src -w

starter.xsd

Trên Windows, lệnh đó là:

java -cp \lib\jibx-tools.jar org.jibx.schema.codegen.CodeGen -t gen\src -w

Trang 12

Listing 2 Mã được tạo ra

* <xs:element type="xs:long" name="orderNumber"/>

* <xs:element type="ns:customer" name="customer"/>

Trang 13

* <xs:element type="ns:address" name="billTo"/>

* <xs:element type="ns:shipping" name="shipping"/>

* <xs:element type="ns:address" name="shipTo" minOccurs="0"/>

* <xs:element type="ns:item" name="item" minOccurs="0"

maxOccurs="unbounded"/>

* </xs:sequence>

* <xs:attribute type="xs:date" use="required" name="orderDate"/>

* <xs:attribute type="xs:date" name="shipDate"/>

* <xs:attribute type="xs:float" name="total"/>

private long orderNumber;

private Customer customer;

private Address billTo;

private Shipping shipping;

private Address shipTo;

private List<Item> itemList = new ArrayList<Item>();

private Date orderDate;

private Date shipDate;

Trang 14

private Float total;

/**

* Get the 'shipTo' element value Shipping address information If missing, the

* billing address is also used as the shipping address

* Set the 'shipTo' element value Shipping address information If missing, the

* billing address is also used as the shipping address

Trang 16

public enum Shipping {

STANDARD_MAIL, PRIORITY_MAIL, INTERNATIONAL_MAIL,

Đối với các giá trị lặp lại, ví dụ như phần tử mục hàng lặp lại nhiều lần trong định nghĩa kiểu phức hợp (complexType) đơn hàng ở Listing 1, CodeGen tạo ra một danh sách có định kiểu của Java 5 theo mặc định Đối với các bảng kê hạn chế kiểu đơn giản (simpleType), ví dụ như kiểu vận chuyển (shipping) trong Listing 1, CodeGen tạo ra một kiểu enum của Java 5 theo mặc định Mã được tạo ra cho cả hai trường hợp này được hiển thị trong Listing 2

Liên kết JiBX được tạo ra

Bên cạnh mã đã tạo ra, CodeGen cũng đưa ra một định nghĩa liên kết JiBX (là tệp tin binding.xml, trong trường hợp này) Định nghĩa liên kết báo cho trình biên dịch liên kết JiBX biết cách chuyển đổi giữa các lớp Java và XML như thế nào Các định nghĩa liên kết bao gồm đầy đủ các chi tiết về các phép biến đổi được JiBX

Trang 17

thực hiện, do đó chúng nhất định là phải phức tạp May mắn thay, bạn không cần phải hiểu định nghĩa liên kết để làm việc với JiBX khi sử dụng tạo mã và liên kết của CodeGen, vì vậy hướng dẫn này không trình bày các chi tiết ở đây

Trang 18

Làm việc với các tài liệu XML

Trong phần này, bạn sẽ tìm hiểu về việc chạy trình biên dịch liên kết JiBX và việc

sử dụng JiBX lúc đang chạy thực để làm việc với các tài liệu XML

Chạy trình biên dịch liên kết JiBX

Để sử dụng định nghĩa liên kết được tạo ra trong khi làm việc với các tài liệu XML, trước hết bạn cần phải chạy công cụ trình biên dịch liên kết JiBX Trình biên dịch liên kết thêm mã byte (bytecode) vào các tệp tin lớp đã biên dịch của bạn

để thực sự triển khai thực hiện các phép biến đổi thành XML và từ XML, như định nghĩa liên kết đã chỉ rõ Bạn phải chạy trình biên dịch liên kết mỗi khi bạn biên dịch lại lớp Java của bạn hoặc sửa đổi định nghĩa liên kết, vì vậy tốt nhất là thêm bước biên dịch liên kết như là một phần của quá trình xây dựng tiêu chuẩn của các

dự án của bạn

Trình biên dịch liên kết có trong bản phân phối JiBX như là một phần của tệp tin jibx-bind.jar Tài liệu JiBX cung cấp đầy đủ các chi tiết về các cách khác nhau để chạy trình biên dịch liên kết, bao gồm cả cách làm thế nào để bạn có thể gọi nó khi đang chạy ứng dụng của bạn chứ không phải như là một phần của quá trình xây dựng JiBX cũng cung cấp các trình cắm thêm cho Eclipse và IntelliJ IDEA, có thể

tự động cho chạy trình biên dịch liên kết khi bạn đang làm việc trong các IDE này

Với mục đích của hướng dẫn này, bạn nên làm đơn giản mọi việc và chỉ cần chạy trình biên dịch liên kết thông qua Ant Đích compile của tập tin build.xml sẵn sàng liên kết bằng cách biên dịch cả mã đã tạo ra và chương trình thử nghiệm được cung cấp, trong khi đích bind thực sự chạy trình biên dịch liên kết Hình 2 cho thấy kết quả đầu ra mà bạn sẽ thấy khi bạn chạy đích này, giả định bạn đã chạy các đích codegen (Bạn cũng có thể chạy lần lượt tất cả ba đích này bằng cách liệt kê chúng theo thứ tự trên dòng lệnh: ant codegen compile bind.)

Trang 19

Hình 2 Các tác vụ compile và bind của công cụ xây dựng Ant

Sử dụng JiBX trong môi trường đang chạy chương trình

Listing 3 cho thấy một tài liệu thử nghiệm đơn giản khớp với lược đồ, có trong mã tải về của hướng dẫn này, là tệp tin:

Listing 3 Tài liệu kiểm tra cho lược đồ đơn hàng

<order orderDate="2008-10-18" shipDate="2008-10-22"

xmlns="http://jibx.org/starter">

<orderNumber>12345678</orderNumber>

<customer>

Trang 20

<customerNumber>5678</customerNumber>

<firstName>John</firstName>

<lastName>Smith</lastName>

</customer>

<billTo state="WA" postCode="98059">

<street1>12345 Happy Lane</street1>

<city>Plunk</city>

<country>USA</country>

</billTo>

<shipping>PRIORITY_MAIL</shipping>

<shipTo state="WA" postCode="98034">

<street1>333 River Avenue</street1>

<city>Kirkland</city>

</shipTo>

<item quantity="1" price="5.99" id="FA9498349851"/>

<item quantity="2" price="9.50" id="GC1234905049"/>

<item quantity="1" price="8.95" id="AX9300048820"/>

</order>

Gói tải về cũng bao gồm một chương trình kiểm tra đơn giản, được hiển thị ở đây

như Listing 4, để trình bày việc sử dụng JiBX cho cả hai tài liệu không tuần tự hóa (unmarshalling) và tuần tự hóa (marshalling) Marshalling là quá trình sinh ra một

biểu diễn XML của một đối tượng trong bộ nhớ, có thể bao gồm cả các đối tượng được liên kết với đối tượng ban đầu Unmarshalling là quá trình ngược với tuần tự

Trang 21

hóa, tức là xây dựng một đối tượng (và có thể là một đồ thị của các đối tượng liên kết với nhau) trong bộ nhớ từ một biểu diễn XML) Đích run của Ant thi hành chương trình thử nghiệm này, bằng cách sử dụng tài liệu trong Listing 3 làm đầu vào và viết ra một bản sao kết quả tuần tự hóa của tài liệu thành một tệp tin có tên

là out.xml

Listing 4 Chương trình thử nghiệm

public class Test

{

/**

* Unmarshal the sample document from a file, compute and set order total, then

* marshal it back out to another file

Trang 22

IBindingFactory bfact = BindingDirectory.getFactory(Order.class); IUnmarshallingContext uctx = bfact.createUnmarshallingContext(); FileInputStream in = new FileInputStream(args[0]);

Order order = (Order)uctx.unmarshalDocument(in, null);

// compute the total amount of the order

Trang 23

Hình 3 hiển thị kết quả mà bạn sẽ thấy khi chạy đích run:

Hình 3 Tác vụ run của công cụ xây dựng Ant

Đây chính là chương trình thử nghiệm giống như đã sử dụng trong Phần 1 của hướng dẫn và nó cũng chịu các hạn chế giống như đã bàn luận trong hướng dẫn

ấy Cũng như trong Phần 1, tệp tin out.xml là kết quả sinh ra bởi tuần tự hóa ngược lại dữ liệu đơn hàng đã nhận được khi không sắp xếp theo thứ tự tài liệu ban đầu

Trang 24

Giới thiệu các tùy chỉnh CodeGen

Trong phần này, bạn sẽ tìm hiểu những điều căn bản về tùy chỉnh CodeGen để kiểm soát cấu trúc của mã được sinh ra từ một lược đồ đơn giản

Một ví dụ tùy chỉnh đơn giản

CodeGen hỗ trợ rất nhiều tùy chỉnh về tất cả các khía cạnh về tạo mã và tạo liên kết Tập hợp các tùy chỉnh sẽ áp dụng được chuyển đến CodeGen dưới dạng một tài liệu XML, có các phần tử lồng nhau, liên hệ với các lược đồ hay các thành phần lược đồ Listing 5 đưa ra một ví dụ đơn giản:

Listing 5 Ví dụ tuỳ chỉnh đơn giản

<schema prefer-inline="true" show-schema="false"

enumeration-type="simple"

generate-all="false" includes="order item"/>

Tuỳ chỉnh của Listing 5 bao gồm một phần tử lược đồ không có vùng tên với một

số thuộc tính khác nhau, cung cấp các tuỳ chỉnh cụ thể sẽ được áp dụng (Cho đến nay, bạn chỉ đang làm việc với một định nghĩa lược đồ, vì thế có thể sử dụng dạng tuỳ chỉnh rất đơn giản này Về sau trong hướng dẫn này, bạn sẽ thấy các ví dụ về các tuỳ chỉnh để làm việc với nhiều lược đồ) Thuộc tính tuỳ biến đầu tiên — prefer-inline="true" — ra lệnh cho CodeGen thay thế ngay vào các định nghĩa lược đồ mà chỉ được tham chiếu một lần, thay vì áp dụng hành vi mặc định là giữ chúng dưới dạng các lớp riêng biệt Thuộc tính thứ hai — show-schema="false"

— chặn việc nhúng các định nghĩa lược đồ vào trong Javadoc của lớp

enumeration-type="simple" tạo ra các bảng kê an toàn về kiểu đơn giản hơn các bảng kê của Java 5

Cặp thuộc tính cuối cùng làm việc cùng với nhau CodeGen theo mặc định sẽ tạo

ra một lớp mức đỉnh riêng cho mỗi định nghĩa kiểu toàn cục trong các lược đồ ở đầu vào, cùng với một phép ánh xạ tương ứng trong liên kết JiBX sẽ sinh ra cho mỗi kiểu phức hợp (complexType) Thuộc tính generate-all="false" thay đổi hành

vi mặc định này, chỉ dứt khoát tạo ra các complexType đó được bao gồm cụ thể vào hoặc được tham chiếu từ một kiểu được bao gồm ấy Sau đó thuộc tính

includes="order item" đưa ra các tên sẽ được tạo ra; các tên này đã được lựa chọn

Trang 25

để bảo đảm tính tương thích với chương trình thử nghiệm — phần tử <order> là cần phải có, bởi vì đó là phần tử gốc của mỗi cá thể tài liệu và các mục hàng kiểu complexType là cần phải có bởi vì chương trình thử nghiệm chờ đợi sẽ tìm thấy một lớp mức đỉnh riêng biệt cho kiểu này khi nó tính tổng giá trị của đơn hàng

Bạn có thể thử các tuỳ chỉnh này bằng cách sử dụng tác vụ Ant custgen thay cho tác vụ codegen (hoặc sử dụng ngay tác vụ full, để chạy toàn bộ chuỗi các đích clean custgen compile bind run) Listing 6 cho thấy các đoạn trích của mã được tạo ra mà bạn có thể so sánh với mã được tạo ra theo mặc định như hiển thị trong Listing 2 Các sự khác biệt lớn (ngoài Javadoc của các lớp đã được đơn giản hóa)

là ở chỗ lớp Customer bây giờ đã được thay thế trực tiếp vào dòng lệnh và lớp Shipping bây giờ là một lớp lồng bên trong, sử dụng một lớp bảng kê tùy chỉnh, an toàn về kiểu

Listing 6 Mã được tạo ra với các tuỳ chỉnh

private long orderNumber;

private long customerCustomerNumber;

private String customerFirstName;

private String customerLastName;

private Address billTo;

private Shipping shipping;

private Address shipTo;

Trang 26

private List<Item> itemList = new ArrayList<Item>();

private Date orderDate;

private Date shipDate;

private Float total;

private final String value;

public static final Shipping STANDARD_MAIL = new Shipping(

Trang 27

public static final Shipping INTERNATIONAL_EXPRESS = new Shipping( "INTERNATIONAL_EXPRESS");

private static final String[] values = new String[]{"DOMESTIC_EXPRESS", "INTERNATIONAL_EXPRESS", "INTERNATIONAL_MAIL",

public static Shipping convert(String value) {

int index = java.util.Arrays.binarySearch(values, value);

if (index >= 0) {

return instances[index];

Trang 28

} else {

return null;

}

}

public static Shipping fromValue(String text) {

Shipping value = convert(text);

Nhiều tuỳ chỉnh bổ sung có sẵn để sử dụng với CodeGen Bạn sẽ thấy một số ví dụ

về các tùy chỉnh này sau, trong hướng dẫn này, nhưng để cung cấp một ý tưởng rõ hơn về sức mạnh của các tuỳ chỉnh ấy, cần phải chuyển sang một lược đồ phức tạp hơn

Trang 29

Thử dùng một lược đồ thực tế

Làm việc với một định nghĩa lược đồ đơn độc là dịp rất tốt để trình bày đơn giản, nhưng nó không đem lại nhiều cảm giác về cách một công cụ hoạt động như thế nào khi áp dụng cho các định nghĩa lược đồ phức tạp, sử dụng rộng rãi trong các ứng dụng mức doanh nghiệp Bây giờ là lúc để chuyển sang một ví dụ hiện thực hơn, dưới dạng một trong các định nghĩa lược đồ HR-XML tiêu chuẩn-công

nghiệp

Lược đồ TimeCard của HR-XML

Hiệp hội (Consortium) HR-XML là một tổ chức được thành lập để phát triển các tiêu chuẩn mở cho các biểu diễn XML dành cho nguồn nhân lực Nó đại diện cho hơn 110 công ty thành viên và gần 50 hãng công nghệ được chứng nhận đáp ứng các tiêu chuẩn của nó

Các lược đồ HR-XML sử dụng cho hướng dẫn này gồm có 157 lược đồ, bao gồm một hỗn hợp của các định nghĩa tài liệu mức đỉnh và các thành phần phổ biến CodeGen có thể dễ dàng xử lý số lượng các lược đồ này, nhưng số lượng lớn của các lớp được tạo ra và tính phức tạp của các mối quan hệ qua lại giữa chúng sẽ làm mờ tối đi các khía cạnh đáng chú ý hơn trong việc xử lý lược đồ Để tập trung vào các chi tiết này, một tập con của HR-XML được sử dụng ở đây bao gồm một định nghĩa tài liệu mức đỉnh, dành cho phần tử TimeCard cùng với các thành phần phổ biến được tham chiếu như là một phần của định nghĩa TimeCard — tổng số có bảy định nghĩa lược đồ

Bạn có thể tìm thấy tập con của các định nghĩa lược đồ HR-XML được sử dụng trong hướng dẫn này trong thư mục hrxml/schemas Listing 7 chỉ ra một phiên bản

đã hiệu chỉnh của lược đồ chính, định nghĩa phần tử TimeCard Điều này cung cấp một mẫu kiểu dáng lược đồ HR-XML, trong đó sử dụng pha trộn các định nghĩa kiểu toàn cục và lồng nhau và có chứa một dải các cấu trúc lược đồ rộng hơn ví dụ đầu tiên, bao gồm:

 Các hợp tử (compositor) <xs:choice> (như thấy trong một số complexType được nhúng bên trong định nghĩa TimeCardType)

 Các hạt (particle) <xs:any> (xem định nghĩa AdditionalDataType gần trên đầu của Listing)

 Các <xs:simpleType> <union> (xem định nghĩa TimeCardDuration ở cuối của Listing)

 Các hạn chế <xs:simpleType> không là bảng kê (nonenumeration)

Trang 30

Listing 7 Lược đồ TimeCard của HR-XML

<xs:schema targetNamespace="http://ns.hr-xml.org/2007-04-15"

elementFormDefault="qualified" version="2007-04-15">

<xs:import namespace="http://www.w3.org/XML/1998/namespace" > <xs:include schemaLocation=" /CPO/EntityIdType.xsd"/>

<xs:complexType name="AdditionalDataType" mixed="true">

<xs:sequence minOccurs="0" maxOccurs="unbounded">

<xs:any namespace="##any" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>

Trang 32

<xs:element name="PeriodEndDate" type="AnyDateTimeType"/> <xs:element name="ReportedPersonAssignment" minOccurs="0"> <xs:complexType>

<xs:sequence>

<xs:element name="EndDateTime" type="AnyDateTimeType"/>

<xs:element name="Duration" type="TimeCardDuration"

Ngày đăng: 07/08/2014, 10:22

HÌNH ẢNH LIÊN QUAN

Hình 1. Sử dụng công cụ xây dựng Ant - JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML pot
Hình 1. Sử dụng công cụ xây dựng Ant (Trang 11)
Hình 2. Các tác vụ compile và bind của công cụ xây dựng Ant - JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML pot
Hình 2. Các tác vụ compile và bind của công cụ xây dựng Ant (Trang 19)
Hình 3 hiển thị kết quả mà bạn sẽ thấy khi chạy đích run: - JiBX 1.2, Phần 2: Từ lược đồ XML thành mã Java Tạo mã Java tùy chỉnh, sạch hơn từ lược đồ XML pot
Hình 3 hiển thị kết quả mà bạn sẽ thấy khi chạy đích run: (Trang 23)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w