- - PR -
JAVA WEBサービスへのアクセス HTTP/1.1 Keep-Aliveにする方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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サービスを呼びたいが困っている状態。 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
|
投稿日時: 2006-12-28 18:08
http://www.google.co.jp/search?hl=ja&q=axis+http+keep-alive&lr=
本当にできるかどうかは知りませんが、一番上に出てきましたよ? |
|
投稿日時: 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