いっぽんの猟銃のむこうに (DAIZOじいさんとGun)

ヌルめの技術メモとか。フリーランスやってます (http://acez.jp/)

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から拾ってくればよいです。