- - PR -
AXISで「java.io.IOException: Broken pipe」が発生する
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-04-11 11:33
SOAPによるクライアント⇔サーバ間の通信において、以下の現象
で悩んでおります。 <現象> クライアントが特定のSOAPメッセージを受信すると、サーバ側の Webサーバ(Apache)のアクセスログに、下記のエラーが出力される。 -------------------------------------------------------------------- [dd/Apr/yyyy:hh:mm:ss +0900] "POST /test/TestService HTTP/1.0" 500 0 -------------------------------------------------------------------- 本現象が発生するまでの流れです。 @ クライアントがSOAPメッセージを送信(リクエスト) A @を受信したサーバがSOAPメッセージを返信(レスポンス) B クライアントがAのSOAPメッセージを受信 C クライアントがAのSOAPメッセージを解析⇒UTFDataFormatException発生 D クライアントがサーバとのコネクションを強制切断 E サーバがSOAPレスポンスを再送信(想定する応答が得られないため?) F サーバ側でIOException:Broken pipe が発生(既にコネクションが切断されているため?) G Apacheのaccess_logにエラー500を出力 CですがこれはXMLのパーサを、Axisに付属のパーサ(xerces.jar)に切り替えることで エラーは発生しなくなりました。 #結果的には、この対処で本現象は発生しなくなる。 気になっているのはD、Eです。 Dですが、SOAPクライアントは、WSDL2Javaにより、WSDLから自動生成しています。 今回のように、受信したSOAPメッセージの解析段階で例外が発生した場合、コネクション を強制切断をしているが、これはAxisの仕様なのか。 最後にEですが、クライアント側がコネクションを強制切断した後、SOAPメッセージ を再送信しているが、これもAxisの仕様なのか。 本現象につきまして、対処方又は詳細情報をお持ちの方いらっしゃいましたら ご教授頂けますでしょうか。 <動作環境> 【クライアント】 OS:Windows XP Webサーバ:Tomcat-5.0 SOAPコンテナ:Axis-1_1 Java:1.3.1_10 XMLパーサ:xercesImpl.jar・xmlParserAPIs.jar ※XMLパーサはjakarta-tomcat-5.0に付属 【サーバ】 OS:Solaris Webサーバ:apache-1.3.33+Tomcat-4.0.4(mod_jk2) SOAPコンテナ:Axis-1_1 Java:1.3.1_04 以下、詳細情報です。 CでSOAPメッセージの解析に失敗した際の、クライアント側例外 ----------------------------------------------------------------------- AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server. userException faultSubcode: faultString: java.io.UTFDataFormatException: Expected byte 3 of 3-byte UTF-8 sequence. faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace: java.io. UTFDataFormatException: Expected byte 3 of 3-byte UTF-8 sequence. at org.apache.xerces.impl.io.UTF8Reader.expectedByte(Unknown Source) at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source) at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source) at org.apache.xerces.impl.XMLEntityScanner.scanContent(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:242) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538) at org.apache.axis.Message.getSOAPEnvelope(Message.java:376) at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:675) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:128) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:180) at org.apache.axis.client.Call.invokeEngine(Call.java:2564) at org.apache.axis.client.Call.invoke(Call.java:2553) at org.apache.axis.client.Call.invoke(Call.java:2248) at org.apache.axis.client.Call.invoke(Call.java:2171) at org.apache.axis.client.Call.invoke(Call.java:1691) ----------------------------------------------------------------------- Eで「IOException:Broken pipe」が発生した際の例外 ----------------------------------------------------------------------- AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: java.io.IOException: Broken pipe faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace: java.io.IOException: Broken pipe at java.net.SocketOutputStream.socketWrite(Native Method) at java.net.SocketOutputStream.write(SocketOutputStream.java:91) at org.apache.ajp.Ajp13.send(Ajp13.java:525) at org.apache.ajp.RequestHandler.doWrite(RequestHandler.java:520) at org.apache.ajp.Ajp13.doWrite(Ajp13.java:399) at org.apache.ajp.tomcat4.Ajp13OutputStream.write(Ajp13OutputStream.java:79) at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674) at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764) at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:647) at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:652) at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java:312) at org.apache.axis.attachments.DimeBodyPart.send(DimeBodyPart.java:314) at org.apache.axis.attachments.DimeBodyPart.write(DimeBodyPart.java:258) at org.apache.axis.attachments.DimeMultiPart.write(DimeMultiPart.java:85) at org.apache.axis.attachments.AttachmentsImpl.writeContentToStream(AttachmentsImpl.java:518) at org.apache.axis.Message.writeTo(Message.java:447) at org.apache.axis.transport.http.AxisServlet.sendResponse(AxisServlet.java:1018) at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:895) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:339) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:458) at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:551) at java.lang.Thread.run(Thread.java:479) ----------------------------------------------------------------------- |
1