I managed to bind the files generated through an XSD successfully and i got the following files in my dir
C:\jibx\tutorial\example25>dir
Volume in drive C is WINDOWS
Volume Serial Number is 1C8F-663E
Directory of C:\jibx\tutorial\example25
05/06/2012 07:12 PM <DIR> .
05/06/2012 07:12 PM <DIR> ..
05/06/2012 07:12 PM 3,313 Address.class
05/06/2012 07:08 PM 3,447 Address.java
05/06/2012 07:10 PM 2,912 binding.xml
05/06/2012 07:12 PM 2,516 Customer.class
05/06/2012 07:08 PM 1,763 Customer.java
05/06/2012 07:12 PM 2,582 Item.class
05/06/2012 07:08 PM 1,878 Item.java
05/06/2012 07:12 PM 2,529 JiBX_bindingFactory.class
05/06/2012 07:12 PM 2,384 JiBX_bindingMungeAdapter.class
05/06/2012 07:12 PM 2,490 JiBX_bindingOrder_access.class
05/06/2012 07:12 PM 7,539 Order.class
05/06/2012 07:09 PM 4,869 Order.java
05/06/2012 07:11 PM 1,034 Shipping.class
05/06/2012 07:09 PM 879 Shipping.java
05/06/2012 12:22 AM 5,137 starter.xsd
15 File(s) 45,272 bytes
2 Dir(s) 160,023,375,872 bytes free
Now i copied these files into a newly created JAVA project in eclipse , created a package called example25 in that project and pasted those files there I then used the following code and ran it in the debug mode
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Iterator;
import org.jibx.runtime.BindingDirectory;
import org.jibx.runtime.IBindingFactory;
import org.jibx.runtime.IMarshallingContext;
import org.jibx.runtime.IUnmarshallingContext;
import org.jibx.runtime.JiBXException;
import example25.*;
public class Test
{
public static void main(String[] args)
{
try
{
// unmarshal customer information from file
IBindingFactory bfact = BindingDirectory.getFactory(Order.class);
IUnmarshallingContext uctx = bfact.createUnmarshallingContext();
FileInputStream in = new FileInputStream("D:\\Java Libraries\\jibx\\dwcode2\\starter.xml");
Order order = (Order)uctx.unmarshalDocument(in, null);
// compute the total amount of the order
float total = 0.0f;
for (Iterator<Item> iter = order.getItemList().iterator(); iter.hasNext();)
{
Item item = iter.next();
total += item.getPrice() * item.getQuantity();
}
order.setTotal(new Float(total));
// marshal object back out to file (with nice indentation, as UTF-8)
IMarshallingContext mctx = bfact.createMarshallingContext();
mctx.setIndent(2);
FileOutputStream out = new FileOutputStream("c:\\out.xml");
mctx.setOutput(out, null);
mctx.marshalDocument(order);
System.out.println("Processed order with " + order.getItemList().size() + " items and total value " + total);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
System.exit(1);
} catch (JiBXException e)
{
e.printStackTrace();
System.exit(1);
}
}
}//end main
I get the following error after the execution of the first statement
Unable to access binding information for class example25.Order
Make sure the binding has been compiled
java.lang.NoSuchFieldException: JiBX_bindingList
at java.lang.Class.getDeclaredField(Unknown Source)
at org.jibx.runtime.BindingDirectory.getBindingList(BindingDirectory.java:68)
at org.jibx.runtime.BindingDirectory.getFactory(BindingDirectory.java:211)
at Test.main(Test.java:24)
Rajesh,
The files that you show in that directory mean you did everything correctly!
The mistake you made was to use eclipse, since eclipse automatically compiles the source code files again (without the binding information you added in the binding step)
Try running the Test.class file with the class files you generated in the first step.
Your java command should be something like this:
java -cp C:\directorywithtestclass;C:\jibx\tutorial Test
Don