消耗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. docker start -a dockername 老是卡住,什么情況?2. mysql - 記得以前在哪里看過一個估算時間的網站3. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?4. angular.js - angularjs如何傳遞id給另一個視圖 根據id獲取json數據?5. 使用text-shadow可以給圖片加陰影嗎?6. 在windows下安裝docker Toolbox 啟動Docker Quickstart Terminal 失敗!7. nginx啟用gzip壓縮后,文件尺寸無變化.8. php - 一個操作請求多個服務如何保證數據的安全?9. java - StringBuffer轉成String,可以不同過tostring,而是通過+“”的方式轉換嗎?10. boot2docker無法啟動
