我试图通过spring-ws创建SOAP服务。我预先编写了第三方wsdl,并且我通过jaxb插件从wsdl(合同优先方法)生成代码。
当我构建项目时,spring会在host/my-app-context/ws/notification
上成功部署它。
问题 - 当我通过SOAP UI发出请求时,我看到No endpoint mapping found for [SaajSoapMessage {http://other.company.kz/service/}SendMessage]
。
注意1. http://other.company.kz/service给定wsdl中的第三方命名空间。 我部署ws的主机与之相同
注意2. wsdl中唯一的操作是<wsdl:operation name="SendMessage">
我的端点中的payloadRoot和localPart配置是否与第三方软件包和操作名称相同,或者它们应与我的hostname / deploy-url相同?我试过{{1} } @PayloadRoot(namespace = NAMESPACE_URI, localPart = "sendMessage")
是我服务的地址位置(来自wsdl),我也尝试过来自wsdl namespace(other.company.kz)的NAMESPACE_URI,但两者都失败了。
我的配置代码类似于
NAMESPACE_URI
引自wsdl
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/ws/*");
}
@Bean(name = "notification")
public Wsdl11Definition defaultWsdl11Definition() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("notification.wsdl"));
return wsdl11Definition;
}
我的终点
<wsdl:binding name="SomeBinding" type="tns0:bla-bla-bla">
<binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="SendMessage">
<operation soapAction=""/>
<wsdl:input name="SendMessageRequest">
<body use="literal"/>
</wsdl:input>
<wsdl:output name="SendMessageResponse">
<body use="literal"/>
</wsdl:output>
<wsdl:fault name="sendMessageFault">
<fault name="sendMessageFault" namespace="" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SomeService">
<wsdl:port binding="tns0:SomeBinding" name="SomePort">
<address location="http://myhost/my-app-context/ws/notification"/>
</wsdl:port>
</wsdl:service>
答案 0 :(得分:0)
在实现ws-server时遇到了类似的问题。在我的情况下,当没有使用ws-security时, @PayloadRoot 过去工作正常。
当我应用ws-security时,我曾经找不到端点,我的解决方案是依赖@SoapAction。
我当时的理解是: