使用 SOAP Web 服务错误(未注册编组器。检查 WebServiceTemplate 的配置)
Posted
技术标签:
【中文标题】使用 SOAP Web 服务错误(未注册编组器。检查 WebServiceTemplate 的配置)【英文标题】:Consuming a SOAP web service error (No marshaller registered. Check configuration of WebServiceTemplate) 【发布时间】:2018-06-01 20:08:42 【问题描述】:我已经按照入门 - 使用 SOAP Web 服务 (https://spring.io/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 服务,但不起作用。比如我在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;
在这种情况下,Web 服务不起作用,系统显示以下错误消息:java.lang.IllegalStateException: No marshaller registered。检查 WebServiceTemplate 的配置。我不知道为什么,但是 web 服务在特定的地方工作而在另一个地方不工作。如果有人知道发生了什么,我很感激!谢谢!
【问题讨论】:
new ProcuraPMPorREClient();
和 spring 使用完全配置的 bean 有什么区别...
哦,谢谢!我已经更改了 ProcuraPMPorREClient pm = new ProcuraPMPorREClient();到@Autowired ProcuraPMPorREClient pm,现在它正在工作!谢谢!
在这里遇到同样的问题,你能检查一下吗***.com/questions/50759580/…
【参考方案1】:
在这种情况下,我不能像我所做的那样在控制器中实例化一个新对象:
ProcuraPMPorREClient pm = new ProcuraPMPorREClient();
我需要创建一个@Autowired 对象,而不是这样:
@Autowired ProcuraPMPorREClient pm;
之后,我只调用相同的例程:
ProcuraPMPorREResponse response = pm.getPMPorRE(123456);
System.out.println(response.getProcuraPMPorREResult().getNomePM());
这很好用。
【讨论】:
这对我真的很有用@Murilo 我遇到了类似的问题。我也通过将客户端添加为 Autowired 来解决它。但是,我仍在寻找答案,为什么 main 使用 @SpringBootApplication 注释,为什么控制器启动的调用不起作用?以上是关于使用 SOAP Web 服务错误(未注册编组器。检查 WebServiceTemplate 的配置)的主要内容,如果未能解决你的问题,请参考以下文章
报告查看器 Web 控制 HTTP 处理程序未在应用程序的 web.config 文件中注册
编写一个包装器将现有的 REST API 公开为 SOAP Web 服务?
未找到[SaajSoapMessage的端点映射,SOAP WS执行期间发生异常