消耗SOAP Web服务错误(未注册的卫生机.检查WebServiceTemplate的配置)



我已经遵循了入门 - 消费肥皂Web服务(https://spring.io/guides/guides/gs/consuming-web-service/)以消费特定的Web服务一切都很好:

我已经完成了配置类:

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

}

客户端:

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

在类应用程序中:

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

启动应用程序时,Weservice调用正常工作,因此我可以在控制台上看到结果。我尝试使用相同的逻辑在其他类中调用此Web服务,但不起作用。例如,我在控制器类中进行了测试:

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

在这种情况下,网络服务不起作用,系统显示此错误消息:java.lang.illegalstateexception:no Marshaller已注册。检查WebServiceTemplate的配置。我不知道为什么,但是网络服务在一个特定的地方工作,而在另一个地方不起作用。如果有人知道会发生什么,我会兴奋!谢谢!

在这种情况下,我无法像我完成的控制器中实现一个新对象:

ProcuraPMPorREClient pm = new ProcuraPMPorREClient();

而不是这样,我需要创建一个@autowired对象,例如:

@Autowired ProcuraPMPorREClient pm;

之后,我只调用相同的例程:

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

这很好。

相关内容

  • 没有找到相关文章

最新更新