Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBOSS上的apache cxf客户端的Web服务请求(>;8KB)失败-HTTP响应';411:所需长度';_Java_Spring_Jboss_Http Headers_Cxf - Fatal编程技术网

Java JBOSS上的apache cxf客户端的Web服务请求(>;8KB)失败-HTTP响应';411:所需长度';

Java JBOSS上的apache cxf客户端的Web服务请求(>;8KB)失败-HTTP响应';411:所需长度';,java,spring,jboss,http-headers,cxf,Java,Spring,Jboss,Http Headers,Cxf,web应用程序正在使用apache cxf客户端向远程web服务发送请求 当这个web应用程序部署到Tomcat上时,一切都正常 当此web应用程序部署在JBOSS上且正文(信封)大小大于8KB时,请求发送失败;已生成以下错误: 17:57:15,387 WARNING [org.apache.cxf.phase.PhaseInterceptorChain (ConnectorExecutor-21) Interceptor for xxx#{http://cxf.apache.org/jaxw

web应用程序正在使用apache cxf客户端向远程web服务发送请求

当这个web应用程序部署到Tomcat上时,一切都正常

当此web应用程序部署在JBOSS上且正文(信封)大小大于8KB时,请求发送失败;已生成以下错误:

17:57:15,387 WARNING [org.apache.cxf.phase.PhaseInterceptorChain (ConnectorExecutor-21) Interceptor for xxx#{http://cxf.apache.org/jaxws/dispatch}Invoke has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Could not send Message.
  at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
  at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:531)
  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:461)
  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:364)
  at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:317)
  at org.apache.cxf.endpoint.ClientImpl.invokeWrapped(ClientImpl.java:352)
  at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:381)
  at org.apache.cxf.jaxws.DispatchImpl.invoke(DispatchImpl.java:241)
  ...
  at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.7.0_45]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_45]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_45]
  at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_45]
Caused by: org.apache.cxf.transport.http.HTTPException: HTTP response '411: Length Required' when communicating with ...
  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1554)
  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1493)
  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1401)
  at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
  at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:648)
  at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
  ... 17 more
HTTP流模式似乎已切换到分块

你对第一个假设怎么看

可以在正式的ApacheCXF文档中找到,可以提供一个spring配置文件来更改cxf客户端行为

配置文件的内容是什么

我回答我自己的问题,因为经过额外的测试,下面描述的配置对我来说很有效

首先,产生错误的原因可能是cxf客户端自动切换到分块传输模式;实际上,此回答中描述的配置更改强制cxf客户端不使用分块,然后成功发送信封大小大于8KB的请求

根据cxf apache官方文档,可以使用Spring配置文件更改cxf客户端行为:

无需更改java客户机的代码行

-1-cxf配置文件 创建一个cxf.xmlspring配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <http-conf:conduit name="*.http-conduit">
        <http-conf:client AllowChunking="false"/>
    </http-conf:conduit>
</beans>
下面是Linux/UNIX的一个示例:

-3-重新启动JBOSS -4-测试 -5-忽略发送请求时生成的警告消息 我认为应该找到XML模式名称空间的NamespaceHandler,因为下面有一个jar:

C:/JBoss-7.1.1.Final/modules/org/apache/cxf/main/cxf-rt-transports-http-2.4.6.jar
无论如何,webservice请求已成功发送


这个解决方案已经在Ubuntu和Windows上进行了测试。
-Dcxf.config.file.url=file:///home/jay/as/JBoss-7.1.1.Final/standalone/configuration/cxf.xml
16:23:03,388 INFO  [org.apache.cxf.bus.spring.ControlledValidationXmlBeanDefinitionReader] (ConnectorExecutor-1) Loading XML bean definitions from URL [file:/C:/JBoss-7.1.1.Final/standalone/configuration/cxf.xml]
16:23:06,535 WARNING [org.jboss.wsf.stack.cxf.client.configuration.JBossWSSpringBusFactory] (ConnectorExecutor-1) INITIAL_APP_CONTEXT_CREATION_FAILED_MSG: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/transports/http/configuration]
Offending resource: URL [file:/C:/JBoss-7.1.1.Final/standalone/configuration/cxf.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68) [spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) [spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80) [spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:316) [spring-beans-3.1.2.RELEASE.jar:3.1.2.RELEASE]
C:/JBoss-7.1.1.Final/modules/org/apache/cxf/main/cxf-rt-transports-http-2.4.6.jar