Spring + Apache CXF @Autowire 在服务中始终为空
Spring + Apache CXF @Autowire in the service always null
我已经使用 Apache CXF 创建了 soap 服务,我已经创建了一个@WebService。在该服务中,我需要注入@Service。当我 @Autowire 该服务时,该实例保持为空。
端点已初始化
@Bean
public Endpoint endpointToken() {
EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken());
endpoint.publish("/Token");
return endpoint;
}
服务Class
@WebService(serviceName = "GenerateToken", portName = "TokenPort",
targetNamespace = "http://service.ws.samp",
endpointInterface = "com.web.sigel.ws.soap.webServices.GenerateToken")
@Service("AuthService")
public class GenerateLoginToken implements GenerateToken {
@Autowired
private AuthService authService; //this remains Null whenever i make a call.
@Override
@RequestWrapper(localName = "loginRequest", targetNamespace = "http://service.ws.samp", className = "com.web.sigel.ws.soap.security.LoginRequest")
public LoginResponse generateToken(LoginRequest loginRequest) {
LoginResponse loginResponse = new LoginResponse();
String token = authService.createAuthToken(loginRequest);
loginResponse.setToken(token);
return loginResponse;
}
}
反正有没有,我可以注入我的服务。
发生这种情况是因为您正在端点 bean 中创建 GeneratingLoginToken 的新实例:
EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken());
这意味着 Spring 不知道您的新实例,因为它本身不是 Spring bean。相反,您应该自动装配 GenerateLoginToken 并使用此 class 的 Spring bean 实例,它应该正确连接所有 bean,因此 AuthService 不应为空:
@Autowire
GenerateLoginToken generateLoginToken;
@Bean
public Endpoint endpointToken() {
EndpointImpl endpoint = new EndpointImpl(bus, generateLoginToken);
endpoint.publish("/Token");
return endpoint;
}
我已经使用 Apache CXF 创建了 soap 服务,我已经创建了一个@WebService。在该服务中,我需要注入@Service。当我 @Autowire 该服务时,该实例保持为空。
端点已初始化
@Bean
public Endpoint endpointToken() {
EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken());
endpoint.publish("/Token");
return endpoint;
}
服务Class
@WebService(serviceName = "GenerateToken", portName = "TokenPort",
targetNamespace = "http://service.ws.samp",
endpointInterface = "com.web.sigel.ws.soap.webServices.GenerateToken")
@Service("AuthService")
public class GenerateLoginToken implements GenerateToken {
@Autowired
private AuthService authService; //this remains Null whenever i make a call.
@Override
@RequestWrapper(localName = "loginRequest", targetNamespace = "http://service.ws.samp", className = "com.web.sigel.ws.soap.security.LoginRequest")
public LoginResponse generateToken(LoginRequest loginRequest) {
LoginResponse loginResponse = new LoginResponse();
String token = authService.createAuthToken(loginRequest);
loginResponse.setToken(token);
return loginResponse;
}
}
反正有没有,我可以注入我的服务。
发生这种情况是因为您正在端点 bean 中创建 GeneratingLoginToken 的新实例:
EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken());
这意味着 Spring 不知道您的新实例,因为它本身不是 Spring bean。相反,您应该自动装配 GenerateLoginToken 并使用此 class 的 Spring bean 实例,它应该正确连接所有 bean,因此 AuthService 不应为空:
@Autowire
GenerateLoginToken generateLoginToken;
@Bean
public Endpoint endpointToken() {
EndpointImpl endpoint = new EndpointImpl(bus, generateLoginToken);
endpoint.publish("/Token");
return endpoint;
}