Hi Alvaro,

that sounds odd to me. Given that the GET Resource does its job just fine, and that the expected XML is being returned, I don't think the problem actually is with castor in this case.

I'd raise a question with the Spring OXM guys at their forum(s), and maybe post a link to the forum entry here so that we can listen in.

Regards
Werner

On 29.05.2013 13:20, Alvaro wrote:
Hi all,

Im trying to create a simple Spring REST app using SpringOXM and Castor for
XML handling. So far so good, the problem is that when sending an XML POST
request to create a contact, Castor crashes complaining that:
<p>Problem accessing /contacts. Reason:
<pre>    Server Error</pre></p><h3>Caused
by:</h3><pre>java.lang.IllegalStateException: No Introspector defined in
properties!

The simple xml Im sending looks like:
<?xml version="1.0" encoding="UTF-8"?>
<contact><name>Sonoo</name><lastName>Jaiswal</lastName></contact>

My mapping.xml:
<?xml version="1.0"?>
<mapping>
  <class name="com.test.model.Contact">
     <map-to xml="contact"/>
     <field name="name" type="string">
        <bind-xml name="name" node="element"/>
     </field>
     <field name="lastName" type="string">
        <bind-xml name="lastName" node="element"/>
     </field>
  </class>
</mapping>

The Spring configuration:
     <context:component-scan base-package="com.test />

     <!-- REST service -->
     <bean

class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
         <property name="messageConverters">
             <util:list id="beanList">
                 <ref bean="castorMarshallingHttpMessageConverter" />
             </util:list>
         </property>
     </bean>

     <bean id="castorMarshallingHttpMessageConverter"

class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
         <property name="marshaller" ref="castorMarshaller" />
         <property name="unmarshaller" ref="castorMarshaller" />
     </bean>

     <bean id="castorMarshaller"
class="org.springframework.oxm.castor.CastorMarshaller">
         <property name="mappingLocation"
             value="classpath:com/test//model/mapping.xml" />
     </bean>

And finally the controller looks like:

package com.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.HttpStatus;

@Controller
@RequestMapping("/contacts")
public class ContactsController {


    @RequestMapping(value="/{name}", method = RequestMethod.GET)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public Contact getContact(@PathVariable String name) {
       Contact c = new Contact();
       c.setName(name);
       c.setLastName("test");
       return c;
    }


    @RequestMapping( method = RequestMethod.POST )
    @ResponseStatus( HttpStatus.CREATED )
    @ResponseBody
    public Long create( @RequestBody Contact contact ){
          System.out.println("Contact " + contact.getName());
       return 1L;
    }

}


As you see its a quick and dirty test to try out Castor and Spring OXM.

Actually, a GET request to the getContact method works and the xml is
returned, so the mapping.xml is loaded correctly.

Do you have any idea why Castor is crashing when unmarshalling the POST
request xml??

Thanks in advance,
A

--20cf302ad6669f206904ddd8f514
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi all,<br><div class=3D"gmail_quote"><div dir=3D"ltr"><di=
v><div><div><div><div><div><div><div><div><br></div>Im trying to create a s=
imple Spring REST app using SpringOXM and Castor for XML handling. So far s=
o good, the problem is that when sending an XML POST request to create a co=
ntact, Castor crashes complaining that:<br>

&lt;p&gt;Problem accessing /contacts. Reason:<br>&lt;pre&gt;=A0=A0=A0 Serve=
r Error&lt;/pre&gt;&lt;/p&gt;&lt;h3&gt;Caused by:&lt;/h3&gt;&lt;pre&gt;java=
.lang.IllegalStateException: No Introspector defined in properties!<br><br>=
</div>

The simple xml Im sending looks like:<br>&lt;?xml version=3D&quot;1.0&quot;=
  encoding=3D&quot;UTF-8&quot;?&gt;<br>&lt;contact&gt;&lt;name&gt;Sonoo&lt;/=
name&gt;&lt;lastName&gt;Jaiswal&lt;/lastName&gt;&lt;/contact&gt;<br><br></d=
iv>

My mapping.xml:<br>&lt;?xml version=3D&quot;1.0&quot;?&gt;<br>&lt;mapping&g=
t;<br>=A0&lt;class name=3D&quot;com.test.model.Contact&quot;&gt;<br>=A0=A0=
=A0 &lt;map-to xml=3D&quot;contact&quot;/&gt;<br>=A0=A0=A0 &lt;field name=
=3D&quot;name&quot; type=3D&quot;string&quot;&gt;<br>

=A0=A0=A0=A0=A0=A0 &lt;bind-xml name=3D&quot;name&quot; node=3D&quot;elemen=
t&quot;/&gt;<br>=A0=A0=A0 &lt;/field&gt;<br>=A0=A0=A0 &lt;field name=3D&quo=
t;lastName&quot; type=3D&quot;string&quot;&gt;<br>=A0=A0=A0=A0=A0=A0 &lt;bi=
nd-xml name=3D&quot;lastName&quot; node=3D&quot;element&quot;/&gt;<br>

=A0=A0=A0 &lt;/field&gt;<br>=A0&lt;/class&gt;<br>&lt;/mapping&gt;<br><br></=
div>The Spring configuration:<br>=A0=A0=A0 &lt;context:component-scan base-=
package=3D&quot;com.test /&gt;<br><br>=A0=A0=A0 &lt;!-- REST service --&gt;=
<br>=A0=A0=A0 &lt;bean<br>

=A0=A0=A0=A0=A0=A0=A0 class=3D&quot;org.springframework.web.servlet.mvc.ann=
otation.AnnotationMethodHandlerAdapter&quot;&gt;<br>=A0=A0=A0=A0=A0=A0=A0 &=
lt;property name=3D&quot;messageConverters&quot;&gt;<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 &lt;util:list id=3D&quot;beanList&quot;&gt;<br>

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &lt;ref bean=3D&quot;castorMa=
rshallingHttpMessageConverter&quot; /&gt;<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0 &lt;/util:list&gt;<br>=A0=A0=A0=A0=A0=A0=A0 &lt;/property&gt;<br>=A0=A0=
=A0 &lt;/bean&gt;<br><br>=A0=A0=A0 &lt;bean id=3D&quot;castorMarshallingHtt=
pMessageConverter&quot;<br>

=A0=A0=A0=A0=A0=A0=A0 class=3D&quot;org.springframework.http.converter.xml.=
MarshallingHttpMessageConverter&quot;&gt;<br>=A0=A0=A0=A0=A0=A0=A0 &lt;prop=
erty name=3D&quot;marshaller&quot; ref=3D&quot;castorMarshaller&quot; /&gt;=
<br>=A0=A0=A0=A0=A0=A0=A0 &lt;property name=3D&quot;unmarshaller&quot; ref=
=3D&quot;castorMarshaller&quot; /&gt;<br>

=A0=A0=A0 &lt;/bean&gt;<br><br>=A0=A0=A0 &lt;bean id=3D&quot;castorMarshall=
er&quot; class=3D&quot;org.springframework.oxm.castor.CastorMarshaller&quot=
;&gt;<br>=A0=A0=A0=A0=A0=A0=A0 &lt;property name=3D&quot;mappingLocation&qu=
ot;<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 value=3D&quot;classpath:com/test//=
model/mapping.xml&quot; /&gt;<br>

=A0=A0=A0 &lt;/bean&gt;<br><br></div>And finally the controller looks like:=
<br><br>package com.test.controller;<br><br>import org.springframework.ster=
eotype.Controller;<br>import org.springframework.ui.ModelMap;<br>import org=
.springframework.web.bind.annotation.PathVariable;<br>

import org.springframework.web.bind.annotation.RequestMapping;<br>import or=
g.springframework.web.bind.annotation.RequestMethod;<br>import org.springfr=
amework.web.bind.annotation.ResponseStatus;<br>import org.springframework.w=
eb.bind.annotation.RequestBody;<br>

import org.springframework.web.bind.annotation.ResponseBody;<br>import org.=
springframework.http.HttpStatus;<br><br>@Controller<br>@RequestMapping(&quo=
t;/contacts&quot;)<br>public class ContactsController {<br><br><br>=A0=A0 @=
RequestMapping(value=3D&quot;/{name}&quot;, method =3D RequestMethod.GET)<b=
r>

=A0=A0 @ResponseStatus(HttpStatus.OK)<br>=A0=A0 @ResponseBody<br>=A0=A0 pub=
lic Contact getContact(@PathVariable String name) {<br>=A0=A0=A0=A0=A0 Cont=
act c =3D new Contact();<br>=A0=A0=A0=A0=A0 c.setName(name);<br>=A0=A0=A0=
=A0=A0 c.setLastName(&quot;test&quot;);<br>

=A0=A0=A0=A0=A0 return c;<br>=A0=A0 }<br><br><br>=A0=A0 @RequestMapping( me=
thod =3D RequestMethod.POST )<br>=A0=A0 @ResponseStatus( HttpStatus.CREATED=
  )<br>=A0=A0 @ResponseBody<br>=A0=A0 public Long create( @RequestBody
Conta=
ct contact ){<br>=A0=A0 =A0=A0=A0 =A0 System.out.println(&quot;Contact &quo=
t; + contact.getName());<br>

=A0=A0=A0=A0=A0 return 1L;<br>=A0=A0 }<br>=A0=A0=A0 <br>}<br><br><br></div>=
As you see its a quick and dirty test to try out Castor and Spring OXM.<br>=
<br></div>Actually, a GET request to the getContact method works and the xm=
l is returned, so the mapping.xml is loaded correctly.<br>

<br>Do you have any idea why Castor is crashing when unmarshalling the POST=
  request xml??<br><br></div>Thanks in advance,<br></div>A<br></div>
</div><br></div>

--20cf302ad6669f206904ddd8f514--


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to