消耗SOAP Web服务错误(未注册封送处理程序。请检查WebServiceTemplate的配置)
在这种情况下,我无法像我一样在Controller中实例化一个新对象:
ProcuraPMPorREClient pm = new ProcuraPMPorREClient();
代替此,我需要创建一个@Autowired对象,如下所示:
@Autowired ProcuraPMPorREClient pm;
之后,我只调用相同的例程:
ProcuraPMPorREResponse response = pm.getPMPorRE(123456); System.out.println(response.getProcuraPMPorREResult().getNomePM());
这很好。
解决方法我遵循了入门-使用SOAP Web服务(https://spring.io/guides/gs/consumption-web-service/)来使用特定的Web服务,并且一切正常:
我做了配置类:
@Configurationpublic class PMConfiguration { @Bean public Jaxb2Marshaller marshaller() {Jaxb2Marshaller marshaller = new Jaxb2Marshaller();// this package must match the package in the <generatePackage> specified in// pom.xmlmarshaller.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; }}
在课堂上申请:
@SpringBootApplicationpublic 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服务,但无法正常工作。例如,我已经在ControllerClass上进行了测试:
@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;}
在这种情况下,Web服务将无法运行,并且系统将显示以下错误消息:java.lang.IllegalStateException:没有注册编组。检查WebServiceTemplate的配置。我不知道为什么,但是Web服务只能在特定的地方工作,而不能在其他地方工作。如果有人知道会发生什么,我将不胜感激!谢谢!
相关文章:
1. html - 爬虫时出现“DNS lookup failed”,打开网页却没问题,这是什么情况?2. javascript - echart+百度地图3. 无效的配置对象已使用与API模式不匹配的配置对象初始化了Webpack4. web - Rails3使用form_for时出现undefined method `*_path’错误。5. css - autoprefixer没有添加web-kit前缀6. javascript 开发百度地图7. nginx - 关于vue项目部署到ngnix后出现的问题8. angular.js - 百度爬虫如何处理“#”符号?9. nosql - mongodb 多组数据不固定字段查询问题 [百度党请绕道]10. font-family - 我引入CSS3自定义字体没有效果?
