MarshallingWebServiceInboundGateway 的问题
Problems with MarshallingWebServiceInboundGateway
我使用 spring-boot 与 spring-integration 和 spring-ws 来提供 SOAP Web 服务作为我的集成流程的入口点。
我这样配置入站网关:
@Bean
MarshallingWebServiceInboundGateway entryPoint() {
MarshallingWebServiceInboundGateway entryPoint = new MarshallingWebServiceInboundGateway(jaxb2Marshaller());
return entryPoint;
}
@Bean
Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setContextPath("my.schemas");
return jaxb2Marshaller;
}
MessageDispatcherServlet 的配置如下:
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(context);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/entrypoint/*");
}
和映射:
@Autowired
MarshallingWebServiceInboundGateway entryPoint;
@Bean
UriEndpointMapping uriEndpointMapping() {
UriEndpointMapping uriEndpointMapping = new UriEndpointMapping();
uriEndpointMapping.setDefaultEndpoint(entryPoint);
return uriEndpointMapping;
}
根据 docs,我应该能够以这种方式使用 MarshallingWebServiceInboundGateway
,但是当我尝试在 SoapUI 中的这个端点上请求时,我得到这个:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">No adapter for endpoint [entryPoint]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我在这里错过了什么?
这个问题已经解决了。我还必须这样定义一个 bean:
@Bean
MessageEndpointAdapter messageEndpointAdapter() {
MessageEndpointAdapter adapter = new MessageEndpointAdapter();
return adapter;
}
我在任何文档中都找不到对此的引用,但这为我解决了这个特殊问题。
非常感谢,我对这个很生气。
我花了大约 4 个小时阅读文档,尝试,发誓,再读一遍,挖掘 SI 资源,再试一次,发誓更大声,直到我找到你的 post...
我认为没有其他地方提到需要适配器声明!
至少我设法从你喜欢的 Java 配置转换为 xml ;-)
<bean id="endpointAdapter" class="org.springframework.ws.server.endpoint.adapter.MessageEndpointAdapter" />
再次感谢您!
我使用 spring-boot 与 spring-integration 和 spring-ws 来提供 SOAP Web 服务作为我的集成流程的入口点。
我这样配置入站网关:
@Bean
MarshallingWebServiceInboundGateway entryPoint() {
MarshallingWebServiceInboundGateway entryPoint = new MarshallingWebServiceInboundGateway(jaxb2Marshaller());
return entryPoint;
}
@Bean
Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setContextPath("my.schemas");
return jaxb2Marshaller;
}
MessageDispatcherServlet 的配置如下:
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext context) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(context);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/entrypoint/*");
}
和映射:
@Autowired
MarshallingWebServiceInboundGateway entryPoint;
@Bean
UriEndpointMapping uriEndpointMapping() {
UriEndpointMapping uriEndpointMapping = new UriEndpointMapping();
uriEndpointMapping.setDefaultEndpoint(entryPoint);
return uriEndpointMapping;
}
根据 docs,我应该能够以这种方式使用 MarshallingWebServiceInboundGateway
,但是当我尝试在 SoapUI 中的这个端点上请求时,我得到这个:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">No adapter for endpoint [entryPoint]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我在这里错过了什么?
这个问题已经解决了。我还必须这样定义一个 bean:
@Bean
MessageEndpointAdapter messageEndpointAdapter() {
MessageEndpointAdapter adapter = new MessageEndpointAdapter();
return adapter;
}
我在任何文档中都找不到对此的引用,但这为我解决了这个特殊问题。
非常感谢,我对这个很生气。 我花了大约 4 个小时阅读文档,尝试,发誓,再读一遍,挖掘 SI 资源,再试一次,发誓更大声,直到我找到你的 post...
我认为没有其他地方提到需要适配器声明! 至少我设法从你喜欢的 Java 配置转换为 xml ;-)
<bean id="endpointAdapter" class="org.springframework.ws.server.endpoint.adapter.MessageEndpointAdapter" />
再次感谢您!