2017-06-03 3 views
1

Ich möchte einige Web-Service durch Spring-Framework erstellen, aber ich habe etwas falsch gefunden, @Autowired nicht in @Endpoint arbeiten. Bitte beachten Sie meine Code:Spring @Autowired funktioniert nicht in @Endpoint

@Endpoint 
    public class VideoEndpoint 
    { 
     private VideoService videoService; 
     @Autowired 
     public VideoEndpoint(VideoService videoService) 
     { 
      this.videoService=videoService; 
     } 

     @PayloadRoot(namespace = "http://www.skysoft.top/ws/video", localPart = "GetVideoRequest") 
     @ResponsePayload 
     public GetVideoResponse findVideoById(@RequestPayload GetVideoRequest request) 
       throws Exception 
     { 
      GetVideoResponse response = new GetVideoResponse(); 
      Video video=videoService.getVideoByAid(request.getAid()); 
      response.setVideo(video); 
      return response; 
     } 
    } 


    public interface VideoService { 

     List<Video> getVideoList(); 
     Video getVideoByAid(long aid); 
    } 


    @Service("videoService") 
    @Transactional 
    public class VideoServiceImpl implements VideoService { 
     private final Logger LOG = LoggerFactory.getLogger(this.getClass()); 
     @Autowired 
     private VideoDao videoDao; 
     @Autowired 
     private RedisCache cache; 


     @Override 
     public List<Video> getVideoList() { 
      String cache_key=RedisCache.CAHCENAME+"|getVideoList"; 
      //先去缓存中取 
      List<Video> result_cache=cache.getListCache(cache_key, Video.class); 
      if(result_cache==null){ 
       //缓存中没有再去数据库取,并插入缓存(缓存时间为60秒) 
       result_cache=videoDao.queryAll(); 
       cache.putListCacheWithExpireTime(cache_key, result_cache, RedisCache.CAHCETIME); 
       LOG.info("put cache with key:"+cache_key); 
      }else{ 
       LOG.info("get cache with key:"+cache_key); 
      } 
      return result_cache; 
     } 
    @Override 
     public Video getVideoByAid(long aid) { 
      return videoDao.queryByAid(aid); 
     } 


    } 
    This is my Spring-ws-servelet.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:sws="http://www.springframework.org/schema/web-services" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd"> 
     <context:annotation-config/> 
     <!-- 自动扫描@Endpoint注解 --> 
     <!--<bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter" />--> 
     <!--<context:component-scan base-package="com.yingjun.ssm.service" />--> 
     <context:component-scan base-package="com.yingjun.ssm.ws.endpoint" /> 
     <!-- 开启Spring WebService的注解自动扫描驱动 --> 
     <sws:annotation-driven/> 
     <!-- 动态WSDL的配置 --> 
     <sws:dynamic-wsdl id="video" portTypeName="VideoOperation" locationUri="/webservice/video" 
          targetNamespace="http://www.skysoft.top/ws/video"> 
      <sws:xsd location="classpath:wsdl/video.xsd" /> 
     </sws:dynamic-wsdl> 


    </beans> 

This is my web.xml file: 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
    version="3.1"> 

    <!--配置DispatcherServlet --> 
    <servlet> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <!-- 配置SpringMVC需要加载的配置文件 spring-xxx.xml --> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:spring/spring-*.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring-dispatcher</servlet-name> 
     <!--默认匹配所有的请求 --> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <!-- druid --> 
    <servlet> 
     <servlet-name>DruidStatView</servlet-name> 
     <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>DruidStatView</servlet-name> 
     <url-pattern>/druid/*</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>DruidWebStatFilter</filter-name> 
     <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> 
     <init-param> 
      <param-name>exclusions</param-name> 
      <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>DruidWebStatFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <servlet> 
     <servlet-name>spring-ws</servlet-name> 
     <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:spring/spring-ws-servlet.xml</param-value> 
     </init-param> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring-ws</servlet-name> 
     <url-pattern>/webservice/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

This is my spring-service.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:sws="http://www.springframework.org/schema/web-services" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd"> 
    <context:annotation-config/> 
    <!-- 自动扫描@Endpoint注解 --> 
    <!--<bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter" />--> 
    <!--<context:component-scan base-package="com.yingjun.ssm.service" />--> 
    <context:component-scan base-package="com.yingjun.ssm.ws.endpoint" /> 
    <!-- 开启Spring WebService的注解自动扫描驱动 --> 
    <sws:annotation-driven/> 
    <!-- 动态WSDL的配置 --> 
    <sws:dynamic-wsdl id="video" portTypeName="VideoOperation" locationUri="/webservice/video" 
         targetNamespace="http://www.skysoft.top/ws/video"> 
     <sws:xsd location="classpath:wsdl/video.xsd" /> 
    </sws:dynamic-wsdl> 


</beans> 

ich die Web-Service durch SoapUI fordern, aber es immer schief gehen:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoEndpoint' defined in file [C:\Users\PAN\IdeaProjects\beauty_ssm\target\beauty_ssm_0.0.1-SNAPSHOT_20170603\WEB-INF\classes\com\yingjun\ssm\ws\endpoint\VideoEndpoint.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.yingjun.ssm.service.VideoService]: : No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1326) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1072) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:967) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 39 common frames omitted 
20:38:34.634 [http-nio-8080-exec-7] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Destroying singletons in org.s[email protected]552e7868: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor,org.springframework.context.event.internalEventListenerFactory,videoEndpoint,org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping#0,org.springframework.ws.soap.server.endpoint.mapping.SoapActionAnnotationMethodEndpointMapping#0,org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping#0,org.springframework.ws.server.endpoint.adapter.method.dom.DomPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.SourcePayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.jaxb.XmlRootElementPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.method.jaxb.JaxbElementPayloadMethodProcessor#0,org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter#0,org.springframework.ws.soap.server.endpoint.SoapFaultAnnotationExceptionResolver#0,org.springframework.ws.soap.server.endpoint.SimpleSoapExceptionResolver#0,org.springframework.xml.xsd.SimpleXsdSchema#0,video,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor]; root of factory hierarchy 
20:38:34.635 [http-nio-8080-exec-7] ERROR o.s.w.t.h.MessageDispatcherServlet - Context initialization failed 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoEndpoint' defined in file [C:\Users\PAN\IdeaProjects\beauty_ssm\target\beauty_ssm_0.0.1-SNAPSHOT_20170603\WEB-INF\classes\com\yingjun\ssm\ws\endpoint\VideoEndpoint.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.yingjun.ssm.service.VideoService]: : No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.yingjun.ssm.service.VideoService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1326) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1072) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:967) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 39 common frames omitted 

Ich habe viele Lösungen gefunden, aber nicht funktioniert.

+0

Ich nehme alle diese Klassen haben das Paket von „com.yingjun.ssm.ws.endpoint "? Es scheint, VideoServiceImpl-Klasse ist nicht registriert? –

+0

Danke. Es gibt viele Konfigurationsdateien in meinem Projekt, z. B. spring-service.xml. Diese Datei registriert die Serviceklasse VideoServiceImpl. Aber es scheint, dass die Spring-Service.xml-Klassen, die vom @Endpoint nicht gefunden werden, sehr merkwürdig sind. –

+0

post your web.xml –

Antwort

0

Ich bin kein Experte, aber ich denke, dass Ihre Endpunkt-Klasse nicht von Ihrem ApplicationContext bekannt ist. setzen diese an der Spitze Ihrer web.xml

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-*.xml</param-value> 
</context-param> 

jedes * -servlet.xml Datei, die Sie definieren einen anderen Kontext haben, die ‚Context‘ einen übergeordneten Kontext erstellen, damit Sie Beans zwischen Kontexten teilen können.

wenn das nicht versuchen, funktioniert das Hinzufügen dieser zu Ihrem Frühlings-ws-servelet.xml innerhalb des <beans> Tag

<import resource="spring-service.xml"/> 
+0

Dies ist die Verkabelung über XML, die @ Annotion als Alternative verwendet. Wenn Sie sich den Stacktrace ansehen, heißt es 'Keine qualifizierende Bean vom Typ [com.yingjun.ssm.service.VideoService]'. Autowired sucht nach Typabgleich. Ich denke stark @annocation die Schnittstelle wird funktionieren. –

+0

@David Florez Danke. Aber in meinem Projekt gibt es keine applicationContext.xml, in meiner spring-service.xml. –

+0

@ 孙 盼盼 Ich änderte meine Antwort mit der neuen Info –