找到Spring资源但没有加载bean

时间:2015-04-13 18:37:01

标签: java spring

我正在使用导入资源从另一个项目导入spring xml配置文件。显然找到了资源,因为没有错误消息说它不是,但没有任何bean被加载。我有什么问题吗?我应该注意,当我在eclipse中运行我的集成测试时,一切正常,但是当在maven构建中运行相同的集成测试时,它会爆炸。

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<import resource="classpath*:httpclient-4x.xml" />
<context:component-scan base-package="com.mycompany.data" />

<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath*:properties/client.${deployment.env}.properties</value>
         </list>
    </property>
         <property name="ignoreResourceNotFound" value="false" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="searchSystemEnvironment" value="true" />
</bean>

<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" />

</beans>

的HttpClient-4x.xml

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<bean id="secureRestTemplate" class="org.springframework.web.client.RestTemplate">
    <constructor-arg>
        <ref bean="secureClientHttpRequestFactory" />
    </constructor-arg>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <util:constant static-field="org.springframework.http.MediaType.APPLICATION_XML" />
                        <util:constant static-field="org.springframework.http.MediaType.APPLICATION_JSON" />
                        <util:constant static-field="org.springframework.http.MediaType.TEXT_PLAIN" />
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <util:constant static-field="org.springframework.http.MediaType.MULTIPART_FORM_DATA" />
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper" ref="jacksonObjectMapper" />
            </bean>
        </list>
    </property>
</bean>

<bean id="secureClientHttpRequestFactory" class="com.cobalt.inventory.security.PreemptiveBasicAuthClientHttpRequestFactory">
    <constructor-arg>
        <ref bean="secureCloseableHttpClient" />
    </constructor-arg>
</bean>

<bean id="secureCloseableHttpClient" factory-bean="secureHttpClientBuilder" factory-method="build" />

<bean id="secureHttpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create">
    <property name="defaultCredentialsProvider" ref="credentialsProvider" />
    <property name="defaultSocketConfig" ref="socketConfig" />
    <property name="defaultRequestConfig" ref="requestConfig" />
    <property name="userAgent" value="${http.user.agent: CDK Cobalt invJava}" />
    <property name="maxConnPerRoute" value="${http.max.connections.per.route:100}" />
    <property name="maxConnTotal" value="${http.max.connections:100}" />
</bean>

<bean id="credentialsProvider" class="org.apache.http.impl.client.BasicCredentialsProvider" />

<bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
    <constructor-arg index="0" name="userName" value="validUsername" />
    <constructor-arg index="1" name="password" value="validPassword" />
</bean>

<bean id="socketConfigBuilder" class="org.apache.http.config.SocketConfig.Builder">
    <property name="soKeepAlive" value="true" />
    <property name="soTimeout" value="${http.socket.timeout:10000}" />
</bean>
<bean id="socketConfig" factory-bean="socketConfigBuilder" factory-method="build" />

<bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig.Builder">
    <property name="connectTimeout" value="${http.connection.timeout:10000}" />
    <property name="socketTimeout" value="${http.socket.timeout:10000}" />
    <property name="cookieSpec">
        <util:constant static-field="org.apache.http.client.config.CookieSpecs.IGNORE_COOKIES" />
    </property>
</bean>
<bean id="requestConfig" factory-bean="requestConfigBuilder" factory-method="build" />


<!-- For accessing common authorization service -->

<bean id="commonAuthzSecureRestTemplate" class="org.springframework.web.client.RestTemplate">
    <constructor-arg>
        <ref bean="commonAuthzSecureClientHttpRequestFactory" />
    </constructor-arg>
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <util:constant static-field="org.springframework.http.MediaType.APPLICATION_XML" />
                        <util:constant static-field="org.springframework.http.MediaType.APPLICATION_JSON" />
                        <util:constant static-field="org.springframework.http.MediaType.TEXT_PLAIN" />
                    </list>
                </property>
            </bean>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <util:constant static-field="org.springframework.http.MediaType.MULTIPART_FORM_DATA" />
                    </list>
                </property>
            </bean>
                <bean id="jsonMessageConverter"
                    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter ">
                    <property name="supportedMediaTypes">
                        <list>
                            <bean id="jsonMediaTypeApplicationJson" class="org.springframework.http.MediaType">
                                <constructor-arg value="application" />
                                <constructor-arg value="json" />
                            </bean>
                        </list>
                    </property>
                </bean>
        </list>
    </property>
</bean>

<bean id="commonAuthzSecureClientHttpRequestFactory" class="com.mycompany.security.PreemptiveBasicAuthClientHttpRequestFactory">
    <constructor-arg>
        <ref bean="commonAuthzSecureCloseableHttpClient" />
    </constructor-arg>
</bean>

<bean id="commonAuthzSecureCloseableHttpClient" factory-bean="commonAuthzSecureHttpClientBuilder" factory-method="build" />

<bean id="commonAuthzSecureHttpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create">
    <property name="defaultCredentialsProvider" ref="commonAuthzCredentialsProvider" />
    <property name="defaultSocketConfig" ref="commonAuthzSocketConfig" />
    <property name="defaultRequestConfig" ref="commonAuthzRequestConfig" />
    <property name="userAgent" value="${http.user.agent: userAgent}" />
    <property name="maxConnPerRoute" value="${http.max.connections.per.route:100}" />
    <property name="maxConnTotal" value="${http.max.connections:100}" />
</bean>

<bean id="commonAuthzCredentialsProvider" class="org.apache.http.impl.client.BasicCredentialsProvider" />

<bean id="commonAuthzCredentials" class="org.apache.http.auth.UsernamePasswordCredentials">
    <constructor-arg index="0" name="userName" value="${common_services.iam.remoting.user:user" />
    <constructor-arg index="1" name="password" value="${common_services.iam.remoting.password:password}" />
</bean>

<bean id="commonAuthzSocketConfigBuilder" class="org.apache.http.config.SocketConfig.Builder">
    <property name="soKeepAlive" value="true" />
    <property name="soTimeout" value="${http.socket.timeout:10000}" />
</bean>
<bean id="commonAuthzSocketConfig" factory-bean="commonAuthzSocketConfigBuilder" factory-method="build" />

<bean id="commonAuthzRequestConfigBuilder" class="org.apache.http.client.config.RequestConfig.Builder">
    <property name="connectTimeout" value="${http.connection.timeout:10000}" />
    <property name="socketTimeout" value="${http.socket.timeout:10000}" />
    <property name="cookieSpec">
        <util:constant static-field="org.apache.http.client.config.CookieSpecs.IGNORE_COOKIES" />
    </property>
</bean>
<bean id="commonAuthzRequestConfig" factory-bean="commonAuthzRequestConfigBuilder" factory-method="build" />

<util:list id="spel-configuration">
    <value>#{credentialsProvider.setCredentials(T(org.apache.http.auth.AuthScope).ANY, credentials)}</value>
    <value>#{commonAuthzCredentialsProvider.setCredentials(T(org.apache.http.auth.AuthScope).ANY, commonAuthzCredentials)} </value>
</util:list>

</beans>

我为Spring启用了调试日志记录,并找到了以下日志条目:

[2015-04-13 10:46:56,818][DEBUG][org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loaded 0 bean definitions from location pattern [classpath*:httpclient-4x.xml]
[2015-04-13 10:46:56,818][DEBUG][org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader] - Imported 0 bean definitions from URL location [classpath*:httpclient-4x.xml]

我无法控制httpclient-4x.xml的内容,我只是引用它。

根据请求,这里是CvsDataClientImpl:     包com.mycompany.data;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import com.mycompany.utility.ConditionalUtils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

@Component
public class CvsDataClientImpl implements CvsDataClient<JsonNode> {

private static final int MAX_PAGE_SIZE = 100;

private static final String V1 = "/rest/v1.0/vehicles";

@Resource(name = "secureRestTemplate")
private RestTemplate restTemplate;

@Resource(name = "jsonVehiclesNodeMerger")
private JsonVehiclesNodeMerger nodeMerger;

@Value("${inv.vehicle-app.context:inventoryWebApp}")
private String vehicleAppContextPath;

@Value("${services.remoting.url:http://localhost:10080}")
private String remotingUrl;

@Override
public JsonNode read(String urlParameters) {
    validateUrlParameters(urlParameters);
    ResponseEntity<JsonNode> response = restTemplate.getForEntity(buildBaseRestUrl() + "?" + urlParameters, JsonNode.class);
    return response.getBody();
}

@Override
public JsonNode readAll(String urlParameters) {
    return readAll(urlParameters, null);
}

public JsonNode readAll(String urlParameters, Integer pageSize) {
    int offset = 0;
    int actualPageSize = pageSize != null ? pageSize : MAX_PAGE_SIZE;
    JsonNode latestResult = null;
    JsonNode baseResult = null;
    do {
        String extendedUrlParameters = buildUrlParameters(urlParameters, offset, actualPageSize);
        latestResult = read(extendedUrlParameters);
        baseResult = merge(latestResult, baseResult);
        offset += actualPageSize;
    } while (latestResult.get("searchResult").get("vehicles") != null);
    return baseResult;

}

private JsonNode merge(JsonNode latestResult, JsonNode baseResult) {
    JsonNode merged = null;
    if (baseResult == null) {
        merged = latestResult;
    } else {
        merged = nodeMerger.merge(latestResult, baseResult);
    }
    JsonNode searchResult = merged.get("searchResult");
    ((ObjectNode) searchResult).remove("summary");
    return merged;
}

private String buildUrlParameters(String urlParameters, int offset, int pageSize) {
    String parameters = urlParameters;
    parameters += "&limit=" + pageSize + "&offset=" + offset;
    return parameters;
}

private String buildBaseRestUrl() {
    return remotingUrl + vehicleAppContextPath + V1;
}

private void validateUrlParameters(String urlParameters) {
    if (ConditionalUtils.isNullOrEmpty(urlParameters) || urlParameters.indexOf("inventoryOwner") < 0 && urlParameters.indexOf("storeId") < 0) {
        throw new IllegalArgumentException("Must provide at least an inventory owner or store ID");
    }

}

void setVehicleAppContextPath(String contextPath) {
    vehicleAppContextPath = contextPath;
}

void setRemotingUrl(String remotingUrl) {
    this.remotingUrl = remotingUrl;
}
}

1 个答案:

答案 0 :(得分:0)

在讨论聊天之后,minion和我发现httpclient-4x.xml由于某种原因未包含在外部项目的构建jar中。现在我需要对此进行调查,但这是另一个故事。 : - )