affichage de xml à un ressort, le point de terminaison REST n'est pas prise en unmarshalled dans les objet Java

J'ai un projet où xsd sont donnés. J'utilise le xjc compilateur pour générer les classes Java. Et puis j'ai annoter la classe avec XmlRootElement attribut. J'ai configuré le sevlet avec le Jaxb2 marshalling/unmarshalling haricot dans le AnnotationMethodHandlerAdapter. lorsque j'envoie un fichier xml, sans les espaces de noms, j'ai l'415 erreur.

Le code source est comme suit
fichier - web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Test</display-name>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

fichier - dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"
    xmlns:oxm="http://www.springframework.org/schema/oxm">

    <context:component-scan base-package="com.test.endpoints" />

    <tx:annotation-driven />

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
          <list> 
            <ref bean="marshallingHttpMessageConverter"/>
          </list>
        </property>
    </bean>
    <bean id="marshallingHttpMessageConverter" 
          class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
           <constructor-arg ref="jaxb2Marshaller" />
    </bean> 
    <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>com.test.users.User</value>
                <value>com.test.users.Users</value>
            </list>
        </property>
    </bean>
    <!-- Should be defined last! -->
<!--    <mvc:annotation-driven />-->
</beans>

fichier de l'utilisateur.xsd

    <element name="users">
        <complexType>
            <sequence>
                <element name="user" type="tns:user" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
        </complexType>
    </element>
    <complexType name="user">
        <sequence>
            <element name="id" type="int" />            
            <element name="email" type="string"></element>
            <element name="first_name" type="string"></element>
            <element name="last_name" type="string"></element>          
        </sequence>
    </complexType>
</schema>

Utilisé cette commande pour générer les classes Java pour le dessus de xsd.

xjc -p com.test.users ..\xsd\user.xsd

De sortie de cette commande est

parsing a schema...
compiling a schema...
com\test\users\ObjectFactory.java
com\test\users\User.java
com\test\users\Users.java
com\test\users\package-info.java

Annoté User.java avec @XmlRootElement(name="utilisateur").

fichier - UserService.java

package com.test.endpoints;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.test.users.User;

@Controller
@RequestMapping("/users")
public class UserService {
    @RequestMapping(value="/new", method=RequestMethod.POST)
    @ResponseBody
    public User createUser(@RequestBody User user) {
        System.out.println(user.getFirstName());

        return user;
    }
}

Testé l'api REST avec cette commande curl

curl -X POST -HContent-type:application/xml -HAccept:application/xml  --data "<?xml version="1.0" encoding="UTF-8"?><user><id>1</id><email>[email protected]</email><first_name>first_name</first_name><last_name>last_name</last_name></user>" http://localhost:8080/Test/rest/users/new

De sortie est

The request sent by the client was syntactically incorrect ()

Quelqu'un peut-il svp m'indiquer où je vais mal.

Grâce

OriginalL'auteur Uma Shankar | 2011-03-14