For mdaoud's problem, he could just define one mapping that has all the 
properties he'd ever need for that class:

<class name="com.mycomp.pkg.Class">
   <map-to xml="firstSOAPRequest"/>
   <field name="name" type="string">
       <bind-xml name="Name" node="element"/>
   </field>
   <field name="address" type="string">
       <bind-xml name="Address" node="element"/>
   </field>
</class>

Castor is not going to complain if the payload doesn't contain one of the 
elements.

Just prior to marshalling he'd call the .setRootElement("xxxxxSOAPRequest"), 
where xxxxx would be replaced with "first" or "second" depending on the 
scenario.  Essentially here you are overriding the "<map-to>" xml attribute 
value from the mapping.

mdaoud, you're using Spring OXM right?  This makes things trickier, but I've 
had to do this myself (and for Unmarshalling to different classes see this JIRA 
for a scenario when I've had to do that)

Werner, would a writeup on customizing marshalling/unmarshalling with Spring 
OXM be a good addition to the docs?  If so I'll add that.

Craig

On 2011-07-14, at 7:44 AM, Swindells, Thomas wrote:

> Have you considered just using two instances of the marshaller, each 
> configured for each request.
> If you have control of your soap request you could modify the structure so 
> that they are structured like so:
> SoapRequest1() {
> Data {
>   String status,
>   int foo
> }
> }
> 
> SoapRequest2() {
> Data { ...}
> }
> 
> Then while your soap requests would be separate classes all they would 
> contain is a reference to a shared common standard class.
> 
> Thomas
> 
>> -----Original Message-----
>> From: mdaoud [mailto:[email protected]]
>> Sent: 14 July 2011 13:05
>> To: [email protected]
>> Subject: Re: [castor-user] Unmarshalling multiple xml to one class
>> 
>> 
>> Hi Werner,
>> 
>> Thanks for your declaration. Actually i supplied just the part of the XML 
>> which
>> i have problem with (cannot use the same class twice). but i have for the
>> response (marshalling) something like:
>> 
>>    <class name="com.mycomp.pkg.ClassResponse">
>>        <map-to xml="firstSOAPResponse"/>
>>        <field name="status">
>>            <bind-xml name="Status" node="element" type="string"/>
>>        </field>
>>    </class>
>> 
>> If there is noway to use the same class twice, what other approaches can i
>> use to (un)marshal my web services request/response?
>> 
>> Many thanks for your great help,
>> 
>> 
>> 
>> Werner Guttmann-6 wrote:
>>> 
>>> Hi,
>>> 
>>> as already said, XML data binding basically supports two operations:
>>> 
>>> * unmarshalling: XML --> object instances
>>> * marshalling: object instances --> XML
>>> 
>>> When you supply a mapping file for Castor XML, you are actually
>>> supplying enough information so that *both* operations have enough
>>> information that is *not* ambiguous.
>>> 
>>> In your case, the mapping information you provide would be sufficient
>>> for the unmarshalling side of things, but would be AMBIGUOUS for
>>> marshalling (see my question below).
>>> 
>>> As such, this is currently not supported out of the box.
>>> 
>>> Regards
>>> Werner Guttmann
>>> 
>>> On 14.07.2011 11:47, mdaoud wrote:
>>>> 
>>>> Hi Werner,
>>>> 
>>>> Thank you so much for your help. I am sorry as i am quite newbie to
>>>> Castor i am bit lost.
>>>> Basically, Class is just pojo class which has some properties
>>>> (name,address,age,..) and i have some webservices operation like
>>>> updateAge which passes the age, and i have updateName which passes
>>>> the name. So i want to map those 2 requests to Class (as it will be
>>>> bit trivial building class for every single request!!) Did i miss
>>>> something??
>>>> 
>>>> Thanks,
>>>> 
>>>> 
>>>> Werner Guttmann-6 wrote:
>>>>> 
>>>>> HI,
>>>>> 
>>>>> this is currently not possible with Castor XML. Whilst on the
>>>>> unmarshalling side this could be achievable, it would cause complete
>>>>> chaos on the marshalling side of things. What XML element would you
>>>>> Castor expect to use when you marshalled an instance of
>>>>> com.mycomp.pkg.Class".
>>>>> 
>>>>> I hope this helps.
>>>>> 
>>>>> Kind Regards
>>>>> Werner Guttmann
>>>>> 
>>>>> On 14.07.2011 11:10, mdaoud wrote:
>>>>>> 
>>>>>> Hi guys,
>>>>>> 
>>>>>> I am quite new to use Castor and i would really appreciate if you
>>>>>> can guide me to solve my problem.
>>>>>> Basically, I am integrating Castor with Spring-ws. I would like to
>>>>>> map multiple xml (SOAP requests) to the same class. when i try to
>>>>>> define something like the code below, i get an error saying the
>>>>>> class already in use! any way to solve this?
>>>>>> 
>>>>>> <class name="com.mycomp.pkg.Class">
>>>>>>    <map-to xml="firstSOAPRequest"/>
>>>>>>    <field name="name" type="string">
>>>>>>        <bind-xml name="Name" node="element"/>
>>>>>>    </field>
>>>>>>    <field name="address" type="string">
>>>>>>        <bind-xml name="Address" node="element"/>
>>>>>>    </field>
>>>>>> </class>
>>>>>> 
>>>>>> <class name="com.mycomp.pkg.Class">
>>>>>>    <map-to xml="secondSOAPRequest"/>
>>>>>>    <field name="name" type="string">
>>>>>>        <bind-xml name="Name" node="element"/>
>>>>>>    </field>
>>>>>> </class>
>>>>>> 
>>>>>> Thanks in advance,
>>>>> 
>>>>> --------------------------------------------------------------------
>>>>> - To unsubscribe from this list, please visit:
>>>>> 
>>>>>    http://xircles.codehaus.org/manage_email
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe from this list, please visit:
>>> 
>>>    http://xircles.codehaus.org/manage_email
>>> 
>>> 
>>> 
>>> 
>> 
>> --
>> View this message in context: http://old.nabble.com/Unmarshalling-
>> multiple-xml-to-one-class-tp32059761p32060631.html
>> Sent from the Castor - User mailing list archive at Nabble.com.
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe from this list, please visit:
>> 
>>    http://xircles.codehaus.org/manage_email
>> 
> 
> 
> 
> **************************************************************************************
> This message is confidential and intended only for the addressee. If you have 
> received this message in error, please immediately notify the 
> [email protected] and delete it from your system as well as any copies. The 
> content of e-mails as well as traffic data may be monitored by NDS for 
> employment and security purposes. To protect the environment please do not 
> print this e-mail unless necessary.
> 
> NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 
> 4EX, United Kingdom. A company registered in England and Wales. Registered 
> no. 3080780. VAT no. GB 603 8808 40-00
> **************************************************************************************
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>    http://xircles.codehaus.org/manage_email
> 
> 

Reply via email to