我正在使用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>
答案 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);