Yeah makes sense, though it is just a silly restriction (I mean, I don't see
the need of that restriction, the XML is perfectly "valid" in the sense that
it is not making things complex and just "makes sense" tho the mapping makes
me create additional classes). I you could just use XmlElement with
XmlAttribute at the same time, or even an XPath expression that would
probably solve it.
Thanks for your time and response Wolfgang, I will try to see if the schema
can be modified and use a text element instead of the name attribute.
Regards
AB
Wolfgang Laun-2 wrote:
>
> The XML schema for the structure you want is this:
>
> <xs:complexType name="DocType">
> <xs:choice maxOccurs="unbounded">
> <xs:element name="friendList" type="FriendListType"/>
> </xs:choice>
> </xs:complexType>
>
> <xs:complexType name="FriendListType">
> <xs:sequence>
> <xs:element name="friend" minOccurs="0" maxOccurs="unbounded">
> <xs:complexType>
> <xs:attribute name="value" type="xs:string"/>
> </xs:complexType>
> </xs:element>
> </xs:sequence>
> </xs:complexType>
>
> <xs:element name="doc" type="DocType"/>
>
> The schema compiler xjc creates FriendListType as a class with
> an inner class FriendListType.Friend. There is no way around that, because
> you have to have some way of keeping both, the tag "friend" *and* the
> attribute name "value".
>
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "FriendListType", propOrder = {
> "friend"
> })
> public class FriendListType {
> protected List<FriendListType.Friend> friend;
> public List<FriendListType.Friend> getFriend() {
> if (friend == null) {
> friend = new ArrayList<FriendListType.Friend>();
> }
> return this.friend;
> }
>
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "")
> public static class Friend {
> @XmlAttribute
> protected String value;
> public String getValue() {
> return value;
> }
> public void setValue(String value) {
> this.value = value;
> }
> }
> }
>
>
> On Fri, Nov 28, 2008 at 8:59 AM, anbernas
> <andres.bernasconi_at_gmail.com>wrote:
>
>>
>> Sorry if I was too brief, but I don't have a class for FriendList, it's
>> just
>> a List<String> attribute inside a class. Like:
>>
>> public class MyClass{
>>
>> private List<String> friendList = null;
>>
>> //getters and setters
>>
>> }
>>
>> So the <friendList> tag is just a "wrapper" (I can use the
>> XmlElementWrapper
>> there to make it work), and I get the correct number of elements in my
>> list
>> after unmarshalling, but they are all null (I think because it does not
>> understand that the String has to come from the value attribute).
>>
>> I can make it work if the XML is like this:
>>
>> <friendList>
>> <friend>Fred</name>
>> <!-- instead of
>> <friend value="Fred" />
>> -->
>> </friendList>
>>
>> Any Ideas?
>>
>>
>>
>> Wolfgang Laun-2 wrote:
>> >
>> > @XmlType
>> > class FriendsList {
>> > @XmlElement
>> > List<String> friend;
>> > }
>> >
>> > That's all you need.
>> > -WL
>> >
>> > On Thu, Nov 27, 2008 at 11:27 PM, anbernas
>> > <andres.bernasconi_at_gmail.com>wrote:
>> >
>> >>
>> >> Hi, I have the following XML (snippet)
>> >>
>> >> ...
>> >> <friendsList>
>> >> <friend name="Fred"/>
>> >> <friend name="Walter"/>
>> >> ...
>> >> </friendsList>
>> >>
>> >> And I want to map that structure to a List<String> (where each element
>> in
>> >> the list should be "Fred", "Walter", etc.) I would like to try to
>> avoid
>> >> creating and intermediate class for Friend that only contains a name.
>> I
>> >> am
>> >> also using annotations for this, so I would like to stick to that.
>> >>
>> >> Is there any way to do it?
>> >>
>> >> I tried the following but I don't understand where I am supposed to
>> >> specify
>> >> the attribute of the element:
>> >> @XmlElementWrapper(name="friendsList")
>> >> @XmlElement(name="friend")
>> >> //_at_XmlAttribute(name="name") <-- both element and attribute are
>> invalid
>> >> protected List<String> friendList;
>> >>
>> >> Thank you very much for your time!
>> >> Regards
>> >> AB.
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/Help-needed-mapping-a-collection-of-Strings-to-an-element-with-attribute-tp20726382p20726382.html
>> >> Sent from the java.net - jaxb users mailing list archive at
>> Nabble.com.
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: users-unsubscribe_at_jaxb.dev.java.net
>> >> For additional commands, e-mail: users-help_at_jaxb.dev.java.net
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Help-needed-mapping-a-collection-of-Strings-to-an-element-with-attribute-tp20726382p20730247.html
>> Sent from the java.net - jaxb users mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jaxb.dev.java.net
>> For additional commands, e-mail: users-help_at_jaxb.dev.java.net
>>
>>
>
>
--
View this message in context: http://www.nabble.com/Help-needed-mapping-a-collection-of-Strings-to-an-element-with-attribute-tp20726382p20731456.html
Sent from the java.net - jaxb users mailing list archive at Nabble.com.