- PR -

JAVA WEBサービスへのアクセス HTTP/1.1 Keep-Aliveにする方法

1
投稿者投稿内容
シャムウ
会議室デビュー日: 2006/12/28
投稿数: 2
投稿日時: 2006-12-28 16:13
シャムウと申します

JAVA WEBサービスへのアクセス HTTP/1.1 Keep-Aliveにする方法を教えてください。
ヘッド部分をこのようにしたい
POST /Magic94Scripts/mgrqispi94.dll HTTP/1.1
Connection: Keep-Alive
よろしくお願いいたします。

==============================
作成したコード (単純にメッセージを送信して、その返事を受ける)

package offcall;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;

import java.io.*;
import java.net.*;


import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.transport.http.HTTPConstants;
import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory;
import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory;
import java.util.Hashtable;

import javax.xml.namespace.QName;

import javax.xml.rpc.ParameterMode;

public class Client
{
public static void main(String [] args)
{

try {
Options options = new Options(args);
System.out.println("options : " + options);

String endpointURL = "http://SVCTAG-6VBLS1X/Magic94Scripts/mgrqisp94.dll";
String textToSend;

args = options.getRemainingArgs();
if ((args == null) || (args.length < 1)) {
textToSend = "<nothing>";
} else {
textToSend = args[0];
}
System.out.println("textToSend: " + textToSend);

Service service = new Service();

System.out.println("service: " + service);

Call call = (Call) service.createCall();

System.out.println("call: " + call);
call.setScopedProperty(MessageContext.HTTP_TRANSPORT_VERSION,HTTPConstants.HEADER_PROTOCOL_V11);
call.setSOAPActionURI("9616A7E65646F2E6F69647F6D65666D6A3360727");



call.setTargetEndpointAddress("http://SVCTAG-6VBLS1X/Magic94Scripts/mgrqisp94.dll");

call.setTargetEndpointAddress( new java.net.URL(endpointURL));
call.setOperationName( new QName("urn:magic.SVCTAG-6VBLS1X.denzai","denzai") );
call.addParameter( "A", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType( org.apache.axis.encoding.XMLType.XSD_STRING );

String ret = (String) call.invoke( new Object[] { textToSend } );

System.out.println("You typed : " + ret);
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
=================================





クライアントからの送信
POST /Magic94Scripts/mgrqisp94.dll HTTP/1.1
Host: SVCTAG-6VBLS1X
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 507
Connection: close

サーバーの返事
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Thu, 28 Dec 2006 05:05:49 GMT

クライアントからの送信
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Body>
<ns1:denzai xmlns:ns1="urn:magic.SVCTAG-6VBLS1X.denzai">
<A xsi:type="xsd:string">javaddd</A>
</ns1:denzai>
</soapenv:Body>
</soapenv:Envelope>

サーバーの返事
HTTP/1.1 500 Server Error
Server: Microsoft-IIS/5.0
Date: Thu, 28 Dec 2006 05:05:49 GMT
Connection: close
Content-Type: text/html
Content-Length: 100
エラーのHTML(省略)

=============================================
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
通信をHTTP/1.1にして
コネクションをKeep-Aliveにしたい理由

java(AXIS)で作成したプログラムから、MagicV9で作成したWebサービスへのアクセスしたい為

Magic同士の通信の場合 通信がHTTP/1.1でコネクションがKeep-Aliveになっていた。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

下記 例 単純に送信した値を受け取って返すサービス

MagicV9で作成したWebサービスへのアクセス
クライアントMagicV9 から サーバーMagicV9 の場合

TCP モニタの内容

クライアントからの送信

POST /Magic94Scripts/mgrqispi94.dll HTTP/1.1
Host: SVCTAG-6VBLS1X
Connection: Keep-Alive
User-Agent: EasySoap++/0.6
Content-Type: text/xml;
charset="UTF-8"
SOAPAction: "9616A7E65646F2E6F69647F6D65666D6A3360727"
Content-Length: 409

<E:Envelope xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAPEnc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body><m:denzai xmlns:m="urn:magic.SVCTAG-6VBLS1X.denzai">
<A xsi:type="xsd:string">eeeee2</A>
</m:denzai></E:Body></E:Envelope>

サーバーの返事

HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Mon, 25 Dec 2006 11:35:10 GMT
HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0
Date: Mon, 25 Dec 2006 11:35:10 GMT

Content-Type: text/xml; charset="UTF-8"
Content-Length: 474

<?xml version="1.0" encoding="UTF-8" ?>
<E:Envelope xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAPEnc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<E:Body><m:denzaiResponse xmlns:m="urn:magic.SVCTAG-6VBLS1X.denzai">
<Return xsi:type="xsd:string">eeeee2</Return></m:denzaiResponse>
</E:Body>
</E:Envelope>
=============================================
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
●java(AXIS)を利用したい理由
・MagicV9で作成したWebサービスと別の(富士通のInterstage?)Webサービスクライアント
でやり取りを行いたい為。
(詳細)
MagicV9のWebサービスエンドポート?が固定されている。
(富士通のInterstage?)Webサービスクライアントが、アクセスする先を指定している。
そこで中間にAXIS1.2のWebサーバを用意して中継を行いたい。
AXISのweb.xmlを変更して、Webサービスクライアントの指定する
サービスポートを作成をすることができた。
そのサービスクライアントから、MagicV9のWebサービスを呼びたいが困っている状態。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-12-28 18:08
http://www.google.co.jp/search?hl=ja&q=axis+http+keep-alive&lr=
本当にできるかどうかは知りませんが、一番上に出てきましたよ?
シャムウ
会議室デビュー日: 2006/12/28
投稿数: 2
投稿日時: 2006-12-29 13:33
CommonsHTTPSenderを使用する為に
 Jakarta Commons HttpClient パッケージをダウンロードしました。
ファイル名 commons-httpclient-3.0.1.jar
axis\lib の中に保存し クラスパスを設定しました。

org.apache.axis.transport.http.CommonsHTTPSenderを利用するようにして
//import java.net.*;//をやめて
import org.apache.axis.transport.http//を利用するようにしたら
コンパイルエラーがでました。

import org.apache.axis.transport.httpを利用する
ためには、client-config.wsddというファイルをセット?
するみたいなのですが
java org.apache.axis.utils.admin client-config.wsdd
エラーがでました。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/axis/utils
/admin

C:\@work\offcall>java org.apache.axis.utils.Admin client-config.wsdd
- Usage: Admin client|server <xml-file>
- Where <xml-file> looks like:
- <deploy>
- <handler name=a class=className/>
- <chain name=a flow="a,b,c" />
- <chain name=a request="a,b,c" pivot="d"
- response="e,f,g" />
- <service name=a handler=b />
- </deploy>
- <undeploy>
- <handler name=a/>
- <chain name=a/>
- <service name=a/>
- </undeploy>
- <list/>
Exception in thread "main" java.lang.IllegalArgumentException: Usage: Admin cli
ent|server <xml-file>
at org.apache.axis.utils.Admin.main(Admin.java:295)


<=====client-config.wsddの内容=====>
<?xml version="1.0" encoding="UTF-8"?>

<deployment name="commonsHTTPConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />
<transport name="local" pivot = "java:org.apache.axis.transport.local.LocalSender" />
<transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" />
</deployment>

============================

また、CommonsHTTPSenderクラスのどれを利用して
どのようにすれば
HTTP1.1に
Keep-Aliveに
なるのでしょうか?
1

スキルアップ/キャリアアップ(JOB@IT)