2011-08-10 14 views
3

基本的には、リソースをパスにマッピングするためにJAXRSを使用するRestletにプロジェクトを設定し、Javaタイプとの間でXMLをシリアライズおよびデシリアライズするためにJAXBを使用します。私は現在、それが動作するかどうかをテストするためにPOST要求を送信しようとしています、そして、私は少しの問題に遭遇しています。ここに私のリソースです:curlでREST XML POSTリクエストを送信するにはどうすればよいですか?

@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); 
    } 
} 

は、ここに私のStreamクラスです:

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 

ここで私はcurlから取得していますエラーがあります:

@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 
} 

そして、ここでは、私がcurlを呼び出しています方法です

The given resource variant is not supported. 

...と、ここでの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) 

は、私がここで間違って何をしているのですか?これはかなり簡単ですね。

答えて

5

text/xmlの引用符を削除します。言い換えれば

あなたが欲しい

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

[あなた](http://www.youtube.com/watch?v=os5TXyJlEMc)あなたが勝ちます。 –

0

カール-v -H "のContent-Type:アプリケーション/ xml" で-X POST --data-バイナリ "token.xml @" URL

関連する問題