Thanks for the info, still trying to get my head around this.
The actual example I am working with is the "invoice.xsd" that is included
in the source. < found here:
http://www.castor.org/srcgen-example.html#Running-the-XML-code-generator>
It was analogous to what I am trying to achieve. So I took the invoice.xsd
and simply ran source generator command like so:
<
java -cp %CP% org.exolab.castor.builder.SourceGeneratorMain -i invoice.xsd
-package test
That command created java files for each of the complex types and a
directory named "descriptors" which also have java files in there.
Could someone explain the difference between the src and the descriptors?
What is each of their jobs? This is my first run with XML to java binding.
Secondly, I decided to try and marshall this, so I created a Invoice item,
and added ShipTo, Customer, Item, ItemAttributes, etc. objects to the
invoice in an attempt to marshall the data like so: (see test class), but
I am unable to get the "duration" to work. I get errors like so:
see (error below).
// test class
public static void main(String[] args) {
Item item = new Item();
item.setQuantity(100000);
item.setId("1");
item.setInStock(false);
item.setCategory("my_category");
item.setPrice(new BigDecimal("100.00"));
Address address = new Address();
address.setCity("my_city");
address.setState("MO");
address.setStreet1("76777777 mockingbird");
address.setStreet2("other street");
address.setZipCode("77779");
Customer customer = new Customer();
customer.setName("Scott");
customer.setPhone("300-300-3333");
customer.setAddress(address);
ShipTo shipto = new ShipTo();
shipto.setCustomer(customer);
ShippingMethod shipmethod = new ShippingMethod();
shipmethod.setCarrier("carrier");
shipmethod.setOption("UPS");
Invoice inv = new Invoice();
inv.setShippingMethod(shipmethod);
inv.setShipTo(shipto);
inv.addItem(item);
try {
FileWriter writer = new FileWriter("invoice.xml");
Marshaller.marshal(inv, writer);
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace(System.err);
}
}
error:
The following exception occured while validating field: _shippingMethod of
class: com.Invoice: The field '_estimatedDelivery' (whose xml name is
'estimated-delivery') is a required field of class 'com.ShippingMethod
ValidationException: The following exception occured while validating
field: _shippingMethod of class: com.Invoice: The field
'_estimatedDelivery' (whose xml name is 'estimated-delivery') is a
required field of class 'com.ShippingMethod;
- location of error: XPATH: /invoice
The field '_estimatedDelivery' (whose xml name is 'estimated-delivery') is
a required field of class 'com.ShippingMethod
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:278)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at org.exolab.castor.xml.Marshaller.validate(Marshaller.java:2594)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:826)
at
org.exolab.castor.xml.Marshaller.staticMarshal(Marshaller.java:798)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:727)
at com.ExerciseInvoice.main(ExerciseInvoice.java:58)
Caused by: ValidationException: The field '_estimatedDelivery' (whose xml
name is 'estimated-delivery') is a required field of class
'com.ShippingMethod;
- location of error: XPATH: /shipping-method
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:210)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at
org.exolab.castor.xml.FieldValidator.validateInstance(FieldValidator.java:326)
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:271)
... 7 more
Caused by: ValidationException: The field '_estimatedDelivery' (whose xml
name is 'estimated-delivery') is a required field of class
'com.ShippingMethod;
- location of error: XPATH: /shipping-method
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:210)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at
org.exolab.castor.xml.FieldValidator.validateInstance(FieldValidator.java:326)
at
org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:271)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:1065)
at org.exolab.castor.xml.Validator.validate(Validator.java:135)
at org.exolab.castor.xml.Marshaller.validate(Marshaller.java:2594)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:826)
at
org.exolab.castor.xml.Marshaller.staticMarshal(Marshaller.java:798)
at org.exolab.castor.xml.Marshaller.marshal(Marshaller.java:727)
at com.ExerciseInvoice.main(ExerciseInvoice.java:58)
Any help???
Thanks,
Scott
Werner Guttmann <[EMAIL PROTECTED]>
07/04/2008 02:15 AM
Please respond to
[email protected]
To
[email protected]
cc
Subject
Re: [castor-user] How to Populate Binding Objects
Scott,
Scott Purcell wrote:
> Hello,
>
> I have created a XSD document with many complex types, and have used the
> XML Code generator (SourceGeneratorMain) to create java binding files.
> This is all good and works well.
Hmm ... let me try to understand one thing here. When you have used the
XML code generator, you have turned off creastion of descriptor classes
and turned on creation of a mapping file, correct ? If that's the case,
why ? It should be the other way around. See below .....
Please note, that a binding file is something completely different.
The term 'binding file' is used in the context of code generation to
overcome naming collisions.
>
> Now, I need to somehow (this is where my question lies) "instantiate"
the
> binding files, populate them, and then marshal the objects to XML. I am
> not sure how this is accomplished? Could someone give me some insight as
> to how this works?
>
> My workflow will be like so:
> Once the binding files are created (which they are) I have the need to
> instantiate the objects, populate them with different data and then
> marshall the data to xml.
Assuming that you have generated source code (including descriptor
classes, that is) from your XML schema, here's what you have to do to
marshal an object instance to XML.
<code>
XMLContext context = new XMLContext();
Marsdaller marshaller = context.createMarshaller();
YourObject yourObject = .... ;
marshaller.marshal(yourObject);
</code>
If (and only if) you have the descriptor classes on your classpath,
Castor will just marshal XML according to your definitions in your XMl
schema.
Does this make sense ?
Werner
>
> Thanks,
> Scott
>
>
>
>
>
> CONFIDENTIALITY NOTICE
> This e-mail message and any attachments are only for the use of the
intended recipient and may contain information that is privileged,
confidential or exempt from disclosure under applicable law. If you are
not the intended recipient, any disclosure, distribution or other use of
this e-mail message or attachments is prohibited. If you have received
this e-mail message in error, please delete and notify the sender
immediately. Thank you.
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
CONFIDENTIALITY NOTICE
This e-mail message and any attachments are only for the use of the intended
recipient and may contain information that is privileged, confidential or
exempt from disclosure under applicable law. If you are not the intended
recipient, any disclosure, distribution or other use of this e-mail message or
attachments is prohibited. If you have received this e-mail message in error,
please delete and notify the sender immediately. Thank you.