On Apr 12, 2005 9:32 AM, Nacho G. Mac Dowell <[EMAIL PROTECTED]> wrote:
> class EnumerationSG
>
> public TypedValue getCastFromString(SimpleTypeSG pController, String
> pValue) throws SAXException {
> for (int i = 0; i < values.length; i++) {
> if (values[i].getValue().equals(pValue)) {
> return new TypedValueImpl(qName + "." +values[i].getName(), qName);
> }
> }
> return super.getCastFromString(pController, pValue);
> }?
It *creates* a TypedValue, because the API forces it doing so. It
doesn't use it.
> If I didn't get it wrong, at the moment including TypedValue as an
> embeddable Java Source produces wrong output because it expects a full
> blown java string. IMHO if the responsability for generating a correct
> TypedValue is for the SG then I don't understand the need for
> TypedValue. How would it then be used?
As I said, the TypedValue isn't used in the classes generating static
content, like
enumerations, or default values. A typical use case is for the
ArrayPropertySG. Suggest
the following element definition:
<xs:element name="foo" type="xs:int" maxOccurs="unbounded"/>
Suggest the code, which converts the string value "5" into an int and
adds the value to
an internal list. This code could look like the following:
String sValue = "5";
TypedValue value = simpleTypeSG.getCastFromString(jm, sValue, pData);
if (value.getType().isPrimitive()) {
value = ...; // Code that converts the primitive into an object
}
jm.addLine(field, ".add(", value, ");");
I am, of course, simplifying a little bit. For example, because the
Unmarshaller doesn't
access the internal list. However, in general that's how things look.
> If needed, wouldn't it be better to use the static methods of
> DataTypeConverter rather than creating a new one if it doesn't come as
> the last parameter?
The last parameter is, in essence, JMUnmarshaller.getDatatypeConverter(). We
*must* use that datatype converter, because the user may supply his own.
> Sorry if I'm asking too many questions, it's just that I'd like to see
> this feature done (plus help on this release ;-) ).
I'm glad you're asking. :-)
As for JAXME-47, I would think that it can be solved by implementing
UnionTypeSG.getCastFromString(pController, pValue) like this:
for (int i = 0; i < listOfInternalTypes.length; i++) {
try { return listOfInternalTypes[i].getCastFromString((pValue); }
catch (Throwable ignore) {}
}
throw new IllegalArgumentException("Unable to convert value: " + pValue);
--
Outside of a dog, a book is man's best friend.
Inside of a dog, its too dark to read.
(Groucho Marx)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]