/*
* Milyn - Copyright (C) 2006 - 2010
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License (version 2.1) as published by the Free Software
* Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* See the GNU Lesser General Public License for more details:
* http://www.gnu.org/licenses/lgpl.txt
*/
package example;
import org.milyn.SmooksException;
import org.milyn.javabean.binding.xml.XMLBinding;
import org.milyn.io.StreamUtils;
import org.milyn.payload.StringSource;
import org.xml.sax.SAXException;
import example.model.Order;
import example.model.OrderItem;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Simple example of the XMLBinding utility.
*
* @author <a href="mailto:tom.fennelly@gmail.com">tom.fennelly@gmail.com</a>
*/
public class Main {
public static String orderXMLMessage = readInputMessage();
public static void main(String[] args) throws IOException, SAXException, SmooksException {
// Create and initilise the XMLBinding instance...
XMLBinding xmlBinding = new XMLBinding().add("smooks-config.xml");
xmlBinding.intiailize();
// Read the order XML into the Order Object model...
Order order = xmlBinding.fromXML(new StringSource(orderXMLMessage), Order.class);
// Do something with the order....
// Write the Order object model instance back out to XML...
String outXML = xmlBinding.toXML(order); // (Note: There's also a version of toXML() that takes a Writer)
// Display read/write info to the example user...
displayInputMessage(orderXMLMessage);
displayReadJavaObjects(order);
displayWriteXML(outXML);
}
private static void displayInputMessage(String orderXMLMessage) {
userMessage("\n\n** Press enter to see the Order input sample message (input-message.xml):");
System.out.println("\n\n");
System.out.println("==============Source Order XML Message==============");
System.out.println(new String(orderXMLMessage));
System.out.println("====================================================");
}
private static void displayReadJavaObjects(Order order) {
userMessage("\n\n** Press enter to see the Order message as bound into the Order object model (XML reading):");
System.out.println("============Order Java Bean===========");
System.out.println("Header - Customer Name: " + order.getHeader().getCustomerName());
System.out.println(" - Customer Num: " + order.getHeader().getCustomerNumber());
System.out.println(" - Order Date: " + order.getHeader().getDate());
System.out.println("\n");
System.out.println("Order Items:");
for(int i = 0; i < order.getOrderItems().size(); i++) {
OrderItem orderItem = order.getOrderItems().get(i);
System.out.println(" (" + (i + 1) + ") Product ID: " + orderItem.getProductId());
System.out.println(" (" + (i + 1) + ") Quantity: " + orderItem.getQuantity());
System.out.println(" (" + (i + 1) + ") Price: " + orderItem.getPrice());
}
System.out.println("======================================");
}
private static void displayWriteXML(String xml) {
userMessage("\n\n** Press enter to see the Order object model serialized back out to XML (XML writing):");
System.out.println("==============Serialized Order Bean XML==============");
System.out.println(xml);
System.out.println("=====================================================\n");
}
private static String readInputMessage() {
try {
return StreamUtils.readStreamAsString(new FileInputStream("input-message.xml"));
} catch (IOException e) {
e.printStackTrace();
return "<no-message/>";
}
}
private static void userMessage(String message) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("> " + message);
in.readLine();
} catch (IOException e) {
}
System.out.println("\n");
}
}