2011-08-10 7 views
3

Fondamentalement, j'ai un projet mis en place dans Restlet qui utilise JAXRS pour mapper les ressources aux chemins et utilise JAXB pour sérialiser et désérialiser le XML de/vers les types Java. J'essaye actuellement d'envoyer une demande de POST afin de tester si cela fonctionne, et je me heurte à un peu de problème. Voici ma ressource:Comment envoyer une requête REST XML POST via curl?

@Path("stream") 
public class StreamResource { 

    @POST 
    @Consumes("text/xml") 
    @Produces("text/xml") 
    public Stream save(Stream value) { 
     logger.debug("saving new stream..."); 
     return (Stream)this.streamPersistence.save(value); 
    } 
} 

Voici mon Stream classe:

@XmlRootElement(name="stream") 
@XmlType(propOrder={"id", "streamName", "title", "description", fileSystemPath"}) 
public class Stream { 

    private Long id; 

    private String streamName; 

    private String fileSystemPath; 

    private String title; 

    private String description; 

    // getters/setters omitted for brevity 
} 

Et voici comment j'invoquer curl:

curl -X POST -d '<stream><streamName>helloWorld.flv</streamName><title>Amazing Stuff, Dude!</title><description>This stream is awesome-cool.</description><fileSystemPath>/home/rfkrocktk/Desktop/helloWorld.flv</fileSystemPath></stream>' --header 'Content-Type:"text/xml"' http://localhost:8888/stream 

est ici l'erreur que je reçois de curl:

The given resource variant is not supported. 

... et voici l'erreur dans Restlet:

15:02:25.809 [Restlet-961410881] WARN org.restlet.Component.Server - Error while parsing entity headers java.lang.IllegalArgumentException: Illegal token: "text 
    at org.restlet.data.MediaType.normalizeToken(MediaType.java:647) 
    at org.restlet.data.MediaType.normalizeType(MediaType.java:686) 
    at org.restlet.data.MediaType.<init>(MediaType.java:795) 
    at org.restlet.data.MediaType.<init>(MediaType.java:767) 
    at org.restlet.engine.http.header.ContentTypeReader.createContentType(ContentTypeReader.java:84) 
    at org.restlet.engine.http.header.ContentTypeReader.readValue(ContentTypeReader.java:112) 
    at org.restlet.engine.http.header.ContentType.<init>(ContentType.java:99) 
    at org.restlet.engine.http.header.HeaderUtils.extractEntityHeaders(HeaderUtils.java:664) 
    at org.restlet.engine.http.connector.Connection.createInboundEntity(Connection.java:313) 
    at org.restlet.engine.http.connector.ServerConnection.createRequest(ServerConnection.java:136) 
    at org.restlet.engine.http.connector.ServerConnection.readMessage(ServerConnection.java:229) 
    at org.restlet.engine.http.connector.Connection.readMessages(Connection.java:673) 
    at org.restlet.engine.http.connector.Controller$2.run(Controller.java:95) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:679) 

ce que je fais mal ici? Cela semble assez simple, non?

Répondre

5

Supprime les guillemets autour de text/xml.

En d'autres termes, vous voulez

curl -X POST -d '<stream><streamName>helloWorld.flv</streamName><title>Amazing Stuff, Dude!</title><description>This stream is awesome-cool.</description><fileSystemPath>/home/rfkrocktk/Desktop/helloWorld.flv</fileSystemPath></stream>' --header 'Content-Type: text/xml' http://localhost:8888/stream 
+0

[Vous êtes un pirate.] (http://www.youtube.com/watch?v=os5TXyJlEMc) Vous gagnez. –

0

boucle -v -H "Content-Type: application/xml" POST -X --data-binaire "@ token.xml" URL

Questions connexes