【发布时间】:2017-10-09 13:09:45
【问题描述】:
您好,我正在尝试创建 @endpoint SOAP 服务,但是当我尝试获取 WSDL 时,我得到了 405 Method Not Allowed。
有我的服务端点:
@Endpoint
public class SubscribeMemberService {
public static final String NAMESPACE_URI = "urn:v1.webservice.subscription.test.org";
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "subscribe")
@ResponsePayload
public SubscribeMemberResponse subscribe(@RequestPayload SubscribeMemberRequest request) throws SubscribeMemberFault_Exception {
LOG.info("request received: LastName:" + request.getName().getLastName());
SubscribeMemberResponse response = new SubscribeMemberResponse();
response.setInfoMessage("Subscription of " + request.getName().getLastName());
LOG.info("sending response:" + request.getName().getLastName());
return response;
}
}
还有我的 WS 配置:
@EnableWs
@Configuration
@ComponentScan("org.test")
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/ws/*");
}
@Bean(name = "subscribeMember")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema subscribeMember) {
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("subscribeMemberPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace(SubscribeMemberService.NAMESPACE_URI);
wsdl11Definition.setSchema(subscribeMember);
return wsdl11Definition;
}
@Bean
public XsdSchema subscribeMemberSchema() {
return new SimpleXsdSchema(new ClassPathResource("META-INF/wsdl/subscribeMember.xsd"));
}
}
是否可以链接到 WebSecurityConfigurerAdapter?因为在 /ws/* 上我没有 404 not found ,但我得到 405 not allowed 。有什么想法吗?
注意:WebSecurityConfigurerAdapter 类中的安全过滤器是
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic()
.and()
.authorizeRequests()
.anyRequest().hasRole("mySuperRole").and()
.csrf().disable();
}
【问题讨论】:
-
也许我发现了问题“使用浏览器访问 SOAP 服务时(即通过 GET)获取 405(不允许的方法)错误代码实际上是正确的行为:所有 SOAP HTTP 访问都是通过一个 POST,而不是一个 GET。您可以尝试将 SOAP 客户端指向 WSDL(例如 SoapUI),看看是否可以代替。 stackoverflow.com/questions/27198987/…我会用 SoapUI 测试一下
-
不,它不适用于 SOAP UI:“加载时出错 [localhost:8080/subscription-webservice/v1/ws/…: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: 错误:nul 后文件意外结束。”无论如何,应该可以通过 GET 访问 wsdl 文件。
标签: spring-boot spring-security spring-ws