2017-12-19 8 views
1

Ich habe folgt das Getting Started - ein SOAP-Webservice Verbrauchen (https://spring.io/guides/gs/consuming-web-service/) einen bestimmten Web-Service zu konsumieren und alles funktioniert gut:Verbrauchen einen SOAP Webservice Fehlers (Nr. Einweiser registriert prüfen Konfiguration WebServiceTemplate)

@Configuration 
public class PMConfiguration { 
    @Bean 
    public Jaxb2Marshaller marshaller() { 
     Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
     // this package must match the package in the <generatePackage> specified in 
     // pom.xml 
     marshaller.setContextPath("com.inteligenciaweb.wsdl"); 
     return marshaller; 
    } 

    @Bean 
    public ProcuraPMPorREClient procuraPMPorREClient(Jaxb2Marshaller marshaller) { 
     ProcuraPMPorREClient client = new ProcuraPMPorREClient(); 
     client.setDefaultUri("http://tempuri.org/procuraPMPorRE"); 
     client.setMarshaller(marshaller); 
     client.setUnmarshaller(marshaller); 
     return client; 
    } 

}

Auftraggeber::

public class ProcuraPMPorREClient extends WebServiceGatewaySupport { 

    private static final Logger log = LoggerFactory.getLogger(ProcuraPMPorRE.class); 


    public ProcuraPMPorREResponse getPMPorRE(Integer RE) { 

     ProcuraPMPorRE request = new ProcuraPMPorRE(); 
     request.setPMRENum(RE); 

     log.info("Requesting PM for " + RE); 

     ProcuraPMPorREResponse response = (ProcuraPMPorREResponse) getWebServiceTemplate() 
       .marshalSendAndReceive("http://webservices.externo.policiamilitar.sp.gov.br:8071/router/wsscpm/basic", 
         request, 
         new SoapActionCallback("http://tempuri.org/procuraPMPorRE")); 

     return response; 
    } 

} 
ich habe die Konfigurationsklasse gemacht 210

In der Klasse Anwendung:

@SpringBootApplication 
public class InteligenciawebApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(InteligenciawebApplication.class, args); 
    } 

    @Bean 
    CommandLineRunner lookup(ProcuraPMPorREClient pm) { 
     return args -> { 
      Integer re = 123456;   
      ProcuraPMPorREResponse response = pm.getPMPorRE(re); 
      System.err.println(response.getProcuraPMPorREResult().getNomeBancoPM()); 
     }; 
    } 
} 

Wenn ich eine Anwendung zu starten, die weservice Berufung funktioniert gut, so kann ich das Ergebnis an der Konsole sehen. Ich habe versucht, die gleiche Logik zu verwenden, um diesen Webdienst in einer anderen Klasse aufzurufen, funktioniert aber nicht. Zum Beispiel habe ich einen Test an der Controller-Klasse gemacht:

@RequestMapping(value = "/soap", method = RequestMethod.GET) 
public String testeSoap() { 
    ProcuraPMPorREClient pm = new ProcuraPMPorREClient(); 
    ProcuraPMPorREResponse response = pm.getPMPorRE(123456); 
    System.out.println(response.getProcuraPMPorREResult().getNomePM()); 
    return null; 
} 

In diesem Fall wird der Webservice nicht funktioniert und das System zeigt diese Fehlermeldung: java.lang.IllegalStateException: nicht vorhanden Einweiser registriert. Überprüfen Sie die Konfiguration von WebServiceTemplate. Ich weiß nicht warum, aber der Webservice funktioniert an einem bestimmten Ort und funktioniert nicht im anderen. Wenn jemand weiß was passiert, freue ich mich! Vielen Dank!

+1

Wie ist 'neue ProcuraPMPorREClient();' das gleiche wie mit einer vollständig konfigurierten Bean von Frühling ... –

+0

Oh, danke! Ich habe den ProcuraPMPorREClient geändert pm = new ProcuraPMPorREClient(); zu einem @Autowired ProcuraPMPorREClient pm und jetzt funktioniert es! Vielen Dank! –

Antwort

1

In diesem Fall habe ich ein neues Objekt im Controller instanziieren kann nicht, wie ich getan habe:

ProcuraPMPorREClient pm = new ProcuraPMPorREClient(); 

Statt dessen, ich brauche eine @Autowired-Objekt zu erstellen, wie folgt aus:

@Autowired ProcuraPMPorREClient pm; 

Nach, ich nenne nur die gleichen Routinen:

ProcuraPMPorREResponse response = pm.getPMPorRE(123456); 
System.out.println(response.getProcuraPMPorREResult().getNomePM()); 

Das hat gut funktioniert.

Verwandte Themen