SOAP UI で POST リクエストを実行できます。しかし、私は Java から同じことを行うことができず、約 5 ~ 6 時間試行しており、勝利の組み合わせを見つけることができません。これは、私が機能させようとしている投稿の xsd スキーマ部分です。
<method name="POST">
<request>
<param name="username" style="query" type="xs:string"/>
<param name="id" style="query" type="xs:long"/>
<representation mediaType="multipart/form-data"/>
</request>
soap ui でペイロードを c/p するだけです:
<?xml version="1.0" encoding="UTF-8"?>
<ImageList xmlns="http://someurl/1.0/image" >
<Image>
<Name>sampler.jpg</Name>
<Filename>C:\\sampler.jpg</Filename>
<Label>
<Value>Test image</Value>
</Label>
<ImageMetadata>
<Format>jpg</Format>
<Height>300</Height>
<Width>400</Width>
</ImageMetadata>
</Image>
</ImageList>
次に、添付ファイル タブに添付ファイルを追加します。Name
、Content-Type
など、有効な応答コードを取得しますが、Javaで同じことを行うことができません。これが得られたものです:
HttpRequestBase post = new HttpPost();
HttpClient client = new DefaultHttpClient();
try {
post.setURI(new URI(URL));
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// set number of retries
post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(1, false));
HttpResponse response = null;
HttpPost post = (HttpPost) method;
try {
post.setURI(new URI(URL));
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
FileBody uploadFilePart = new FileBody(new File("C:\\sampler.jpg"));
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("upload-file", uploadFilePart);
//payload
String requestBody = fileToString("src/main/resources/imageBodyPayload.xml");
HttpParams parameters = new BasicHttpParams();
parameters.setLongParameter("id", 951);
parameters.setParameter("username", "test");
post.setParams(parameters);
post.setEntity(new StringEntity(requestBody, "multipart/form-data", HTTP.UTF_8));
response = client.execute(post);
そのため、投稿リクエストにペイロードを文字列として設定しましたが、同時に添付ファイルを追加することはできません。
これは、soap ui からの生のリクエストがどのように見えるかです:
POST http://localhost:9080/imageUpload/?id=951&userame=test HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: multipart/form-data; boundary="----=_Part_9_23652504.1341953390382"
MIME-Version: 1.0
同じ動作を再現できません