分块输入流无法接收有效的块大小:<! - ?xmlversion =“1.0” - >

时间:2012-11-20 13:44:10

标签: java web-services soap ant axis

我正在使用Axis 1.4版本并使用 org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask 来生成客户端代码。但是,当我尝试拨打电话时出现以下错误,请提前致谢

  java.io.IOException: Chunked input stream failed to receive valid chunk size:<?xmlversion="1.0"
        at org.apache.axis.transport.http.ChunkedInputStream.getChunked(ChunkedInputStream.java:155)
        at org.apache.axis.transport.http.ChunkedInputStream.read(ChunkedInputStream.java:87)
        at java.io.FilterInputStream.read(Unknown Source)
        at org.apache.axis.SOAPPart.getAsBytes(SOAPPart.java:453)
        at org.apache.axis.SOAPPart.getAsString(SOAPPart.java:559)
        at org.apache.axis.Message.getSOAPPartAsString(Message.java:412)
        at org.apache.axis.handlers.LogHandler.logMessages(LogHandler.java:89)
        at org.apache.axis.handlers.LogHandler.invoke(LogHandler.java:68)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:190)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)

,build.xml中的目标是,

<target name="generate-java">   
            <wsdl2java 
                url="${resources.dir}/2.0/popsp.wsdl" 
                debug="true" 
                printstacktraceonfailure="true" 
                output="src">
                <mapping namespace="https://www.dhl.au/popweb/gw/ws/schema/2.0/popws" 
                         package="com.soap.autogen"/>
            </wsdl2java>  
      </target>

2 个答案:

答案 0 :(得分:1)

为了解决后面看到这个问题的用户,我找到了此异常的根本原因。 Axis 1.4使用HTTP 1.0发送“NoN Chunked Streams”中的数据。 如果这些消息命中服务器HTTP 1.1,其中预期的数据在“分块流”中可能会出现此错误。更多关于此编码的信息可以在chunked transfer encoding中找到。

我已经解决了(没有升级Axis),添加了一个名为deploy-client.wssd的文件,该文件包含以下几行。

<deployment
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"/> 
</deployment>

这将告诉Axis使用,commonsHTTPSender默认使用HTTP 1.1。希望它可以帮助某人。

答案 1 :(得分:0)

按照 Sasi 的说明创建 deploy-client.wsdd 文件。

<deployment
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"/> 
</deployment>

添加依赖到你的 pom 文件

<dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-transport-http</artifactId>
        <version>1.7.7</version>
</dependency>

然后在代码中寻址文件

System.setProperty("axis.ClientConfigFile", path-of-your-file);