WS をモックしようとしています。WSで次のメソッドを作成しました
@POST
@Consumes (MediaType.APPLICATION_XML)
public void dataIn (InputStream inXml){
System.out.println ("data received");
BufferedReader br = new BufferedReader(new InputStreamReader(inXml));
String xml = null;
try {
while ((xml = br.readLine())!=null){
System.out.println(xml);
}
} catch (IOException e) {
System.out.println ("ouch");
}
}
そして、このコードでJavaクライアントを使用してXMLを送信しています
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><rootElem name=\"xml_type\"><info>this_is_test</info></rootElem>";
service.accept(MediaType.APPLICATION_XML).post(xml);
しかし、私はこの例外を受けています
Exception in thread "main" com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/project/ws/services/1.0/savedata returned a response status of 415
XML を適切に送信していないことは確かです。いくつかのグーグルを行った後、何が間違っているのかわかりませんでした。私がオンラインで見つけているチュートリアル/ヘルプのほとんどは、クライアントからサーバーへの OBJ > JAXB > XML > JAXB > OBJ 変換を使用しているためです。生の xml を送信し、生の xml を読み取りたいです。誰かが私がここでやっている何が間違っているのか教えてもらえますか?
自分の質問に答えることが評判につながるかどうかはわかりません。しかし、つまずいて物事を理解した後、Apache httpclient を使用してリクエストを送信すると、正常に機能しました。質問を締め切りたいと思います。
DefaultHttpClient dhc = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://localhost:8080/project/ws/services/1.0/savedata");
StringEntity se = new StringEntity("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><rootElem name=\"xml_type\"><info>this_is_test</info></rootElem>");
se.setContentType("application/xml");
postRequest.setEntity(se);
HttpResponse response = dhc.execute(postRequest);
System.out.println (response.getStatusLine().getStatusCode());