I've followed the Getting Started - Consuming a SOAP web service (https://spring.io/guides/gs/consuming-web-service/) to consume a specific web service and everything works well:
I've made the configuration class:
@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;
}
}
Client:
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;
}
}
At the class Application:
@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());
};
}
}
When I start a application, the weservice calling works fine, so I can see the result at the console. I've tried to use the same logic to call this web service in other class, but isn't working. For instance, I've made a test at the Controller Class:
@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 this case, the webservice doesn't work and the system show this error message: java.lang.IllegalStateException: No marshaller registered. Check configuration of WebServiceTemplate. I don't know why, but the webservice works in a specific place and doesn't work in the other. If someone knows what happen, I apreciate! Thanks!
In this case I cant instanciate a new object in the Controller like i've done:
ProcuraPMPorREClient pm = new ProcuraPMPorREClient();
Instead of this, I need to create a @Autowired object, like this:
@Autowired ProcuraPMPorREClient pm;
After, I only call the same routines:
ProcuraPMPorREResponse response = pm.getPMPorRE(123456);
System.out.println(response.getProcuraPMPorREResult().getNomePM());
This worked fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With