Hello list. I am quite new to castor, so please bear with me if this has been answered before. I searched the mailing list and came up empty, but I may just not know how to ask the question correctly.
I have the following (heavily pared down) xml response that I need to unmarshall via castor:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCustomerPrefillResponse xmlns="http://com.com/ns/ics/service/AcctOpen/2005-05">
<GetCustomerPrefillResponse>
<CustomerId>123456789</CustomerId>
</GetCustomerPrefillResponse>
</GetCustomerPrefillResponse>
</soap:Body>
</soap:Envelope>
Here is the mapping file that I have for tha above response:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE databases PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
<mapping>
<class name="com.com.impl.customerprefill.WebServiceResponse">
<map-to xml="Envelope" ns-uri="http://schemas.xmlsoap.org/soap/envelope/" ns-prefix="soap" />
<field name="customerPrefillResponse" type="com.com.impl.customerprefill.CustomerPrefillResponse" required="false" direct="false">
<bind-xml name="GetCustomerPrefillResponse" node="element" location="Body" />
</field>
</class>
<class name="com.com.impl.customerprefill.CustomerPrefillResponse">
<map-to xml="GetCustomerPrefillResponse" ns-uri="http://com.com/ns/ics/service/AcctOpen/2005-05" />
<field name="customerId" type="java.lang.String" required="false" direct="false">
<bind-xml name="CustomerId" node="element" location="GetCustomerPrefillResponse" />
</field>
</class>
</mapping>
The above mapping doesn't work for the above response. I get no errors, but I get null for everything. However, if I take out the 2nd GetCustomerPrefillResponse element from the xml and the mapping file, I will get CustomerId field from the response.
The below xml and mapping file does work:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetCustomerPrefillResponse xmlns="http://com.com/ns/ics/service/AcctOpen/2005-05">
<CustomerId>123456789</CustomerId>
</GetCustomerPrefillResponse>
</soap:Body>
</soap:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE databases PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
<mapping>
<class name="com.com.impl.customerprefill.WebServiceResponse">
<map-to xml="Envelope" ns-uri="http://schemas.xmlsoap.org/soap/envelope/" ns-prefix="soap" />
<field name="customerPrefillResponse" type="com.com.impl.customerprefill.CustomerPrefillResponse" required="false" direct="false">
<bind-xml name="GetCustomerPrefillResponse" node="element" location="Body" />
</field>
</class>
<class name="com.com.impl.customerprefill.CustomerPrefillResponse">
<map-to xml="GetCustomerPrefillResponse" ns-uri="http://com.com/ns/ics/service/AcctOpen/2005-05" />
<field name="customerId" type="java.lang.String" required="false" direct="false">
<bind-xml name="CustomerId" node="element"/>
</field>
</class>
</mapping>
Unfortunately, I don't have control over the xml response, so I need to deal with the nested elements of the same name. What am I missing here? Any help would be greatly appreciated.
Thanks,
Derek