Javaのaxis1.4でxml電文をSOAPRequestにして送信
なんかaxisでやってるとSOAPMessageとかいろいろめんどくさい感じなんですがその辺生でやりとりしたい場合に。 org.apache.http.client.HttpClient(4.1系)を利用して、HTTPでリクエストを送る。
ポイントは"SOAPAction"をHTTPヘッダに付与してあげること。これないとaxis1.4で作ったスタブはエラー返します(axis2系はわかりません)。
// SOAP request(xml) read-in File req_xml = new File("test/xml/request.xml"); // SOAP request send HttpPost post = new HttpPost("http://localhost:8080/test/api/"); post.setEntity(new InputStreamEntity(new FileInputStream(req_xml), req_xml.length())); post.setHeader("Content-type", "text/xml; charset=UTF-8"); post.setHeader("SOAPAction", ""); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(post); // SOAP response(xml) get String res_xml = EntityUtils.toString(response.getEntity());
ちなみに電文自体を取得するには
// get result from server AccountType ret = (AccountType)call.invoke(new Object[] { }); // get request/response(XML) String request = call.getMessageContext().getRequestMessage().getSOAPPartAsString(); String response = call.getMessageContext().getResponseMessage().getSOAPPartAsString();
という感じでinvokeした後、MessageContextから拾ってくればよいです。