Sorry, somehow I find it hard to follow your explanation(s). It looks
like you have managed to find a solution yourself, but I don't really
(fully) understand what you are trying to describe as the cause.
Can you please try it again ?
Thanks
Werner
Mark Small wrote:
> Hi there,
>
> I've figured this out for myself, in case anyone else has the same problem,
> I give my fix here.
>
> For some inexplicable reason, requesting only some of the attributes for an
> element to be bound causes inconsistent binding i.e.
> <element id="one" name="element" size="2">
> ....
> </element>
>
> Requesting only id and name be bound causes one or more to NOT be bound to
> the corresponding attribute in the Java class. If you change this to bind
> all (add fields to mapping file and attributes to Java Class), then the same
> mapping will work fine, this is even though I'd set ignoring attributes to
> true for hte unmarshaller i.e.
>
> unmarshaller.setIgnoreExtraAttributes(true);
>
> There may be a better way and if anyone knows of one then please do post a
> reply.
>
> MARK
>
> CIAO
>
>
>
> Mark Small wrote:
>> Hi there,
>>
>> I am having a problem in regards to the binding of a number of values. I
>> have a rather complex bit of xml (to me it is anyway), upon Unmarshalling,
>> I get no errors but some values are not being bound while others are.
>>
>> Output of toString method (after Unmarshalling)
>> =====================================
>> Class Name: castor.mapping.namespace.csw.GetRecordsResponse
>> Attributes:
>> result: Class Name: castor.mapping.namespace.csw.SearchResult
>> Attributes:
>> numberOfRecordsMatched: 0
>> numberOfRecordsReturned: 0
>> extrinsic: Class Name:
>> castor.mapping.namespace.csw.ExtrinsicObjectData
>> Attributes:
>> id:
>> urn:uuid:64c67376-5814-49dd-b73c-1f046536795b
>> objectType:
>>
>> From the output above it can be seen that I have a number of objects
>> within objects. The GetRecordsResponse class has one attribute
>> (SearchResult), which itself contains 2 int attributes and an
>> ExtrinsicObjectData attribute, which is itself a class which contains 2
>> String attributes. The xml I am trying to Unmarshall (See below for al
>> code listings), contains a GetRecordsResponse element which contains the
>> SearchResult element which contains numberOfRecordsMatched,
>> numberOfRecordsReturned as attribute nodes and ExtrinsicObject as a child
>> element. The ExtrinsicObject element contains a number of attributes and
>> child elements, most of which I don't care about at the moment.
>>
>> At the moment I only care about the 2 int number of records attributes in
>> the SearchResult element and the id and objectType attributes of the
>> ExtrinsicObject element.
>>
>> the problem is that the binding appears to be occurring without any errors
>> yet still is unable to bind the correct values to the associated fields in
>> my Java Classes. The only value that is correctly bound is the id value,
>> the zero values for the numberOfRecords... fields are set upon
>> initialization of the SearchResult object in Java and not bound to any
>> value in the xml, this is the same for the objectType field in the
>> ExtrinsicObject object.
>>
>> Any help is gratefully appreciated, cheers.
>>
>> CODE LISTINGS
>> ==============
>>
>> JAVA CLASSES
>> =============
>>
>> public class GetRecordsResponse {
>>
>> private SearchResult result = new SearchResult();
>>
>> public SearchResult getResult() {
>> return this.result;
>> }
>>
>> public void setResult(SearchResult result) {
>> this.result = result;
>> }
>>
>> public String toString() {
>> StringBuilder msg = new StringBuilder();
>> msg.append("\nClass Name: " + getClass().getName() + "\n");
>> msg.append("\tAttributes: \n");
>> msg.append("\t\tresult: " + getResult().toString() + "\n");
>>
>> return msg.toString();
>> }
>> } // End of class GetRecordsResponse.
>>
>>
>> public class SearchResult {
>>
>> private int numberOfRecordsMatched = 0;
>> private int numberOfRecordsReturned = 0;
>> private ExtrinsicObjectData extrinsic = new ExtrinsicObjectData();
>>
>> public ExtrinsicObjectData getExtrinsic() {
>> return this.extrinsic;
>> }
>>
>> public void setExtrinsic(ExtrinsicObjectData extrinsic) {
>> this.extrinsic = extrinsic;
>> }
>>
>> public int getNumberOfRecordsMatched() {
>> return this.numberOfRecordsMatched;
>> }
>>
>> public void setNumberOfRecordsMatched(int numberOfRecordsMatched) {
>> this.numberOfRecordsMatched = numberOfRecordsMatched;
>> }
>>
>> public int getNumberOfRecordsReturned() {
>> return this.numberOfRecordsReturned;
>> }
>>
>> public void setNumberOfRecordsReturned(int numberOfRecordsReturned) {
>> this.numberOfRecordsReturned = numberOfRecordsReturned;
>> }
>>
>> public String toString() {
>> StringBuilder msg = new StringBuilder();
>> msg.append("Class Name: " + getClass().getName() + "\n");
>> msg.append("\t\tAttributes: \n");
>> msg.append("\t\t\tnumberOfRecordsMatched: " +
>> getNumberOfRecordsMatched() + "\n");
>> msg.append("\t\t\tnumberOfRecordsReturned: " +
>> getNumberOfRecordsReturned() + "\n");
>> msg.append("\t\t\textrinsic: " + getExtrinsic().toString() + "\n");
>>
>> return msg.toString();
>> }
>> } // End of class SearchResult.
>>
>> public class ExtrinsicObjectData {
>>
>> private String id = "";
>> private String objectType = "";
>>
>> public ExtrinsicObjectData() {}
>>
>> public ExtrinsicObjectData(String id, String objectType) {
>> setId(id);
>> setObjectType(objectType);
>> }
>>
>> public String getId() {
>> return this.id;
>> }
>>
>> public void setId(String id) {
>> this.id = id;
>> }
>>
>> public String getObjectType() {
>> return this.objectType;
>> }
>>
>> public void setObjectType(String objectType) {
>> this.objectType = objectType;
>> }
>>
>> public String toString() {
>> StringBuilder msg = new StringBuilder();
>> msg.append("Class Name: " + getClass().getName() + "\n");
>> msg.append("Attributes: \n");
>> msg.append("\t\t\t\tid: " + getId() + "\n");
>> msg.append("\t\t\t\tobjectType: " + getObjectType() + "\n");
>>
>> return msg.toString();
>> }
>> } // End of class ExtrinsicObject.
>>
>> JUnit Test
>> ========
>> import java.io.FileReader;
>> import java.io.IOException;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> import org.exolab.castor.mapping.Mapping;
>> import org.exolab.castor.mapping.MappingException;
>> import org.exolab.castor.xml.MarshalException;
>> import org.exolab.castor.xml.Unmarshaller;
>> import org.exolab.castor.xml.ValidationException;
>> import org.junit.Test;
>>
>> public class GetRecordsResponseTest {
>>
>> private static final Log log =
>> LogFactory.getLog(GetRecordsResponseTest.class);
>>
>> @Test
>> public void testMapping() {
>> String filename =
>> "src/test/resources/GetRecords-extrinsic-response.xml";
>> String mapfile =
>> "src/test/resources/GetRecords-extrinsic-response-mapping.xml";
>>
>> try {
>> Mapping mapping = new Mapping();
>> mapping.loadMapping(mapfile);
>>
>> Unmarshaller unmarshaller = new Unmarshaller(mapping);
>> unmarshaller.setIgnoreExtraElements(true);
>> unmarshaller.setIgnoreExtraAttributes(true);
>>
>> GetRecordsResponse recordsResponse =
>> (GetRecordsResponse)unmarshaller.unmarshal(new
>> FileReader(filename));
>>
>> log.debug(recordsResponse.toString());
>> } catch(IOException ex) {
>> log.error("ERROR: Cannot read file: " + filename + ex);
>> } catch(MappingException ex) {
>> log.error("ERROR: Cannot load mapping file: " + filename + ex);
>> } catch(MarshalException ex) {
>> log.error("ERROR: Cannot Unmarshall file: " + filename + ex);
>> } catch(ValidationException ex) {
>> log.error("ERROR: Cannot validate file: " + filename + ex);
>> }
>> }
>> } // End of class GetRecordsResponseTest.
>>
>> MAPPING FILE
>> ============
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>>
>> <mapping xmlns="http://castor.exolab.org/"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xmlns:csw="http://www.opengis.net/cat/csw"
>> xmlns:rim="urn:oasis:names:tc:ebxml-regrep:rim:xsd:2.5"
>> xsi:schemaLocation="http://castor.exolab.org/mapping.xsd"
>>
>> csw:schemaLocation="http://schemas.cubewerx.com/schemas/csw/2.0.1/CSW-discovery.xsd"
>>
>> rim:schemaLocation="http://schemas.cubewerx.com/schemas/ebrim/2.5/schema/rim.xsd">
>>
>> <class name="castor.mapping.namespace.csw.GetRecordsResponse">
>> <map-to xml="GetRecordsResponse" />
>> <field name="result"
>> type="castor.mapping.namespace.csw.SearchResult"
>> direct="false">
>> <bind-xml name="csw:SearchResults" />
>> </field>
>> </class>
>>
>> <class name="castor.mapping.namespace.csw.SearchResult">
>> <map-to xml="SearchResults" />
>> <field name="numberOfRecordsMatched"
>> type="integer"
>> direct="false">
>> <bind-xml name="numberOfRecordsMatched" node="attribute" />
>> </field>
>>
>> <field name="numberOfRecordsReturned"
>> type="integer"
>> direct="false">
>> <bind-xml name="numberOfRecordsReturned" node="attribute" />
>> </field>
>>
>> <field name="extrinsic"
>> type="castor.mapping.namespace.csw.ExtrinsicObjectData"
>> direct="false">
>> <bind-xml name="rim:ExtrinsicObject" />
>> </field>
>> </class>
>>
>> <class name="castor.mapping.namespace.csw.ExtrinsicObjectData">
>> <field name="id" type="string" direct="false">
>> <bind-xml name="id" node="attribute" />
>> </field>
>>
>> <field name="objectType" type="string" direct="false">
>> <bind-xml name="objectType" node="attribute" />
>> </field>
>> </class>
>> </mapping>
>>
>> SOURCE XML FILE
>> ================
>> <csw:GetRecordsResponse xsi:schemaLocation="http://www.opengis.net/cat/csw
>>
>> http://schemas.cubewerx.com/schemas/csw/2.0.1/CSW-discovery.xsd
>>
>> urn:oasis:names:tc:ebxml-regrep:rim:xsd:2.5
>>
>> http://schemas.cubewerx.com/schemas/ebrim/2.5/schema/rim.xsd
>> http://www.opengis.net/gml
>>
>> http://schemas.cubewerx.com/schemas/gml/3.1.1/base/geometryAggregates.xsd">
>> <csw:SearchStatus status="complete" timestamp="2007-05-29T09:34:37" />
>>
>> <csw:SearchResults
>> recordSchema="urn:oasis:names:tc:ebxml-regrep:rim:xsd:2.5"
>> numberOfRecordsMatched="1"
>> numberOfRecordsReturned="1">
>> <rim:ExtrinsicObject
>> id="urn:uuid:64c67376-5814-49dd-b73c-1f046536795b"
>>
>> home="http://motiive.edina.ac.uk:50080/cwwrs/cwwrs.cgi"
>> objectType="Document"
>> status="Submitted"
>> majorVersion="1"
>> minorVersion="0"
>> mimeType="text/xml"
>> isOpaque="false">
>> <rim:Name>
>> <rim:LocalizedString rim:lang="en-US"
>> charset="UTF-8"
>> value="Usage note for WMS cookbook" />
>> </rim:Name>
>>
>> <rim:Description>
>> <rim:LocalizedString rim:lang="en-US"
>> charset="UTF-8"
>> value="notes that relate to WMS" />
>> </rim:Description>
>>
>> <rim:Slot name="RepositoryItem" slotType="string">
>> <rim:ValueList>
>> <rim:Value>TRUE</rim:Value>
>> </rim:ValueList>
>> </rim:Slot>
>>
>> <rim:Slot name="externalIdentifier" slotType="string">
>> <rim:ValueList>
>> <rim:Value>
>> http://motiive.edina.ac.uk:50080/harvest/docs/UsageNote.xml
>> </rim:Value>
>> </rim:ValueList>
>> </rim:Slot>
>>
>> <rim:Slot name="externalURI" slotType="string">
>> <rim:ValueList>
>> <rim:Value>
>> http://motiive.edina.ac.uk:50080/harvest/docs/UsageNote.xml
>> </rim:Value>
>> </rim:ValueList>
>> </rim:Slot>
>>
>> <rim:Classification
>> id="urn:uuid:444c959c-ea0c-4853-ba92-323b883da7ae"
>> home="http://demo.cubewerx.com/noo/cwwrs.cgi"
>> status="Submitted"
>>
>> classificationScheme="urn:esdi:marine:members-taxonomy"
>>
>> classifiedObject="urn:uuid:64c67376-5814-49dd-b73c-1f046536795b"
>>
>> classificationNode="urn:esdi:marine:members-taxonomy:EDINA" />
>>
>> <rim:Classification
>> id="urn:uuid:f3ed73c9-c530-49d1-9a14-a7fbd97ca310"
>> home="http://demo.cubewerx.com/noo/cwwrs.cgi"
>> status="Submitted"
>>
>> classificationScheme="urn:esdi:marine:content:type"
>>
>> classifiedObject="urn:uuid:64c67376-5814-49dd-b73c-1f046536795b"
>>
>> classificationNode="urn:esdi:marine:content:type:document" />
>> </rim:ExtrinsicObject>
>> </csw:SearchResults>
>> </csw:GetRecordsResponse>
>>
>>
>
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email