我现在正在努力构建一个休息服务,但是使用默认的connectionManager(SimpleHttpConnectionManager),我只能在长期事务处理方法中维持一个连接。所以我尝试使用MultiThreadedHttpConnectionManager初始化bean
我的pom:
<properties>
<resteasy.version>2.1.0.GA</resteasy.version>
<spring.version>3.0.5.RELEASE</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-spring</artifactId>
<version>${resteasy.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>${resteasy.version}</version>
<scope>provided</scope>
</dependency>
我的applicationContext.xml
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"
p:maxConnectionsPerHost="10"
p:maxTotalConnections="20"/>
</constructor-arg>
</bean>
<bean id="myRestService"
class="org.jboss.resteasy.client.spring.RestClientProxyFactoryBean"
p:serviceInterface="com.me.service.myRestService"
p:baseUri="${serviceNameUrl}"
p:httpClient-ref="restHttpClient"/>
但是当我启动jboss 6服务器时,我遇到以下异常:
09:37:44,774 ERROR [ContextLoader] Context initialization failed: org.springframework.beans.factory.BeanCreationException:nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.me.service.myRestService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Related cause: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'myRestService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException:
Failed to convert property value of type 'org.apache.commons.httpclient.HttpClient' to required type 'org.apache.commons.httpclient.HttpClient' for property 'httpClient';
nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.apache.commons.httpclient.HttpClient] to required type [org.apache.commons.httpclient.HttpClient] for property 'httpClient':
no matching editors or conversion strategy found
我尝试搜索resteasy包的依赖版本。但是必需的commons-httpclient是相同的(版本3.1)。那么为什么“HttpClient”无法转换为“HttpClient”?
答案 0 :(得分:1)
最后得到这个工作,问题是我添加了第三方依赖:
<dependency>
<groupId>net.java.dev.jets3t</groupId>
<artifactId>jets3t</artifactId>
<version>0.8.0</version>
</dependency>
但我没有说明:
<scope>provided</scope>
这将导致commons-httpclient-3.1.jar将在最终的war文件中得到遵守。
同时,我在{jboss_home} / server / default / lib目录中添加了commons-httpclient-3.1.jar。因此jboss classloader将在启动时加载httpclient,并且在加载这些bean时,将从包中加载httpclient,这将导致上述异常。
所以总是要注意那些第三方依赖,我认为90%的那些不能从同一个Object转换为相同的Object异常是由于这个重复的加载器问题引起的。