2017-09-11 3 views
1

Ich habe Soap-Service mit Apache CXF erstellt, ich habe einen @ WebService erstellt. In diesem Service muss ich den @ Service injizieren. Wenn ich @Autowire diesen Dienst installiere, bleibt diese Null.Spring + Apache CXF @Autowire im Dienst immer Null

Endpoint initialisiert

@Bean 
    public Endpoint endpointToken() { 
     EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken()); 



     endpoint.publish("/Token"); 

     return endpoint; 
    } 

Serivce Klasse

@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; 
    } 
} 

Gibt es trotzdem, ich meine Service injizieren kann.

+0

Können Sie Ihre AuthService Klasse zeigen? – Plog

+0

// @ Komponente öffentliche Klasse AuthService { //// @Autowired privater AuthenticationManager authenticationManager; // @ Autowired private UserDetailsService userDetailsService; // @ Autowired privater TokenService generateToken; } –

Antwort

2

Dies geschieht, weil Sie eine neue Instanz von GeneratingLoginToken in Ihrem Endpoint Bean erstellen:

EndpointImpl endpoint = new EndpointImpl(bus, new GenerateLoginToken()); 

Das bedeutet Frühling nicht über Ihre neue Instanz nicht kennt, da es nicht ein Spring-Bean selbst ist. Stattdessen sollten Sie GenerateLoginToken und verwenden Sie die Spring-Bean Instanz dieser Klasse autowire, die die Bohnen alle richtig es verdrahtet haben sollte und daher AuthService nicht null sein sollte:

@Autowire 
GenerateLoginToken generateLoginToken; 

@Bean 
public Endpoint endpointToken() { 
    EndpointImpl endpoint = new EndpointImpl(bus, generateLoginToken); 



    endpoint.publish("/Token"); 

    return endpoint; 
}